You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DigitalOcean Droplet上实现Django应用零停机部署?

在DigitalOcean Droplet上实现Django应用的零停机部署

要在Droplet上部署Django新版本的同时保证旧版本正常运行,核心思路是并行部署新版本、通过反向代理平滑切换流量,具体步骤如下:

1. 搭建并行运行环境

  • 为新版本分配独立的目录与端口:比如旧版本部署在/var/www/django_app/current(端口8000),新版本部署到/var/www/django_app/next(端口8001)
  • 创建独立的虚拟环境:避免新旧版本依赖冲突,执行python -m venv /var/www/django_app/next/venv

2. 拉取并初始化新版本代码

  • 拉取Git最新代码:git clone <你的仓库地址> /var/www/django_app/next(如果是已有目录,进入后执行git pull origin main)
  • 激活虚拟环境:source /var/www/django_app/next/venv/bin/activate
  • 安装依赖:pip install -r requirements.txt
  • 执行必要的初始化操作:
    • 数据库迁移:python manage.py migrate
    • 收集静态文件:python manage.py collectstatic --noinput
  • 启动新版本服务(以Gunicorn为例):
    gunicorn --workers 3 --bind 127.0.0.1:8001 myproject.wsgi:application
    推荐用systemd管理进程,创建配置文件/etc/systemd/system/django-next.service,确保新版本服务稳定运行

3. 平滑切换流量到新版本

  • 编辑Nginx配置(比如/etc/nginx/sites-available/django-app.conf),将反向代理目标从旧端口改为新端口:
    把proxy_pass http://127.0.0.1:8000;替换为proxy_pass http://127.0.0.1:8001;
  • 验证Nginx配置合法性:nginx -t
  • 平滑重启Nginx,避免服务中断:systemctl reload nginx

4. 收尾与回滚准备

  • 访问应用确认新版本正常运行后,停止旧版本服务:systemctl stop django-current
  • 保留旧版本目录与配置一段时间,若新版本出现问题,可快速切换回旧端口恢复服务

如果觉得手动配置麻烦,也可以用Docker容器化部署:启动新版本容器后,修改Nginx指向新容器端口,再停止旧容器,流程类似。

另外你提到的DigitalOcean App Platform确实会自动完成这类零停机部署,但Droplet需要手动配置上述流程来实现相同效果。

内容的提问来源于stack exchange,提问作者jackie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:40:19