Flask+uwsgi+nginx 部署
Posted 独角兕大王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于Flask+uwsgi+nginx 部署的主要内容,如果未能解决你的问题,请参考以下文章