部署 Django、Flask 项目(一)
说明
1、使用 Git 做代码版本管理
2、使用 Gunicorn 做 Django 的多线程服务器
3、使用 Supervisor 做进程管理工具
备注:也可以不使用 Supervisor 做进程管理,请参考 第二种方案 。
一、Gunicorn
是一个 Python WSGI UNIX 的HTTP服务器,它的作用是用来代替 Django 自带 Server,自带的 Server 只能单线程运行。Gunicorn 能并发多线程,轻量级的资源消耗,以及高性能等特点。
pip install gunicorn
命令说明
gunicorn 模块名:变量名 [OPTIONS]
1、运行项目
Django:gunicorn 项目名.wsgi:application
Flask:gunicorn wsgi:application
说明--模块名:变量名
模块名就是引导用的 python 文件名称(不包括后缀/模块名),变量名就是 Flask 或 Django 实例的名称。
2、绑定socket
-b ip:port
3、以守护进程运行
-D
4、工作进程数
-w 数量
gunicorn是一个pre-fork worker模式,就是指gunicorn启动的时候,在主进程中会预先fork出指定数量的worker进程在处理请求时,gunicorn依靠操作系统来提供负载均衡,通常推荐的worker数量是:(2 x $num_cores) + 1
二、Supervisor
supervisor 是一个制作守护进程的工具,用户可以在 UNIX 系统中监控、管理进程。常用于管理与某个用户或项目相关的进程,帮助维护各种服务器的进程,即使有软件崩了也能帮我们自动重启。
pip install supervisor
1、配置文件
类似于 Nginx 虚拟服务器一样,Supervisor 管理的每一个进程都以 /etc/supervisor/conf.d/ 目录下的一个配置文件形式存在,扩展名为 conf。配置文件如下:
2、虚拟环境的使用
特别感谢 @李阳良 老师
command 使用绝对路径。例如,使用 gunicorn,使用 /path/to/pipenv/gunicorn。
3、命令使用
(1)启动进程
supervisorctl start [xxxx|all]
(2)关闭进程
supervisorctl stop [xxxx|all]
(3)加载新的配置文件,重启所有进程
supervisorctl reload
(4)只加载新的配置文件,不重启
supervisorctl reread
(5)根据 reread 的最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl update
注:一般(4)和(5)配合使用
(6)查看运行状态
supervisorctl status