前言
在生产环境中,部署 Python Web 应用时,我们通常使用 Gunicorn
(Green Unicorn)作为 WSGI 服务器。为了确保应用能够稳定运行,能够在崩溃后自动重启,Supervisor
是一个常用的进程管理工具,它可以很好地与 Gunicorn
配合使用,实现进程监控、自动重启等功能。
本文将详细介绍如何使用 Supervisor
来管理 Gunicorn
,确保 Python Web 应用在生产环境中的高可用性。
目录
- 前言
- 1. 安装 Supervisor 和 Gunicorn
- 安装 Gunicorn
- 安装 Supervisor
- 2. 配置 Gunicorn 启动命令
- 3. 配置 Supervisor 管理 Gunicorn 进程
- 创建 Gunicorn 配置文件
- 4. 启动 Supervisor 管理 Gunicorn
- 5. 检查 Gunicorn 服务状态
- 6. 重启和停止 Gunicorn 服务
- 7. 配置 Supervisor 开机自启
- 使用 systemd(适用于 Ubuntu 16 及以上版本)
- 使用 init.d(适用于较老的 Linux 系统)
- 8. 使用 Gunicorn 的平滑重启功能
- 9. 日志管理
- 10. 总结
1. 安装 Supervisor 和 Gunicorn
在开始之前,我们需要安装 Supervisor
和 Gunicorn
。
安装 Gunicorn
pip install gunicorn
安装 Supervisor
在 Ubuntu/Debian 系统中,我们可以通过 apt
安装 Supervisor
:
sudo apt update
sudo apt install supervisor
在 CentOS/RHEL 系统中,可以通过 yum
安装:
sudo yum install supervisor
2. 配置 Gunicorn 启动命令
假设你的 Python Web 应用使用 Flask 或 Django 框架,Gunicorn
可以通过命令行启动。例如:
gunicorn --workers 3 myapp:app
在这个命令中:
--workers 3
:指定启动 3 个 worker 进程来处理请求,提高并发能力。myapp:app
:myapp
是你的 Python 文件名,app
是 Flask 或 Django 中的应用对象。
3. 配置 Supervisor 管理 Gunicorn 进程
为了让 Supervisor
管理 Gunicorn
进程,我们需要创建一个配置文件。Supervisor
的配置文件通常放在 /etc/supervisor/conf.d/
目录下。
创建 Gunicorn 配置文件
在 /etc/supervisor/conf.d/
目录下创建一个名为 myapp.conf
的文件:
[program:myapp]
command=gunicorn --workers 3 myapp:app
directory=/path/to/your/app
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
user=yourusername
group=yourgroup
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
command
:启动Gunicorn
的命令,指定了使用 3 个 worker 进程来处理请求。directory
:你的 Flask 或 Django 应用所在的目录。autostart=true
:Supervisor
启动时会自动启动Gunicorn
。autorestart=true
:如果Gunicorn
进程崩溃,Supervisor
会自动重启它。stderr_logfile
和stdout_logfile
:指定标准错误和标准输出的日志文件路径,便于后续查看日志。user
和group
:指定运行进程的用户和用户组,确保进程以正确的权限运行。environment
:设置应用运行时的环境变量。
4. 启动 Supervisor 管理 Gunicorn
配置文件创建完成后,需要更新 Supervisor
配置并启动进程。执行以下命令:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myapp
reread
:重新读取配置文件,加载新的配置。update
:更新进程列表,确保新配置生效。start myapp
:启动名为myapp
的 Gunicorn 服务。
5. 检查 Gunicorn 服务状态
使用以下命令查看 Supervisor
管理的所有进程的状态:
sudo supervisorctl status
输出示例:
myapp RUNNING pid 12345, uptime 1:23:45
这里,RUNNING
表示 Gunicorn
正在运行,pid
是进程 ID,uptime
是进程启动以来的运行时间。
6. 重启和停止 Gunicorn 服务
在应用更新或配置变更后,你可能需要重启 Gunicorn
服务。可以通过 Supervisor
执行重启操作:
sudo supervisorctl restart myapp
如果需要停止 Gunicorn
服务:
sudo supervisorctl stop myapp
7. 配置 Supervisor 开机自启
确保 Supervisor
服务在系统启动时自动启动。你可以使用以下命令在开机时启用 Supervisor
:
使用 systemd(适用于 Ubuntu 16 及以上版本)
sudo systemctl enable supervisor
sudo systemctl start supervisor
使用 init.d(适用于较老的 Linux 系统)
sudo update-rc.d supervisor defaults
这样,Supervisor
就会在系统启动时自动启动,进而启动 Gunicorn
进程。
8. 使用 Gunicorn 的平滑重启功能
Gunicorn
支持平滑重启(即无中断地重启 worker 进程),通常用于零停机的更新。如果你使用的是 Gunicorn
的 master-worker 模式,可以通过以下命令实现平滑重启:
gunicorn --workers 3 --bind 0.0.0.0:8000 --reload myapp:app
然而,Supervisor
本身并不直接支持平滑重启,因此,在生产环境中通常还是选择使用 restart
命令来重启服务。
9. 日志管理
Supervisor
配置中已经指定了标准输出和标准错误日志的路径(stderr_logfile
和 stdout_logfile
)。你可以通过以下命令查看日志:
tail -f /var/log/myapp.out.log
tail -f /var/log/myapp.err.log
这对于排查应用错误和调试非常有帮助。
10. 总结
通过结合使用 Supervisor
和 Gunicorn
,你可以轻松管理 Python Web 应用的进程,确保应用在崩溃时能够自动重启,提高服务的稳定性和可用性。Supervisor
不仅可以监控进程,还能提供日志管理和开机自启等功能,使得部署和运维变得更加高效。