Flask 代码: /usr/home/user/prj/python/flask-examples/example2.py
import flask
app = flask.Flask(__name__)
from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
@app.route("/")
def index():
return "Hello, " + flask.request.remote_addr
if __name__ == "__main__":
app.run(host="0.0.0.0")
用到3个软件Gunicorn、Nginx、Supervisor
Gunicorn
安装Gunicorn并启动一个4线程的web服务
# pip install gunicorn
# rehash
# gunicorn -w 4 -b 0.0.0.0:8005 example2:app
访问http://SERVER:8005,其它局域网电脑访问的话,SERVER替换为服务器ip。
Nginx
安装
sudo pkg install nginx
修改配置如下
/usr/local/etc/nginx/nginx.conf
server {
listen 81;
server_name _;
location / {
proxy_pass http://127.0.0.1:8005/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
编辑/etc/rc.conf
, 开启nginx开机自启动, 增加一行
nginx_enable="yes"
启动nginx
/usr/local/etc/rc.d/nginx start
现在还不能访问,因为应用还没有启动
Supervisor
安装
pip install Supervisor
编辑/etc/rc.conf
, 开启Supervisor开机自启动, 增加一行
supervisord_enable="yes"
不知道为什么此方法不生效,所以使用另一种方法开机启动
编辑/etc/rc.local
,没有就新建一个, 添加
/usr/local/bin/supervisord
保存并退出。最后修改rc.local权限
sudo chmod +x /etc/rc.local
开机自启动设置完毕。
配置/usr/local/etc/supervisord.conf
[unix_http_server]
file=/var/run/supervisor/supervisor.sock
chmod=0700
[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisor/supervisord.pid
childlogdir=/var/log/supervisor
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock
[program:flask_eu]
command=/usr/local/bin/gunicorn -w 2 -b 127.0.0.1:8005 app:app
directory=/home/freebsd/ERP
user=freebsd
autostart=true
autorestart=true
stdout_logfile=NONE
stderr_logfile=NONE
启动supervisord
/usr/local/bin/supervisord
网站已经可以访问了,应用意外退出或者服务器重启,服务会自动重启。
参考1http://www.michielovertoom.com/freebsd/flask-gunicorn-nginx-supervisord/,
参考2https://www.cnblogs.com/sundahua/p/9149692.html
参考1关于Supervisor的用法和配置,在树莓派系统不适用,就参考了下篇