Supervisor服务监督部署Python+Django应用
Supervisor 是一个流行的进程管理工具,非常适合在生产环境中管理和监督 Django 应用的运行。下面我将详细介绍如何使用 Supervisor 来部署和监督你的 Python+Django API 应用。
环境准备
首先确保你的服务器已经安装了以下工具:
- Python 环境(建议使用 Python 3.6+)
- pip 包管理器
- virtualenv(推荐使用,用于创建隔离的 Python 环境)
- Django 框架
- Supervisor 进程管理工具
安装 Supervisor
在不同的 Linux 发行版上安装 Supervisor 的命令略有不同:
bash
# 在Debian/Ubuntu系统上
sudo apt-get update
sudo apt-get install supervisor# 在CentOS/RHEL系统上
sudo yum install epel-release
sudo yum install supervisor# 在Fedora系统上
sudo dnf install supervisor
安装完成后,启动 Supervisor 服务并设置为开机自启:
bash
sudo systemctl start supervisord
sudo systemctl enable supervisord
准备 Django 项目
在部署之前,确保你的 Django 项目已经准备好:
- 创建并激活虚拟环境(推荐做法):
bash
# 创建虚拟环境
python -m venv myenv# 激活虚拟环境
source myenv/bin/activate # Linux/Mac
# myenv\Scripts\activate # Windows
- 安装项目依赖:
bash
pip install django gunicorn
-
确保 Django 项目配置正确,特别是数据库连接、静态文件路径等设置。
-
收集静态文件(如果使用了静态文件):
bash
python manage.py collectstatic
配置 Supervisor
Supervisor 的配置文件通常位于/etc/supervisor/supervisord.conf
,但我们通常会在/etc/supervisor/conf.d/
目录下创建项目特定的配置文件。
创建 Django 应用的 Supervisor 配置文件:
bash
sudo nano /etc/supervisor/conf.d/django_api.conf
在文件中添加以下内容,根据你的项目实际情况修改相应参数:
ini
[program:django_api]
# 项目名称,可自定义
process_name=%(program_name)s
# 命令,使用gunicorn启动Django应用
command=/path/to/your/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 your_project_name.wsgi:application
# 项目目录
directory=/path/to/your/django/project
# 启动用户
user=your_username
# 环境变量,可添加DJANGO_SETTINGS_MODULE等
environment=DJANGO_SETTINGS_MODULE="your_project_name.settings.production"
# 日志文件
stdout_logfile=/path/to/your/logs/django_api.stdout.log
stderr_logfile=/path/to/your/logs/django_api.stderr.log
# 自动重启
autostart=true
autorestart=true
# 启动重试次数
startretries=3
# 停止信号
stopsignal=INT
配置说明
上面的配置文件包含了几个关键部分:
- [program:django_api]:定义一个名为 django_api 的程序
- command:启动应用的命令,这里使用 gunicorn 作为 WSGI 服务器
--workers 3
:设置 3 个工作进程--bind 127.0.0.1:8000
:绑定到本地 8000 端口
- directory:Django 项目的根目录
- user:运行进程的用户
- environment:设置 Django 的环境变量,指定生产环境的设置文件
- stdout_logfile/stderr_logfile:标准输出和错误输出的日志文件路径
- autostart/autorestart:设置进程自动启动和自动重启
配置 Nginx 作为反向代理(可选但推荐)
虽然 Supervisor 可以直接管理 Django 应用,但在生产环境中通常会搭配 Nginx 作为反向代理:
bash
sudo nano /etc/nginx/sites-available/django_api
添加以下内容:
nginx
server {listen 80;server_name your_domain.com;location /static/ {alias /path/to/your/static/files/;}location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
启用站点并重启 Nginx:
bash
sudo ln -s /etc/nginx/sites-available/django_api /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
启动和管理应用
完成配置后,需要重新加载 Supervisor 配置并启动应用:
bash
# 重新加载Supervisor配置
sudo supervisorctl reload# 启动Django应用
sudo supervisorctl start django_api# 查看应用状态
sudo supervisorctl status django_api
常用 Supervisor 命令
以下是一些管理 Supervisor 和 Django 应用的常用命令:
bash
# 查看所有程序状态
sudo supervisorctl status# 启动指定程序
sudo supervisorctl start django_api# 停止指定程序
sudo supervisorctl stop django_api# 重启指定程序
sudo supervisorctl restart django_api# 重新加载所有配置
sudo supervisorctl reload# 查看程序日志
tail -f /path/to/your/logs/django_api.stdout.log
故障排除
如果遇到问题,可以通过以下步骤排查:
- 检查 Supervisor 日志:
/var/log/supervisor/supervisord.log
- 检查 Django 应用日志:你在配置中指定的日志文件
- 检查程序状态:
sudo supervisorctl status
- 手动尝试启动应用,查看错误信息:
/path/to/your/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 your_project_name.wsgi:application
总结
使用 Supervisor 部署 Django API 应用是生产环境中的最佳实践之一,它提供了以下优势:
- 自动监控和重启应用进程,保证服务高可用性
- 简化应用管理,无需手动启动和停止进程
- 提供日志记录功能,便于排查问题
- 支持多进程管理,提高应用性能