Nginx+uWSGI+Supervisor在Ubuntu上部署Flask应用

网上找了许多讲关于Flask应用部署的文章几乎都是一个helloworld的Demo,按照helloworld来部署都没问题,但实际项目部署时还是遇到了不少问题。在这里简单写下自己成功部署的过程,防止下次部署时就忘记了,好记性不如烂笔头这句话不是盖的。

 更多参考

Ubuntu Server 12.04 安装Nginx+uWSGI+Django环境  

Django+Nginx+uWSGI 部署  

Nginx+uWSGI+Django+Python 应用架构部署 

Ubuntu Server 14.04.2 LTS 配置 Nginx + Uwsgi + Django 

Flask+uWSGI+Nginx+Ubuntu部署教程

部署环境:

OS: Ubuntu 14.04.4 LTS Python: 2.7.6 Nginx: nginx/1.4.6(Ubuntu) uwsgi: 1.9.17.1-debian supervisord: 3.0b2

这个署架构中Nginx主要作为前置服务器,负责分发处理来自客户端的请求,uwsgi作为后端Flask应用的容器,supervisor作为监控程序,即看门狗。
由于项目直接放在阿里云服务器上,所以这里省略了项目上传这一步,并假设已经安装好了Python开发环境,若未配置好Python开发环境,请先配置好,本文假设项目所在的位置为/home/linuxidc。

环境配置:

sudo apt-get install uwsgi-plugin-python # 这个不装的话当发起请求时uwsgi会报错

若是Python3的话改为:

sudo apt-get install uwsgi-plugin-python3 STEP 1: Nginx安装配置 安装Nginx

1. 输入Nginx安装命令

sudo apt-get install nginx

2. 启动Nginx服务器:

sudo service nginx start

启动Nginx服务器并用浏览器访问测试一下Nginx是否安装成功,若成功,进入下一步。

3. 配置Nginx
进入/etc/nginx/sites-enabled/文件夹 注意不是sites-available

直接配置/etc/nginx/nginx.conf也可以,不过要根据其语法来配置,其实最后nginx.conf还是会调用/etc/nginx/sites-enabled/default的配置。

先将默认配置文件default备份(养成修改配置前先备份的习惯):

mv default default.bak

编辑配置文件:

vim default

写入配置内容:

server { listen 80; # 服务器监听端口 server_name 110.110.110.110; # 这里写你的域名或者公网IP charset utf-8; # 编码 client_max_body_size 75M; # 之前写的关于GET和POST的区别,这里应该是原因之一吧 location / { include uwsgi_params; # 导入uwsgi配置 uwsgi_pass 127.0.0.1:8000; # 转发端口,需要和uwsgi配置当中的监听端口一致 uwsgi_param UWSGI_PYTHON /home/linuxidc/venv; # Python解释器所在的路径(这里为虚拟环境) uwsgi_param UWSGI_CHDIR /home/linuxidc; # 项目根目录 uwsgi_param UWSGI_SCRIPT manage:app; # 项目的主程序 } }

输入:wq保存配置文件。配置好了之后别急着启动Nginx,记得先通过nginx -t测试一下配置文件是否正确,若检测配置文件失败,再好好检查下配置文件有没有疏漏。

此时访问Nginx服务器应该会得到502 Bad Gateway的提示,因为请求被Nginx转发了,但是并没有转发服务器来处理请求(还没有配置好uwsgi)。

STEP 2: uwsgi安装配置

安装uwsgi

sudo apt-get install uwsgi

编写uwsgi配置文件
在项目文件根目录新建配置文件uwsgi.ini(uwsgi支持多种配置文件格式, xml, ini, json等)

vim uwsgi.ini

写入配置内容如下:

[uwsgi] socket = 127.0.0.1:8000 # uwsgi的监听端口 plugins = python # 这行一定要加上,不然请求时会出现-- unavailable modifier requested: 0 --错误提示 chidir = /home/linuxidc # 项目根目录 wsgi-file = manage.py # flask程序的启动文件 callable = app # 程序变量名

输入:wq保存配置文件,可以通过uwsgi uwsgi.ini来启动uwsgi。

STEP 3: 启动及测试

Nginx和uwsgi都配置好了之后下一步就是启动Nginx和uwsgi了。

启动Nginx

sudo service nginx restart

启动uwsgi
进入项目根目录,即uwsgi.ini所在的目录,执行以下命令。

uwsgi wsgi.ini

若一切正常的话就可以在终端上看到uwsgi的启动信息了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/72885d240f0b72368350c632b767cb3b.html