
<center>nginx+uWSGI+supervisor+flask項目部署</center>
nginx+uWSGI+Flask+Supervisor部署項目
OS version: Ubuntu 16.04.2
nginx version: nginx/1.10.3 (Ubuntu)
uWSGI version: uWSGI (2.0.15)
Flask version: Flask (0.12.2)
Supervisor version: Supervisor(3.2.0)
nginx 配置 新建文件 /etc/nginx/conf.d/xxx.conf xxx.conf 中xxx你來定
刪除/etc/nginx/sites-enabled/ 以及 /etc/nginx/sites-available/ 下所有文件
你可以這么玩,sudo rm -f /etc/nginx/sites-enabled/default
為什么這么做呢?
先看nginx.conf里面有:
include /etc/nginx/conf.d/.conf;
include /etc/nginx/sites-enabled/;
而sites-enabled里面也有default這種文件,我這么做的原因是刪了看著干凈。以后做擴(kuò)展找起來也好找,都在conf.d目錄下。
極簡配置
客戶端訪問80端口,有Nginx接受到請求,并下發(fā)到服務(wù)器6001端口進(jìn)行處理,6001端口會部署一個uWSGIweb服務(wù)器.
server {
listen 80;
server_name www.smallstrong.site; #公網(wǎng)地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:6001;
}
}
Nginx常用的幾個命令:
sudo service nginx start
sudo service nginx stop
sudo service nginx restart
pip全局安裝virtualenv在自己項目根目錄新建一個獨立的Python環(huán)境
- pip install virtualenv
- cd 到你項目根目錄
- virtualenv api_env
- source api_env/bin/activate (deactivate 可退出)
- 接下來pip來安裝自己需要的Python庫,Flask,uWSGI等(依賴問題自行解決)

接下來寫一個最簡單的Flask應(yīng)用
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
whale_apis = {
'test'
}
@app.route('/api/<func>', methods=['GET', 'POST'])
def go(func):
exec 'import fe.' + func
data = eval('fe.' + func + '.go()')
return data
if __name__ == '__main__':
app.run(debug=True)
上面的代碼是我的flask網(wǎng)絡(luò)框架的主入口,路由是/api/方法名稱,默認(rèn)接受GET 和 POST請求,動態(tài)導(dǎo)入工程目錄下fe目錄下的同方法名文件,執(zhí)行g(shù)o方法并返還數(shù)據(jù)。fe目錄是所有網(wǎng)絡(luò)請求目錄,后續(xù)在剖析Flask應(yīng)用會詳細(xì)介紹。
寫好Flask入口之后,寫一個uWSGI服務(wù)器的配置文件
[uwsgi]
# uwsgi 啟動時所使用的地址與端口
socket = 127.0.0.1:6001
module = manage:app
# 處理器數(shù)
processes = 4
# 線程數(shù)
threads = 2
req-logger = file:/home/small/logs/req.log
logger = file:/home/small/logs/err.log
放在項目根目錄下,取名叫uwsgi.ini
這時候 命令行輸入 uwsgi uwsgi.ini 即開啟了uWSGI服務(wù)器。
Supervisor安裝管理uwsgi進(jìn)程
[program:whale_api]
command=/home/small/whale/whale_api/api_env/bin/uwsgi /home/small/whale/whale_api/uwsgi.ini
directory=/home/small/whale/whale_api
user=root
autostart=true
autorestart=true
startretries=3
stdout_logfile=/home/small/logs/supervisor_out.log
stderr_logfile=/home/small/logs/supervisor_err.log
默認(rèn)生成的配置文件里面會有一部分要修改,包括日志輸出位置。
serverurl=unix:///var/run/supervisor.sock找不到原因是你殺死supervisord進(jìn)程重新開或是權(quán)限不足,反正這塊坑還是比較多的
啟動supervisor
sudo supervisord -c supervisord.conf
管理常用指令:
sudo supervisorctl shutdown //會關(guān)閉supervisor進(jìn)程和其管理的子進(jìn)程
sudo supervisorctl status //查看現(xiàn)在運行的supervisor進(jìn)程的狀態(tài)
sudo supervisorctl start
sudo supervisorctl stop
sudo supervisorctl restart
昨晚的結(jié)果就是:

這只是萬里長征第一步。寫下這些命令也只是方便日后出問題了來查閱,不至于很悶逼。相信還有很多未知的問題在等待這我,等我踩完會繼續(xù)在文章中填上。下班回家!