整合Django Channel的Django-React项目如何实现云服务器永久稳定运行
当前部署方案的先天缺陷
- Django 自带的
python manage.py runserver是仅用于本地开发调试的服务器,没有生产级的并发处理能力、异常容错和自动恢复机制,遇到运行时错误、高并发请求很容易直接崩溃 - screen 仅实现会话后台脱离,没有进程监控、崩溃自动拉起能力,进程遇到OOM(内存不足被系统杀掉)、运行时异常退出后不会自动重启,最终表现就是运行一段时间后服务停止
生产级稳定部署方案
因为你的项目使用了 Django Channels 做 WebSocket 推送,必须使用 ASGI 服务器替代自带的开发服务器,再搭配进程托管工具实现常驻运行。
步骤1:替换为生产级ASGI服务器
优先选择 Channels 官方配套的 Daphne 服务器,也可以使用 Uvicorn:
- 安装 Daphne:
pip install daphne - 测试启动是否正常,确认接口、WebSocket 推送功能正常:
daphne -b 0.0.0.0 -p 8000 你的项目名.asgi:application
步骤2:使用 systemd 托管进程(推荐,Linux 原生支持)
systemd 是绝大多数 Linux 发行版自带的进程管理工具,可实现开机自启、崩溃自动重启、日志统一管理,稳定性最高:
- 新建服务配置文件:
sudo nano /etc/systemd/system/你的项目名.service - 写入以下配置,替换括号内的你自己的实际路径/信息:
[Unit] Description=Django Channels ASGI Service After=network.target [Service] User=你的服务器普通用户名 Group=www-data WorkingDirectory=你的Django项目根目录绝对路径 ExecStart=你的Python虚拟环境绝对路径/bin/daphne -b 127.0.0.1 -p 8000 你的项目名.asgi:application Restart=always RestartSec=5 Environment="PATH=你的Python虚拟环境绝对路径/bin" Environment="DJANGO_SETTINGS_MODULE=你的项目名.settings" [Install] WantedBy=multi-user.target
- 执行命令生效配置:
# 重载systemd配置 sudo systemctl daemon-reload # 启动服务 sudo systemctl start 你的项目名 # 设置开机自启 sudo systemctl enable 你的项目名
- 常用运维命令:
- 查看运行状态:
sudo systemctl status 你的项目名 - 查看实时运行日志:
sudo journalctl -u 你的项目名 -f - 重启服务:
sudo systemctl restart 你的项目名
- 查看运行状态:
备选方案:使用 Supervisor 托管进程
如果不习惯使用 systemd,可以选择 Supervisor 作为进程管理工具:
- 安装 Supervisor:
sudo apt install supervisor(Debian/Ubuntu 系)或sudo yum install supervisor(CentOS 系) - 新建配置文件:
sudo nano /etc/supervisor/conf.d/你的项目名.conf - 写入配置:
[program:你的项目名] directory=你的Django项目根目录绝对路径 command=你的Python虚拟环境绝对路径/bin/daphne -b 127.0.0.1 -p 8000 你的项目名.asgi:application user=你的服务器普通用户名 autostart=true autorestart=true startretries=3 stdout_logfile=/var/log/你的项目名.log stderr_logfile=/var/log/你的项目名.err.log
- 生效配置启动服务:
sudo supervisorctl update sudo supervisorctl start 你的项目名
额外优化建议
- 生产环境先执行
python manage.py collectstatic收集所有静态资源,可在 ASGI 服务前加 Nginx 做反向代理,由 Nginx 处理静态资源请求、HTTPS 证书配置、流量限流,进一步降低后端服务负载 - 如果服务频繁崩溃,可通过运行日志排查是否存在代码异常、内存泄漏问题,也可执行
dmesg | grep oom确认是否是服务器内存不足被系统主动杀掉进程,这种情况需要优化代码内存占用或者升级服务器配置 - 绝对不要在生产环境使用
runserver,无论用什么托管工具,都要替换为生产级 ASGI 服务器
内容的提问来源于stack exchange,提问作者uyarc
相关产品推荐
相关产品推荐

