1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Flask部署| gunicorn nginx部署flask项目 并用supervisor来管理进程

Flask部署| gunicorn nginx部署flask项目 并用supervisor来管理进程

时间:2022-09-16 14:19:42

相关推荐

Flask部署| gunicorn nginx部署flask项目 并用supervisor来管理进程

本科的时候做公众号,开始提供学生教务查询服务,后端从PHP转到Python,无论是使用django还是flask,部署都没PHP那么方便,每次修改程序完,都是ps ax,然后再kill,再run。emmmmmm,其实一直都知道supervisor,之前配置过几次,都没配成功 ,也就没耐心好好去学一学,刚好寒假想重新学一下flask,就尝试了一下,配置成功,顺便记录下,以便以后的使用。

Flask项目开发

emmmmmm,这里就不赘述了,我这里部署的是自己根据Flask官方文档进行练习的项目,如果觉得还不错,可以给个star哦

Github地址:/LDouble/Flask-Learning

用gunicorn运行Flask项目

Flask自带server性能等问题,没办法部署到生产环境,之前用的时候,官方提供了很多种方案,详情见/flask/deploying/,我是误打误撞选择了gunicorn,而且觉得用起来挺舒服的。

安装gunicorn

pip3 install gunicorn

通过命令启动程序

gunicorn --workers=2 test:app # test为模块名,test:app,意味着我的test.py中的服务器实例化对象为app workers=2 代表2个进程[-02-18 16:50:18 +0800] [4858] [INFO] Starting gunicorn 19.7.1[-02-18 16:50:18 +0800] [4858] [INFO] Listening at: http://127.0.0.1:8000 (4858) #默认运行在8000端口[-02-18 16:50:18 +0800] [4858] [INFO] Using worker: sync #[-02-18 16:50:18 +0800] [4863] [INFO] Booting worker with pid: 4863[-02-18 16:50:18 +0800] [4864] [INFO] Booting worker with pid: 4864

其它更多参数以及说明参考

/en/stable/run.html#commands

/y472360651/article/details/78538188

编写配置文件

那么多配置文件,我们要是全部都在命令行输入,岂不是太麻烦了,所以我们可以通过加载配置文件来运行程序。配置文件的参数和上面提到的差不多,可以按照自己的需要选择何时的参数即可。

import osfrom gevent import monkeymonkey.patch_all()import multiprocessingdebug = Falsebind = "0.0.0.0:5001"pidfile = "gunicorn.pid"logfile = "error.log"workers = multiprocessing.cpu_count()*2 + 1worker_class = "gevent" # 异步非阻塞reload = True # 自动重新加载#daemon = True

gunicorn -c gunc.py hello:app #运行程序

supervisor 配置管理进程

安装supervisor并生成配置文件模板

pip install supervisor #因为supervisor目前只支持py2,所以不能用pip3进行安装 emmmmmmecho_supervisord_conf > supervisor.conf # 导出配置模板# 然后supervisor.conf 尾部添加内容如下:[program:hello_world] ;hello_word 是自己给进程取的名,随意command=gunicorn -c gunc.py hello:app ; supervisor启动命令directory=/www/Flask-Learning/hello_world; 项目的文件夹路径startsecs=0 ; 启动时间stopwaitsecs=0 ; 终止等待时间autostart=false ; 是否自动启动autorestart=false ; 是否自动重启stdout_logfile=/www/log/hello.log ; log 日志stderr_logfile=/www/log/hello.err ; 错误日志

# 加载配置文件并启动supervisorsupervisord -c supervisor.conf# 管理项目supervisorctl reload :修改完配置文件后重新启动supervisorsupervisorctl status :查看supervisor监管的进程状态supervisorctl start 进程名 :启动XXX进程 进程名就是你刚刚配置文件的进程名supervisorctl stop 进程名 :停止XXX进程supervisorctl stop all:停止全部进程,注:start、restart、stop都不会载入最新的配置文件。supervisorctl update:根据最新的配置文件,启动新配置

开机自动启动supervisor

# Ubuntu为例vim /etc/rc.local#添加以下内容supervisord -c path/supervisor.conf # path是supervisor.conf的路径supervisorctl start all #启动所有的程序

Nginx实现反向代理

至于为什么要用Nginx实现反向代理,各有自己的需求,这个在知乎上也有讨论,可以看看/question/38528616,我是因为一个服务器上有多个应用,而且期末的时候需要考虑到负载均衡。

反向代理和平常的反向代理一样的,

vim /etc/nginx/site-enable/default

# 添加serverserver {listen 80;server_name ;root /www/Flask-Learning/hello_world;location / {proxy_pass http://127.0.0.1:5001; #gunicorn运行的端口proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}

部署完毕

这大概就是完整的部署过程了,我的网站地址:/api/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。