用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

 

posted @ 2021-12-17 13:56  待炒的鱼  阅读(334)  评论(0)    收藏  举报