基本的部署方式是通過Flaks + WSGI + Nginx
首先通過遠程連接到服務器
ssh root@遠程服務器ip -p 遠程服務器端口
輸入密碼之后進入遠程服務器的操作
首先安裝pip
獲取get-pip.py文件
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
執行安裝:
python get-pip.py
安裝virtualenv
因為不同的項目可能需要不同的安裝包的版本,所以我們往往不是直接在系統中安裝Python的各種包,而是通過virtualenv建立虛擬的Python環境
首先通過pip安裝virtualenv
pip install virtual
然后創建一個項目文件夾
mkdir my_web_app
cd my_web_app
在my_web_app文件夾中創建虛擬環境:
virtualenv venv
開啟虛擬環境:
source ./venv/bin/activate
如果需要關閉虛擬環境:deactivate
此時你的命令行在最前面多了一個(venv)的標志,證明你已經進入了虛擬環境
安裝依賴庫
要使用Flask框架寫網頁,就需要安裝一系列跟Flask相關的庫,此時可以使用pip命令的通過文件進行安裝:
先建立一個requirements.txt,在其中寫上需要安裝的庫的名稱和版本號(版本號可以不寫,默認安裝最新版本)
$touch requirements.txt
$vim requirements.txt
在其中寫入以下內容:
Flask==0.10.1
Flask-Login==0.2.11
Flask-Mail==0.9.1
Flask-Moment==0.4.0
Flask-PageDown==0.1.5
Flask-SQLAlchemy==2.0
Flask-Script==2.0.5
Flask-WTF==0.10.2
Flask-Cache==0.13.1
Flask-Restless==0.15.0
Flask-Uploads==0.1.3
Jinja2==2.7.3
Mako==1.0.0
Markdown==2.5.1
MarkupSafe==0.23
SQLAlchemy==0.9.8
WTForms==2.0.1
Werkzeug==0.9.6
html5lib==1.0b3
itsdangerous==0.24
six==1.8.0
awesome-slugify==1.6
然后通過pip進行批量安裝:
pip install -r requirements.txt
然后我們需要安裝uSWGI,主要用於部署Flask項目:
pip install uSWGI
上傳項目文件
項目文件的組織結構如下:
root/wz/
└── my_flask
│ ├── logs
│ └── venv //虛擬目錄
│ │ ├── bin
│ │ │ ├── activate
│ │ │ ├── easy_install
│ │ │ ├── gunicorn
│ │ │ ├── pip
│ │ │ └── python
│ │ ├── include
│ │ │ └── python2.7 -> /usr/include/python2.7
│ │ ├── lib
│ │ │ └── python2.7
│ │ ├── local
│ │ │ ├── bin -> /home/shenye/shenyefuli/bin
│ │ │ ├── include -> /home/shenye/shenyefuli/include
│ │ │ └── lib -> /home/shenye/shenyefuli/lib
│ └── app //Flask 程序目錄
│ │ └── __init__.py //這是程序包文件。這個目錄下還有其它的文件此處略過
│ ├── manage.py
│ ├── requirements.txt
在app文件夾下的__init__.py文件進行修改,我們使用一個最簡單的程序進行演示:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
然后在app的上一級文件夾建立manage.py文件用於運行程序
from flask_script import Manager,Server
from app import app
manager = Manager(app)
manager.add_command('runserver',Server(host='0.0.0.0',port=5000,use_debugger=True))
if __name__ == '__main__':
manager.run()
此時如果我們使用命令:
python manage.py runserver
已經可以運行在本地 http://127.0.0.1:5000
接下來開始配置uWSGI
uWSGI有兩種啟動方式,在這里我們選了通過配置文件啟動的方法
在項目目錄中新建config.ini,寫入如下內容:
[uwsgi]
# uwsgi 啟動時所使用的地址與端口
http = 0.0.0.0:8000
# 指向網站目錄
chdir = /root/wz
home = /root/wz/venv
# python 啟動程序文件
wsgi-file = manage.py
# python 程序內用以啟動的 application 變量名
callable = app
# 處理器數
processes = 4
# 線程數
threads = 2
這里的8000就是我們外網訪問時服務器監聽的地址,由於我的路由器是搭在一個路由器下面的,此時我們需要登錄路由器的設置界面設置端口轉發:

填寫內網ip地址和本地端口,以及需要映射到外網的端口,在項目中,我們把本地的8000端口映射為外網的6000端口
配置好端口之后,輸入命令直接運行uWSGI:
uwsgi config.ini
到此為止,我們已經可以通過服務器公網ip:6000訪問你的Flask應用
安裝 Supervisor
[Supervisor|http://supervisord.org/configuration.html]可以同時啟動多個應用,最重要的是,當某個應用Crash的時候,他可以自動重啟該應用,保證可用性。
sudo apt-get install supervisor
Supervisor 的全局的配置文件位置在:
/etc/supervisor/supervisor.conf
正常情況下我們並不需要去對其作出任何的改動,只需要添加一個新的 *.conf 文件放在
/etc/supervisor/conf.d/
下就可以,那么我們就新建立一個用於啟動 my_flask 項目的 uwsgi 的 supervisor 配置 (命名為:my_flask_supervisor.conf):
[program:my_flask]
# 啟動命令入口
command=/home/www/my_flask/venv/bin/uwsgi /home/www/my_flask/config.ini
# 命令程序所在目錄
directory=/home/www/my_flask
#運行命令的用戶名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/home/www/my_flask/logs/uwsgi_supervisor.log
啟動服務
sudo service supervisor start
終止服務
sudo service supervisor stop
安裝 Nginx
[Nginx|http://nginx.com/]是輕量級、性能強、占用資源少,能很好的處理高並發的反向代理軟件。
sudo apt-get install nginx
配置 Nginx
Ubuntu 上配置 Nginx 也是很簡單,不要去改動默認的 nginx.conf 只需要將
/ext/nginx/sites-available/default
文件替換掉就可以了。
新建一個 default 文件:
server {
listen 80;
server_name XXX.XXX.XXX; #公網地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 指向uwsgi 所應用的內部地址,所有請求將轉發給uwsgi 處理
uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虛擬環境目錄
uwsgi_param UWSGI_CHDIR /home/www/my_flask; # 指向網站根目錄
uwsgi_param UWSGI_SCRIPT manage:app; # 指定啟動程序
}
}
將default配置文件替換掉就大功告成了!
還有,更改配置還需要記得重啟一下nginx:
sudo service nginx restart
