在Ubuntu14.04上使用Gunicorn和Nginx部署Flask应用
最近闲来无事折腾了一下自己的个人公共号,通过 Flask 构建了几个简单的小功能然后部署到服务器上.网上关于部署的教程有很多,这里我就简单介绍一下我的部署步骤.
部署的准备工作
更新并安装下述的包
1 | apt-get update |
创建虚拟环境
切到项目所以目录下,由于我使用的是 python 版本是 3.5.2 的,所以通过下述命令去创建虚拟环境
1 | python -m venv Env # Env 为创建的虚拟环境的名称 |
然后激活环境安装相应的库
1 | source Env/bin/activate |
创建 WSGI 文件
通过命令行在项目目录下创建 wsgi.py
文件
1 | nano wsgi.py # 原来用 vim,后来发现用 nano 也很爽 |
这个文件内容其实很简单就是让程序运行起来:
1 | # wsgi.py |
然后保存
使用 Gunicorn 运行应用
由于服务默认开发端口仅有80和443端口,对此我也懒得修改,直接将服务挂载到80端口进行测试
1 | gunicorn --bind 0.0.0.0:80 wsgi |
通过访问我应用的指定的api然后成功获得了数据,然后开始进行下一步
创建一个启动脚本
这个脚本顾名思义允许 Ubuntu 自动启动 Gunicorn 从而挂载我的 Flask 应用.在 /etc/init
目录下创建以 .conf
结尾的文件:
1 | nano /etc/init/wechat.conf |
文件内容如下:
1 | wechat.conf |
保存退出,然后尝试运行你的脚本文件
1 | start wechat |
想要查看是否运行成功的话,可以使用下述命令:
1 | ps -aux | grep wechat |
如果你在输出的结果中看到相应的进程了就说明你的脚本运行成功了.然后就可以进行下一步
配置 Nginx
在这里介绍了如何简单配置 Nginx,但是在实际应用中需要思考一下是否真的需要用到 Nginx,Nginx有很多功能,但是对于像这样简单的小应用,直接 Gunicorn 裸跑也是没毛病的,但是你说你一台服务器挂多个域名,避免 Gunicorn 独占 80 端口,用 Nginx 这个更没毛病.
在 /etc/nginx/sites-available
目录下创建项目配置文件 wechat
,没必要将缺省文件删除
1 | nano /etc/nginx/sites-available/wechat |
配置文件内容如下:
1 | server { |
保存退出,然后为了确保配置文件生效,将其链接到 sites-enabled
目录下:
1 | ln -s /etc/nginx/sites-available/wechat /etc/nginx/sites-enabled |
测试一下配置文件是否有语法错误:
1 | nginx -t |
如果看见 succssful 的成功单词就说明配置文件没有任何问题,然后重启 nginx
1 | service nginx restart |
大功告成~