記錄一下將本地的flask web后臺(tái)部署到阿里云服務(wù)器的整個(gè)過程:
- 安裝python環(huán)境
由于不同的項(xiàng)目可能會(huì)引用不同的python包要尔,為了避免不同版本和應(yīng)用之間的沖突而造成“依賴地獄”剃氧,我們使用virtualenv為不同的應(yīng)用創(chuàng)建獨(dú)立的開發(fā)環(huán)境:
pip install virtualenv
mkdir myproject
cd myproject
python3 -m venv venv
激活venv:
. venv/bin/activate
- 將代碼從本地上傳到服務(wù)器上
使用scp命令上傳代碼 - 安裝uwsgi并配置
(venv)my_flask_project root$ pip install uwsgi
接著需要配置uwsgi, 在項(xiàng)目目錄下創(chuàng)建一個(gè)config.ini,如下所示:
[uwsgi]
# uwsgi 啟動(dòng)時(shí)所使用的地址與端口
socket = 127.0.0.1:8001
# 指向網(wǎng)站目錄
chdir = /home/www/
# python 啟動(dòng)程序文件
wsgi-file = manage.py
# python 程序內(nèi)用以啟動(dòng)的 application 變量名
callable = app
# 處理器數(shù)
processes = 4
# 線程數(shù)
threads = 2
#狀態(tài)檢測(cè)地址
stats = 127.0.0.1:5000
這邊的stats是flask起服務(wù)時(shí)的端口號(hào),socket是uwsgi起的端口號(hào)溯饵。
- 下載supervisor并配置
下載配置好uwsgi后并沒有大功告成吕漂,我們需要對(duì)應(yīng)用的進(jìn)程進(jìn)行保護(hù)蚓哩,在進(jìn)程異常中斷時(shí)能夠重啟。supervisor便是用來實(shí)現(xiàn)進(jìn)程保護(hù)件已。
安裝:
apt-get install supervisor
Supervisor 的全局的配置文件位置在:
/etc/supervisor/supervisor.conf
正常情況下我們不需要對(duì)該文件進(jìn)行任何操作笋额,只需要添加一個(gè)新的*.conf即可,比如在該目錄下新建一個(gè)my_flask_supervisor.conf篷扩,并進(jìn)行如下配置:
[program:my_flask]
# 啟動(dòng)命令入口
command=/home/www/my_flask/venv/bin/uwsgi /home/www/my_flask/config.ini
# 命令程序所在目錄
directory=/home/www/my_flask
#運(yùn)行命令的用戶名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/home/www/my_flask/logs/uwsgi_supervisor.log
啟動(dòng)supervisor
ubantu
service supervisor start
centos :
supervisord
停止supervisor
service supervisor stop
- 配置nginx
找到nginx.conf
由于我是https協(xié)議兄猩,所以監(jiān)聽的端口號(hào)是443,如果是http協(xié)議鉴未,則對(duì)應(yīng)的端口號(hào)為80枢冤。配置如下:
server {
listen 443;
server_name XXX.XXX.XXX; #公網(wǎng)地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 指向uwsgi 所應(yīng)用的內(nèi)部地址,所有請(qǐng)求將轉(zhuǎn)發(fā)給uwsgi 處理
uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虛擬環(huán)境目錄
uwsgi_param UWSGI_CHDIR /home/www/my_flask; # 指向網(wǎng)站根目錄
uwsgi_param UWSGI_SCRIPT manage:app; # 指定啟動(dòng)程序
}
location ~/uri {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 指向uwsgi 所應(yīng)用的內(nèi)部地址,所有請(qǐng)求將轉(zhuǎn)發(fā)給uwsgi 處理
uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虛擬環(huán)境目錄
uwsgi_param UWSGI_CHDIR /home/www/my_flask; # 指向網(wǎng)站根目錄
uwsgi_param UWSGI_SCRIPT manage:app; # 指定啟動(dòng)程序
}
}
另外 在python代碼中app.route('uri/')
uri后面需要加/,否則會(huì)報(bào)404