#for conda source activate my_project_env conda install -r requirements.txt #for virtualenv activate my_project_env pip install -r requirements.txt
gunicorn -w 4 -b 0.0.0.0:8080 run:app
server {
listen 80; # nginx監聽的端口server_name _;
location / {proxy_pass http://127.0.0.1:8080; # 表名nginx接收到請求去哪裏找gunicorn的服務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;}}
service nginx start/stop/restart/reload/status #check status: ps -aux | grep nginx
(nginx收到客戶端發來的請求,根據nginx中配置的路由,將其轉發給WSGI)nginx:"WSGI,找你的來了!"(WSGI服務器根據WSGI協議解析請求,配置好環境變量,調用start_response方法呼叫flask框架)WSGI服務器:"flask,快來接客,客戶資料我都給你準備好了!"(flask根據env環境變量,請求參數和路徑找到對應處理函數,生成html)flask:"!@#$%^......WSGI,html文檔弄好了,拿去吧。"(WSGI拿到html,再組裝根據env變量組裝成一個http響應,發送給nginx)WSGI服務器:"nginx,剛纔誰找我來着?回他個話,!@#$%^....."(nginx再將響應發送給客戶端)
###生成一個supervisord服務的配置文件
echo_supervisord_conf > supervisord.conf
###將配置文件統一放在/etc下
cp
supervisord.conf
/etc/supervisord
.conf
###修改配置文件
vi
/etc/supervisord
.conf
##加入如下配置信息,
[include]
files =
/etc/supervisord
.d/*.conf
###爲了避免將全部新增配置信息全寫在一個配置文件裏
###每一個配置信息新增一個配置文件,都會被上面那個include添加進去
mkdir
/etc/supervisord
.d/
### 在此目錄下增長本app的confsudo vi /etc/supervisord.d/my_flask.conf#加入, 注意其中的路徑和用戶名:[program:my_flask_app]directory=/home/leslie/flask-project-directorycommand=/your-gunicorn-whole-path-here/gunicorn app:app -b 127.0.0.1:8080 --workers 8 --max-requests 1000user=leslieautostart=true
autorestart=true
redirect_stderr=True
/etc/init.d/supervisord
):#!/bin/sh
#
# /etc/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord
# Source init functions
.
/etc/rc
.d
/init
.d
/functions
prog=
"supervisord"
prefix=
"/usr/leslie"
exec_prefix=
"${prefix}"
prog_bin=
"${exec_prefix}/your-path-of-supervisor/bin/supervisord"
# PIDFILE=
"/var/run/$prog.pid" # 博客推薦的這個設置對我來講不行,我檢查本身的supervisord.conf發現pidfile在tmp
PIDFILE="/tmp/$prog.pid"CONF= "/etc/supervisord.conf" # 讓啓動的時候知道去哪裏找配置文件 文章2沒有這個start()
{
echo
-n $
"Starting $prog: "
###注意下面這一行必定得有-c /etc/supervisord.conf
daemon $prog_bin -c $CONF
--pidfile $PIDFILE
[ -f $PIDFILE ] && success $
"$prog startup"
|| failure $
"$prog startup"
echo
}
stop()
{
echo
-n $
"Shutting down $prog: "
[ -f $PIDFILE ] && killproc $prog || success $
"$prog shutdown"
echo
}
case
"$1"
in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
stop
start
;;
*)
echo
"Usage: $0 {start|stop|restart|status}"
;;
esac
sudo chmod +x /etc/rc.d/init.d/supervisord sudo chkconfig --add supervisord sudo chkconfig supervisord on sudo service supervisord start
ps -ef | grep supervisord ## 同時也能夠有service supervisord restart/stop/stats
ps -ef | grep supervisord # 經過這個來得到supervisord的進程pid 而後殺掉以前的進程後再啓動。 kill (-s SIGTERM) pid