1. 程式人生 > 其它 >用uWSGI和Nginx部署Flask專案

用uWSGI和Nginx部署Flask專案

安裝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_page
497 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