用uWSGI和Nginx部署Flask專案
阿新 • • 發佈:2021-12-17
安裝uWSGI
pip install uwsgi
在專案的目錄建立一個uwsgi.ini的配置檔案(manage.py)
[uwsgi] # uwsgi 啟動時所使用的地址與埠(可以與專案埠不一致) socket = 127.0.0.1:8088 # python 啟動程式檔案 wsgi-file = manage.py # 處理器數 processes = 4 # 執行緒數 threads = 2 #指的後臺啟動 日誌輸出的地方 daemonize = uwsgi.log #儲存主程序的程序號 pidfile = uwsgi.pid #指定直譯器位置/模組位置/專案找不到模組就配置這 pythonpath= /usr/local/python3/bin/python3.7 pythonpath = /usr/local/lib/python3.6/site-packages
然後配置Nginx,找到Nginx的配置檔案nginx.conf,在http塊下加上下面程式碼
server { listen 80; listen 443 ssl http2; server_name www.域名; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/靜態檔案路徑; #SSL-START SSL相關配置,請勿刪除或修改下一行帶註釋的404規則 #error_page 404/404.html; ssl_certificate /etc/letsencrypt/live/www.chenzhongsheng.cn/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.chenzhongsheng.cn/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page497 https://$host$request_uri; #引入uwsgi反向代理8088埠 location /api { include uwsgi_params; uwsgi_pass 127.0.0.1:8088; uwsgi_param UWSGI_SCRIPT manage:app; #proxy_pass http://127.0.0.1:8088/; } }
重啟nginx
nginx -s reload
啟動uWSGI
uwsgi --ini uwsgi.ini
uwsgi重啟
uwsgi --reload uwsgi.pid
uwsgi停止
uwsgi --stop uwsgi.pid
問題記錄:
之前一直用parcharm連線伺服器執行flask沒出問題
uwsgi啟動之後會報錯:SyntaxError: Non-ASCII character '\xe6' in file
在檔案頭部新增如下注釋
# coding=<encoding name>
例如,可新增# coding=utf-8
原部落格:https://blog.csdn.net/jishuzhain/article/details/89707931
訪問flask專案會報404:
原因是:nginx反向代理
#proxy_pass http://127.0.0.1:8088/;最後是帶 / 的
改為uwsgi後:uwsgi_pass 127.0.0.1:8088; 是不帶 / 的
也就是之前訪問時 /api/介面路徑,uwsgi代理後就變為 /介面路徑 ,少了/api
在專案藍圖路徑中加上/api即可,如:
app.register_blueprint(auth, url_prefix='/api/auth') app.register_blueprint(user, url_prefix='/api/user')
參考部落格:https://www.jianshu.com/p/d484ead4cc18
找不到模組注意配置uwsgi.ini檔案
#指定直譯器位置/模組位置/專案找不到模組就配置這 pythonpath = /usr/local/python3/bin/python3.7 pythonpath = /usr/local/lib/python3.6/site-packages
pip3 安裝模組會安裝到python3.6資料夾
pip3 指定目錄安裝模組
pip3 install --target=//usr/local/安裝路徑 package_name