Flask+uwsgi+nginx 部署

部署概述:

  将代码上传至云服务器,使用python3 -m venv env 创建虚拟环境,使用source env/bin/active.. 激活虚拟环境, 通过pip install -r requirements.txt 文件安装模块,编写配置文件uwsgi(自己添加模块安装), 使用uwsgi --ini uwsgi.ini 启动( uwsgi --reload uwsgi.pid 重启,uwsgi --stop uwsgi.pid 关闭,pid文件需配置后才有),最后编辑nginx配置文件,如果使用yum安装的nginx,配置文件一般在/etc/nginx/nginx.conf, 模板文件在/usr/share/nginx中,输出文件一般在conf文件中指定了,最后使用nginx -c /etc/nginx/nginx.conf 启动(最好先 -t 检测哈)

1、首先问题:启动nginx后,公网什么都没反应?

  这种情况下,首先查看nginx的日志,这里配置在/var/log/nginx中的error.log, 如果这时候浏览器访问了但是没有日志,那多半是公网被拦截了,需要去看看你的云服务器的安全策略是否开启对应的端口,其次可以在本地使用curl -i localhost:8000 来查看我们的服务在本地是否可以访问,如果本地都访问不了,那说明服务启动失败。也可以使用:netstat -tlunp查看对应的端口是否开启。

 2、访问到nginx的日志文件,出现无数多次redirect重定向,这是由于nginx配置中,的try_files配置项的作用,导致无数次重连接

  参考如下nginx配置:

    server {
        listen       80;
        server_name  localhost;
        # Load configuration files for the default server block.
        
        location / { 
                root /root/wanxxx/xxx/wan_front/out_file/;
                index index.html;
                try_files $uri $uri/ =404;   # 这里直接配置为404,不重定向
        }
        
        error_page 404 /404.html;
            location = /40x.html {
        }
        
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
   server {
        listen 5001;
        server_name xxx.xxx.8.16;
        location / {
                include uwsgi_params;
                uwsgi_pass  0.0.0.0:5000;
        }

   }

  上面的nginx配置是一个前后端分离项目的配置,对外暴露80端口,访问后得到前端代码和页面,在页面中的api请求会发给5001端口,nginx针对5001做代理,转发给后端5000端口。

3、前端页面能访问到,但是后端动作没有效果,查看uwsgi.log文件发现,每次访问日志:--- no python application found, check your startup logs for errors ---,再往上看看就发现是因为有一个模块无法导入,其实本质上是由于python的环境有问题,明明切换到虚拟环境的。所以我们需要注释掉虚拟环境,或者其他方法

  参考uwsgi.ini

[uwsgi]
socket = 0.0.0.0:5000
#由于外部还要嵌套Nginx,这里可以使用socket进行通信,如果Nginx和uwsgi部署在同一台机器上,直接使用127.0.0.1
#如果外部直接通过uwsgi访问服务,需将socket改为http-socket或者http,将127.0.0.1改为0.0.0.0
chdir = /root/wane/wanhe
#项目目录
#virtualenv = /root/wane/env
#虚拟环境所在路径
wsgi-file = manage.py
master = true
callable = app
buffer-size = 32768
#超时时间(秒)
daemonize =./uwsgi.log
#进程会在后台运行,并输出日志
pidfile = ./uwsgi.pid

  

原文地址:https://www.cnblogs.com/double-W/p/12910785.html