- 28
- 08月
本文简单介绍如何在Slackware环境下部署Flask应用程序,为了简单,没有使用uWSGI部署,而是简单了较简单的Gunicorn。其它Linux系统(比如Ubuntu和Centos)方法也是类似的。
Slackware版本:14.1
假设网站目录为:/tmp/wwwroot
。
[TOC]
安装基础环境
安装nginx
需要通过Slackwares.org来安装:
http://slackbuilds.org/repository/14.1/network/nginx/
安装python setuptools
需要通过Slackwares.org来安装:
http://slackbuilds.org/repository/14.1/python/pysetuptools/
安装pip
$ sudo easy_install pip
$ sudo pip install virtualenv
安装supervisor
安装:
$ sudo pip install supervisor
创建一个Flask程序
创建虚拟环境:
$ mkdir /tmp/wwwroot/web1
$ cd /tmp/wwwroot/web1
$ virtualenv deps
$ source deps/bin/activate
$ pip install flask gunicorn
创建一个简单的Flask程序:
$ 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端口只是一个演示。
整合
配置supervisor
创建配置文件:
$ 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
;command=/tmp/wwwroot/web1/deps/bin/gunicorn -b unix:/tmp/myapp.sock 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)
autostart=true
autorestart=true
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
配置nginx:
主要是把请求转交给gunicorn进行处理。
server {
listen 8080;
#默认请求
location / {
#请求转向本机ip:3721
proxy_pass http://127.0.0.1:3721; # 这里是gunicorn监听的地址
#proxy_pass http://unix:/tmp/myapp.sock; # 这里是gunicorn监听的地址
proxy_redirect off;
proxy_set_header Host $host:$server_port; #如果端口不是80要写上
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
(参考:http://gunicorn.org/#deployment)
现在重启nginx,访问http://127.0.0.1:8080
应该可以看到"hello flask 01"。
自动启动
那么,如果想开机时自动启动怎么办呢?或者说,如果机器重启了,那WEB服务就断了。
其实呢,也很简单,只要在/etc/rc.d/rc.local
中加入一句就可以了:
supervisord -c /tmp/wwwroot/supervisor.conf