flask+gunicorn+nginx
作者:Python小白
链接:centos下通过gunicorn和nginx部署Flask项目 - Python小白的文章 - 知乎专栏
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
之前用Flask写了个解析Tumblr博客(为Tumblr默哀)的网站,然后直接放在DigitalOcean上运行:
python run.py结果感觉怎么那么不稳定!!!然后就以为是服务器不行
后来才知道原来Flask的app.run()只是用来本地调试用的,如果真正放到服务器上运行的话,是完全不行的!需要配合gunicorn/uWsgi和Nginx才行。
然后就在网上找到这篇文章《python web 部署:nginx + gunicorn + supervisor + flask 部署笔记》。文章看起来不错,但是尼玛写文章能不能用点心!!你根本就没有说完整个部署过程好吗!!Nginx的配置都没有说完好吗!!!对于没有接触过Nginx的小白来说,这是致命的好吗!!!
结果就搭配着gunicorn把Flask半部署,直接运行
gunicorn -w4 -b 0.0.0.0:80 run:app
把网站运行起来了!
ok,以上属于吐槽部分,接下来讲整个的部署过程!
首先说明搭建环境:DigitalOcean服务器
CentOS 64位系统
通过链接https://m.do.co/c/dbd97068223d注册,可以获得10刀!可以相当于免费用两个月哦!
1首先安装Flask、gunicorn、Nginx
DO的CentOS是没有安装pip和setuptools的,所以如果需要安装Python库的话,需要自己先安装setuptools。我比较懒,所以只安装了setuptools,用easy_install来安装Python库。
安装setuptools过程:
(1)下载setuptools包
# wget http://pypi.python.org/packages/source/s/setuptools/setuptools-2.0.tar.gz
(2)解压setuptools包
# tar zxvf setuptools-2.0.tar.gz
# cd setuptools-2.0
(3)编译setuptools
# python setup.py build
(4)开始执行setuptools安装
# python setup.py install
咳咳!!DO的CentOS好像连wget也没有安装,所以需要提前安装wget:
yum install wget
安装好setuptools后,就可以通过easy_install 安装各种Python库了:
easy_install flask
easy_install gunicorn
Flask和gunicorn安装好之后就安装Nginx,CentOS不能直接安装Nginx,还需要添加rpm(其实我根本不知道这是什么鬼,可能就是一个源吧)
1、CentOS 6,先执行:
[root@server ~]# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
2,安装nignx
[root@server ~]# yum install nginx
嗯,Nginx安装好了!2、添加Flask项目
这里就创建一个最简单的Flask项目,项目目录是/home/flask,在该目录下创建一个run.py的Python文件。
#run.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '
Hello World!
'if __name__ == '__main__':
app.run()
然后运行gunicorn
[root@server ~]# gunicorn -w 4 -b 0.0.0.0:5000 run:app
[2016-05-28 12:35:26 +0000] [1541] [INFO] Starting gunicorn 19.6.0
[2016-05-28 12:35:26 +0000] [1541] [INFO] Listening at: http://0.0.0.0:5000 (1541)
[2016-05-28 12:35:26 +0000] [1541] [INFO] Using worker: sync
[2016-05-28 12:35:26 +0000] [1546] [INFO] Booting worker with pid: 1546
[2016-05-28 12:35:26 +0000] [1551] [INFO] Booting worker with pid: 1551
[2016-05-28 12:35:26 +0000] [1552] [INFO] Booting worker with pid: 1552
[2016-05-28 12:35:26 +0000] [1553] [INFO] Booting worker with pid: 1553
这个时候打开浏览器,输入http://你的服务器ip:5000就可以看到运行结果
然后配置Nginx,刚才安装了Nginx之后,我们打开/etc/nginx/conf.d/default.conf,然后修改默认的default.conf为:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_redirect off;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
其中server_name就是你的域名,这里用localhost代表通过ip访问
配置好default.conf之后就启动Nginx吧!
[root@server ~]# service nginx start
Starting nginx: [ OK ]
[root@server ~]# nginx -s reload
ok!到这一步,整个部署过程就搞定了!打开浏览器输入http://你的服务器ip 看是否运行?
整个部署过程可以总结为:
安装Flask、gunicorn、Nginx -->
添加Flask项目 -->
运行Gunicorn -->
修改Nginx配置文件 -->
运行Nginx