本文簡單介紹如何在Slackware環境下部署Flask應用程序,爲了簡單,沒有使用uWSGI部署,而是簡單了較簡單的Gunicorn。其它Linux系統(好比Ubuntu和Centos)方法也是相似的。html
Slackware版本:14.1python
假設網站目錄爲:/tmp/wwwroot
。nginx
須要經過Slackwares.org來安裝:web
http://slackbuilds.org/repository/14.1/network/nginx/flask
須要經過Slackwares.org來安裝:app
http://slackbuilds.org/repository/14.1/python/pysetuptools/網站
$ sudo easy_install pip $ sudo pip install virtualenv
安裝:ui
$ sudo pip install supervisor
建立虛擬環境:code
$ mkdir /tmp/wwwroot/web1 $ cd /tmp/wwwroot/web1 $ virtualenv deps $ source deps/bin/activate $ pip install flask gunicorn
建立一個簡單的Flask程序:server
$ cat > myapp.py << EOF from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "hello flask 01" EOF
使用gunicorn執行Flask程序:
最簡單的用法:
$ gunicorn -b 127.0.0.1:3721 myapp:app
如今訪問http://127.0.0.1:3721
,應該能夠看到"hello flask 01"。
這裏3721端口只是一個演示。
建立配置文件:
$ cd /tmp/wwwroot $ echo_supervisord_conf > supervisor.conf $ cat >> supervisor.conf << EOF [program:myapp] ;user=digwtx command=/tmp/wwwroot/web1/deps/bin/gunicorn -b 127.0.0.1:3721 myapp:app directory=/tmp/wwwroot/web1 process_name=%(program_name)s ; process_name expr (default %(program_name)s) numprocs=1 ; number of processes copies to start (def 1) stopsignal=QUIT ; signal used to kill process (default TERM) redirect_stderr=true ; redirect proc stderr to stdout (default false) stdout_logfile=/tmp/myapp.log ; stdout log path, NONE for none; default AUTO EOF
啓動進程:
$ supervisord -c supervisor.conf
管理進程:
$ supervisorctl -c supervisor.conf
主要是把請求轉交給gunicorn進行處理。
server { listen 8080; #默認請求 location / { #請求轉向本機ip:3721 proxy_pass http://127.0.0.1:3721; # 這裏是gunicorn監聽的地址 proxy_redirect off; proxy_set_header Host $host:8080; #若是端口不是80要寫上 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
如今重啓nginx,訪問http://127.0.0.1:8080
應該能夠看到"hello flask 01"。
那麼,若是想開機時自動啓動怎麼辦呢?或者說,若是機器重啓了,那WEB服務就斷了。
其實呢,也很簡單,只要在/etc/rc.d/rc.local
中加入一句就能夠了:
supervisord -c /tmp/wwwroot/supervisor.conf