centos下通過gunicorn+nginx+supervisor部署Flask項目
python run.py
結果感覺怎麼那麼不穩定!!!然後就以為是伺服器不行
後來才知道原來Flask的app.run()只是用來本地調試用的,如果真正放到伺服器上運行的話,是完全不行的!需要配合gunicorn/uWsgi和Nginx才行。
然後就在網上找到這篇文章http://www.jianshu.com/p/be9dd421fb8d。文章看起來不錯,但是尼瑪寫文章能不能用點心!!你根本就沒有說完整個部署過程好嗎!!Nginx的配置都沒有說完好嗎!!!對於沒有接觸過Nginx的小白來說,這是致命的好嗎!!!
結果就搭配著gunicorn把Flask半部署,直接運行
gunicorn -w4 -b 0.0.0.0:80 run:app
把網站運行起來了!
ok,以上屬於吐槽部分,接下來講整個的部署過程!首先說明搭建環境:
- DigitalOcean伺服器
- CentOS 64位系統
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
yum install wget
安裝好setuptools後,就可以通過easy_install 安裝各種Python庫了:
easy_install flaskeasy_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.rpm2,安裝nignx[root@server ~]# yum install nginx
嗯,Nginx安裝好了!
2、添加Flask項目
這裡就創建一個最簡單的Flask項目,項目目錄是/home/flask,在該目錄下創建一個run.py的Python文件。
#run.pyfrom flask import Flaskapp = Flask(__name__)@app.route(/) def index(): return <h1>Hello World!</h1>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 startStarting nginx: [ OK ][root@server ~]# nginx -s reload
ok!到這一步,整個部署過程就搞定了!打開瀏覽器輸入http://你的伺服器ip 看是否運行?
整個部署過程可以總結為:
安裝Flask、gunicorn、Nginx -->
添加Flask項目 -->
運行Gunicorn -->
修改Nginx配置文件 -->
運行Nginx
----------------------------------------------------------------------------
以上步驟不能保證開機運行網站,因此需要通過supervisor對網站進行開機啟動,步驟如下:
1、首先安裝supervisor
pip install supervisor
2、在項目目錄添加supervisor的配置文件,在本例中是/home/flask
echo_supervisord_conf > supervisord.conf
3、配置
vi supervisord.conf
添加如下信息
[program:myapp]directory = /home/flaskcommand = gunicorn -w4 -b 0.0.0.0:5000 run:app
同時可以開啟supervisor的web管理頁面
[inet_http_server]port = 0.0.0.0:9001
4、最後,我不清楚怎麼通過supervisor開啟啟動這個配置文件,因此通過開機任務啟動
vi /etc/rc.d/rc.local
並在最後添加
supervisord -c /home/flask/supervisord.conf
尾聲:通過以上步驟,那麼基本上就可以開啟啟動網站了!reboot試一試~~
推薦閱讀:
※誰能給我詳細講解一下python中類是什麼意思?
※ruby和python該學那一個?
※有哪些應用場景適合用python的gevent來完成?
※怎麼看待最近 Python 變成 Web 開發語言排行第二?
※如何優雅的「輪帶逛」初級篇——獲取單張圖片