一台 2 GB 小机器上的 Django 零停机部署
来源:dev.to — 2026-10-27
📋 概述
作者运营一个职位板 GiggleGigs:后端 Django 加 DRF,前端 React 加 Vite 放在 Vercel,Celery 做后台任务,全部跑在一台 2 GB 的 DigitalOcean droplet 的 Docker Compose 里,前面是 Traefik,再前面是 Cloudflare。上一篇里他把镜像构建挪到 GitHub Actions,解决了部署时机器卡死,却没解决站点被部署打挂。他用每 5 秒打一次健康接口的循环量出来:一次普通部署大约两分钟都是 Traefik 的 no available server,而 99.99% 可用性一个月只有 4.3 分钟额度,一天发几次版就全吃光了。根因是 compose up -d 先停掉唯一的 Django 容器,而新容器启动脚本要先跑 collectstatic 才开始监听。
🔑 核心要点
- 一次部署约两分钟不可用,一天的发布量就能吃光一个月的可用性额度
- 根因是只停一个容器再起一个,而新容器要先 collectstatic 才开始监听
- 把 collectstatic 挪到镜像构建阶段,占位环境变量只在构建时存在
- 加 Docker healthcheck 还不够,代理必须真的读它,Traefik 的 Docker provider 会读
- 先摘流再发 SIGTERM;改路由的那次部署注定会难看一次
💡 金句
“So "faster deploys" wasn't the goal. The goal was deploys with no downtime at all, which left the 4.3 minutes for things I can't control.”
译:所以「更快的部署」不是目标,目标是完全不造成停机的部署,把那 4.3 分钟留给我控制不了的事。
← 返回 dev.to 首页