Daphne + Supervisor 多进程部署配置
Daphne + Supervisor 多进程部署配置文档
系统环境
- 服务器配置: 4核CPU / 8G内存 / 100G存储
- Python环境: /project/environment/bin/
- 项目目录: /project/yto_publish
- 日志目录: /project/logs/
1. Supervisor配置文件
创建配置文件 /etc/supervisor/conf.d/daphne.conf:
[program:daphne]
directory=/project/yto_publish
command=/project/environment/bin/daphne -b 0.0.0.0 -p 800%(process_num)s --proxy-headers --access-log - --application-close-timeout 10 --ping-interval 20 --ping-timeout 30 yto_publish.asgi:application
autostart=true
autorestart=true
numprocs=6
process_name=daphne_%(process_num)s
stdout_logfile=/project/logs/daphne_%(process_num)s.log
redirect_stderr=true
配置说明
- numprocs=6: 启动6个进程,充分利用4核CPU
- 端口范围: 8000-8005 (800%(process_num)s,process_num从0开始)
- 进程名: daphne_0, daphne_1, daphne_2, daphne_3, daphne_4, daphne_5
- 日志文件: 每个进程独立日志文件
2. 部署步骤
2.1 创建日志目录
mkdir -p /project/logs
chown -R www-data:www-data /project/logs
2.2 重新加载Supervisor配置
# 停止现有进程
sudo supervisorctl stop daphne:*
# 重新读取配置
sudo supervisorctl reread
# 更新配置
sudo supervisorctl update
# 启动所有进程
sudo supervisorctl start daphne:*
2.3 验证部署
# 查看进程状态
sudo supervisorctl status
# 预期输出:
# daphne:daphne_0 RUNNING
# daphne:daphne_1 RUNNING
# daphne:daphne_2 RUNNING
# daphne:daphne_3 RUNNING
# daphne:daphne_4 RUNNING
# daphne:daphne_5 RUNNING
# 检查端口监听
netstat -tlnp | grep daphne
# 应显示 8000, 8001, 8002, 8003, 8004, 8005 端口
3. Nginx负载均衡配置
upstream daphne_backend {
server 127.0.0.1:8000 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8001 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8002 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8003 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8004 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8005 weight=1 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
listen 80;
server_name your-domain.com;
client_max_body_size 100M;
client_body_timeout 60s;
client_header_timeout 60s;
location / {
proxy_pass http://daphne_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $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_connect_timeout 30s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_buffering off;
}
}
4. 系统优化配置
4.1 系统限制优化 /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 32768
* hard nproc 32768
4.2 内核参数优化 /etc/sysctl.conf
# 网络优化
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_syn_backlog = 32768
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_tw_buckets = 400000
# 内存优化(8G内存)
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
应用配置:
sudo sysctl -p
5. 常用管理命令
5.1 进程管理
# 查看所有进程状态
sudo supervisorctl status
# 启动所有daphne进程
sudo supervisorctl start daphne:*
# 停止所有daphne进程
sudo supervisorctl stop daphne:*
# 重启所有daphne进程
sudo supervisorctl restart daphne:*
# 重启单个进程
sudo supervisorctl restart daphne:daphne_0
5.2 日志查看
# 查看实时日志
sudo supervisorctl tail -f daphne:daphne_0
# 查看所有日志文件
ls -la /project/logs/daphne_*.log
# 查看特定进程日志
tail -f /project/logs/daphne_0.log
5.3 故障排查
# 检查端口占用
netstat -tlnp | grep 800
# 检查进程运行情况
ps aux | grep daphne
# 检查防火墙
sudo ufw status
# 测试连接
curl http://localhost:8000/
curl http://localhost:8001/
6. 性能监控
6.1 资源使用监控
# 查看CPU和内存使用
htop
# 查看网络连接
ss -tuln | grep 800
6.2 预期性能指标
- 并发连接数: 每个进程约1000个连接
- 内存使用: 每个进程约800MB-1.2GB
- 总内存使用: 不超过7GB
- CPU利用率: 充分利用4核CPU
7. 注意事项
- 端口冲突: 确保8000-8005端口未被其他服务占用
- 日志轮转: 定期清理日志文件,防止磁盘空间不足
- 进程监控: 定期检查进程状态,确保所有进程正常运行
- 负载均衡: 使用Nginx进行负载均衡,提高可用性
- 安全配置: 生产环境建议使用内网IP绑定,通过Nginx对外提供服务
8. 故障处理流程
8.1 进程异常退出
# 查看进程状态
sudo supervisorctl status
# 查看错误日志
sudo supervisorctl tail daphne:daphne_0
# 重启异常进程
sudo supervisorctl restart daphne:daphne_0
8.2 端口占用问题
# 查找占用进程
lsof -i :8000
# 强制杀死进程
kill -9 <PID>
# 重启服务
sudo supervisorctl restart daphne:*
8.3 内存不足
# 查看内存使用
free -h
# 查看进程内存占用
ps aux --sort=-%mem | head -10
# 重启服务释放内存
sudo supervisorctl restart daphne:*
9. 备份与恢复
9.1 配置文件备份
# 备份supervisor配置
cp /etc/supervisor/conf.d/daphne.conf /backup/daphne.conf.bak
# 备份nginx配置
cp /etc/nginx/sites-available/default /backup/nginx.conf.bak
9.2 日志备份
# 压缩并备份日志
tar -czf /backup/daphne_logs_$(date +%Y%m%d).tar.gz /project/logs/daphne_*.log
10. 升级维护
10.1 代码更新流程
# 1. 备份当前代码
cp -r /project/yto_publish /backup/yto_publish_$(date +%Y%m%d)
# 2. 更新代码
git pull origin main
# 3. 重启服务
sudo supervisorctl restart daphne:*
# 4. 验证服务
curl http://localhost:8000/health
10.2 依赖更新
# 更新Python依赖
/project/environment/bin/pip install -r requirements.txt
# 重启服务
sudo supervisorctl restart daphne:*
补充
2.3 完整操作流程
# 1. 修改配置文件后,重新加载配置
supervisorctl reread
supervisorctl update
# 2. 重启相关进程使新环境变量生效
supervisorctl restart daphne:*
# 3. 查看进程状态
supervisorctl status
2.4 重启supervisord本身
# 方法1:优雅关闭
supervisorctl shutdown
supervisord -c /etc/supervisord.conf
# 方法2:强制重启
pkill supervisord
supervisord -c /etc/supervisord.conf
# 方法3:系统服务方式
systemctl restart supervisord

浙公网安备 33010602011771号