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