supervisor+ngnix+uwsgi/gunicorn+flask 

1.flask

项目路径 /yisa_oe/myflask
(1)安装
$ sudo pip3 install Flask   # import 测试是否安装好

(2).编辑文件 manage.py

# -*- coding:utf8 -*-
from flask import Flask

app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8001, debug=True)

2.uwsgi

yum install python3-devel.x86_64
pip install uwsgi

(2)vim uwsgi_config.ini

[uwsgi]
# uwsgi 启动时所使用的地址与端口,也可以使用.sock文件的方式
socket = 127.0.0.1:5000
# 指向网站目录
chdir = /yisa_oe/myflask
# python 启动程序文件
wsgi-file = manage.py
# python 程序内用以启动的 application 变量名
callable = app
# 处理器数
processes = 1
# 线程数
threads = 4
#状态检测地址
stats = 127.0.0.1:5001
#项目flask日志文件
logto = /yisa_oe/myflask/log/manage.log

 

3.ngnix 

server {
    listen 81;
    server_name 127.0.0.1;
    charset utf-8;
    client_max_body_size 75M;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:5000;
    }
}

访问 81端口就可以访问到文件了 

4.supervisor 

(1)安装
yum install supervisor

(2)配置

echo_supervisord_conf > /etc/supervisor/supervisord.conf

编辑 /etc/supervisor/supervisord.conf

[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0:9001        ; ip_address:port specifier, *:port for all iface
;username=user              ; default is no username (open server)
;password=123               ; default is no password (open server)

添加

[include]
files = /etc/supervisor/conf.d/*.conf

(3)vim /etc/supervisor/conf.d/uwsgi.conf

[program: uwsgi]
#supervisor执行命令
command = uwsgi uwsgi_config.ini
#项目目录
derectory = /yisa_oe/myflask/
#开始的时候等待多少秒
startsecs = 0
#停止时等待多少秒
stopawitsecs = 0
#自动开始
autorestart = true
#程序挂了是否重启
autorestart = true
#输出的log文件
stdout_logfile = /var/log/supervisor.log
#输出的错误文件
stderr_logfile = /var/log/supervisor.err
#把 stderr 重定向到 stdout,默认 false
redirect_stderr = true
#stdout 日志文件大小,默认 50MB
stdout_logfile_maxbytes = 50MB
[supervisor]
# log 级别
loglevel = info

(4) supervisord -c /etc/supervisor/supervisord.conf

    如果是已经启动的状态
    supervisorctl  update
    页面 81 9001都能访问,删除进程能自启 就说明名没问题

5.gunicorn (uwsgi/gunicorn 二选一)

(1)安装
pip3 install gunicorn
pip3 install wheel
pip3 install gevent

(2)测试启动 

gunicorn -w 4 -b 0.0.0.0:5000 -k gevent manage:app  # 这样就可以启动并访问了

(3) 配置ngnix  (可选,可不配)

server {
    listen 83;
    server_name default_server;
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:5001;
    }
}

(4)vim /etc/supervisor/conf.d/gunicorn.conf

# 这里注意不要重名
[program: gunicorn]
#supervisor执行命令
command = gunicorn -w 4 -b 0.0.0.0:5000 -k gevent manage:app
#项目目录
derectory = /yisa_oe/myflask/
#开始的时候等待多少秒
startsecs = 0
#停止时等待多少秒
stopawitsecs = 0
#自动开始
autorestart = true
#程序挂了是否重启
autorestart = true
#输出的log文件
stdout_logfile = /var/log/gunicorn.log
#输出的错误文件
stderr_logfile = /var/log/gunicorn.err
#把 stderr 重定向到 stdout,默认 false
redirect_stderr = true
#stdout 日志文件大小,默认 50MB
stdout_logfile_maxbytes = 50MB
[supervisor]
# log 级别
loglevel = info

加载

supervisorctl update

结果:

页面访问5000 端口发现可以访问

ps -ef | grep gunicorn 并kill掉 发现可以自动恢复
 

拓展:

supervisord
-c, --configuration  指定配置文件路径 (默认为/etc/supervisord.conf)
-i, --interactive  执行命令后启动交互式shell
-s, --serverurl URL  upervisord服务器监听的URL(默认为“ http:// localhost:9001 ”)
-u, --username    用于与服务器进行身份验证的用户名
-p, --password    用于与服务器进行身份验证的密码
-r, --history-file     保留readline历史记录(如果readline可用)
supervisorctl
add <name> [...]      激活进程/组的配置中的任何更新
remove <name> [...]   从活动配置中删除进程/组
update                重新加载配置,然后根据需要添加和删除(重新启动程序)
clear <name>          清除进程的日志文件。
clear <name> <name>   清除多个进程的日志文件
clear all             清除所有进程的日志文件
fg <process>          进入supervisor前台模式, 按Ctrl + C退出
PID                   获得supervisord的PID。
pid <name>            按名称获取单个子进程的PID。
pid all               获取每个子进程的PID,每行一个。
reread                重新加载守护程序的配置文件,无需添加/删除(无重启)
注意:restart不会重新读取配置文件。可以用reread和update
restart <name>    重新启动进程
restart <gname>:*    重新启动组中的所有进程
restart <name> <name>    重新启动多个进程或组
restart all    重新启动所有进程
start <name>    开启一个进程
start <gname>:*    启动组中的所有进程
start <name> <name>    启动多个进程或组
start all    开始所有进程
status          获取所有进程状态信息。
status <name>    按名称获取单个进程的状态。
status <name> <name>    获取多个命名进程的状态。
stop <name>    停止一个进程
stop <gname>:*    停止组中的所有进程
stop <gname> <gname>    停止多个进程或组
stop all                 停止所有进程

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值