Skip to content
返回部署

部署 Django 应用

生产 Django,用 Gunicorn、Nginx、WhiteNoise 静态文件和 Postgres,部署到 VPS 或容器。

平台高级

为什么

Django 全功能(ORM、admin、auth)加速开发,Gunicorn+Nginx 是经验证的生产栈。WhiteNoise 无需单独 CDN 提供静态文件。

平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。

何时使用

内容密集、需 admin、ORM 驱动 CRUD 和 Python 团队用 Django。微服务避免 — Flask/FastAPI 更轻。

如何做

1. WSGI 服务器 — gunicorn myproject.wsgi:application -w 4 -b 0.0.0.0:8000 2. Nginx — 反向代理 gunicorn,提供 static/media,TLS 3. 静态文件 — python manage.py collectstatic,WhiteNoise 中间件 4. DB — Postgres,设 DATABASE_URL,部署时迁移 5. Docker — python:3.12-slim,gunicorn,多阶段 6. 环境 — DJANGO_SETTINGS_MODULE,DEBUG=False,ALLOWED_HOSTS 7. ASGI — websocket/async 用 daphne 或 uvicorn 配 channels

示例

# Dockerfile FROM python:3.12-slim AS base WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . RUN python manage.py collectstatic --noinput EXPOSE 8000 CMD ["gunicorn", "myproject.wsgi:application", "-w", "4", "-b", "0.0.0.0:8000"] # nginx.conf upstream django { server app:8000; } server { listen 80; location /static/ { alias /app/staticfiles/; } location / { proxy_pass http://django; proxy_set_header Host $host; } } # settings.py — 生产 MIDDLEWARE = ["whitenoise.middleware.WhiteNoiseMiddleware", ...] STATICFILES_STORAGE = "whitenoise.storage.CompressedStaticFilesStorage" DEBUG = False ALLOWED_HOSTS = ["myapp.com"]

常见问题

  • ⚠生产静态文件 404 — 忘记 collectstatic 或 WhiteNoise 中间件配置
  • ⚠生产 DEBUG=True — 安全风险,泄露堆栈和设置
  • ⚠ALLOWED_HOSTS 不匹配 — 400 Bad Request,设为你的域名或测试用 ['*']

最佳实践

  • ✓静态文件用 WhiteNoise — 简单部署中消除 Nginx 静态服务或 CDN 需求
  • ✓迁移作为独立部署步骤,不在 CMD 中 — 允许无 DB 变更回滚
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答