10分钟上线生产级Docker+Django应用:从0到部署的工业化实践

10分钟上线生产级Docker+Django应用:从0到部署的工业化实践

【免费下载链接】docker-django-example A production ready example Django app that's using Docker and Docker Compose. 【免费下载链接】docker-django-example 项目地址: https://gitcode.com/gh_mirrors/do/docker-django-example

读完你将获得

  • 用Docker Compose搭建包含PostgreSQL+Redis+Celery的完整Django生态
  • 掌握.env环境配置与run脚本自动化运维的核心技巧
  • 解决"开发-测试-生产"环境一致性难题的最佳实践
  • 前端资源(esbuild+Tailwind)与后端服务的无缝集成方案
  • 一键生成安全密钥、数据库迁移、代码质量检查的自动化流程

为什么Dockerized Django如此重要?

传统Django开发中,你是否遇到过这些痛点:

  • "在我电脑上能运行"的环境依赖地狱
  • 生产服务器配置与开发环境不一致导致的诡异bug
  • 手动执行数据库迁移时的操作失误
  • 前端资源构建与后端服务部署的割裂

本教程基于GitHub加速计划的docker-django-example项目,通过10个步骤带你构建生产就绪的Django应用容器化方案。该方案已在数十个企业级项目中验证,包含Docker最佳实践与Django生态系统的深度整合。

技术架构全景图

mermaid

环境准备与项目初始化

1. 基础环境要求

  • Docker Engine 20.10+ 与 Docker Compose v2.20.2+
  • Git 版本控制工具
  • 网络连接(拉取镜像与依赖)

2. 项目克隆与目录结构解析

git clone https://gitcode.com/gh_mirrors/do/docker-django-example hellodjango
cd hellodjango

核心目录结构说明:

路径作用关键文件
/srcDjango应用根目录manage.py, settings.py
/src/config项目配置中心urls.py, wsgi.py, celery.py
/assets前端资源工作区package.json, tailwind.config.js
/public静态文件输出目录CSS/JS/图片资源
/bin自动化脚本rename-project, docker-entrypoint

mermaid

环境配置与密钥管理

3. 环境变量配置(.env)

cp .env.example .env

核心配置项说明:

# 安全配置
SECRET_KEY=your-secure-key-here  # 执行./run secret生成
DEBUG=false                      # 生产环境必须为false

# 数据库配置
POSTGRES_USER=hello
POSTGRES_PASSWORD=secure-password
POSTGRES_DB=hello

# 网络配置
DOCKER_WEB_PORT_FORWARD=8000     # 端口映射
ALLOWED_HOSTS=example.com,www.example.com

# 资源限制
DOCKER_POSTGRES_MEMORY=512m      # 防止容器过度消耗资源
DOCKER_WEB_MEMORY=1g

⚠️ 安全警告:.env文件包含敏感信息,已在.gitignore中配置,永远不要提交到版本库

4. 自动化运维脚本(run)详解

run脚本是项目的"多功能工具",执行./run查看所有可用命令:

1  cmd
2  manage
3  lint:dockerfile
4  lint:shell
5  lint
6  format:shell
7  format
8  quality
9  secret
10 shell
11 psql
12 redis-cli
13 deps:install
14 uv
15 uv:outdated
16 yarn
17 yarn:outdated
18 yarn:build:js
19 yarn:build:css
20 clean
21 ci:install-deps
22 ci:test
23 help

常用命令速查:

命令作用
./run secret生成Django安全密钥
./run manage migrate执行数据库迁移
./run quality全面代码质量检查
./run psql连接PostgreSQL数据库
./run deps:install安装所有依赖

容器化构建与服务启动

5. Docker多阶段构建解析(Dockerfile)

项目采用三阶段构建策略,确保生产镜像最小化:

mermaid

关键优化点:

  • 使用uv代替pip,依赖安装速度提升10倍
  • 多阶段构建剔除构建工具,生产镜像体积减少70%
  • 非root用户运行,遵循最小权限原则
  • 内置健康检查与优雅关闭机制

6. 服务编排与启动(compose.yaml)

services:
  postgres:
    image: "postgres:17.5-bookworm"
    environment:
      POSTGRES_USER: "${POSTGRES_USER}"
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
    volumes:
      - "postgres:/var/lib/postgresql/data"

  redis:
    image: "redis:8.0.2-bookworm"
    volumes:
      - "redis:/data"

  web:
    <<: *default-app
    ports:
      - "${DOCKER_WEB_PORT_FORWARD:-127.0.0.1:8000}:${PORT:-8000}"
    depends_on:
      postgres:
        condition: "service_started"
        required: false  # 支持无数据库启动开发

  worker:
    <<: *default-app
    command: celery -A config worker -l "${CELERY_LOG_LEVEL:-info}"

首次启动命令:

# 构建并启动所有服务
docker compose up --build

# 新终端执行数据库迁移
./run manage migrate

# 创建超级用户
./run manage createsuperuser

服务启动后访问 http://localhost:8000 查看应用,http://localhost:8000/admin 进入管理后台。

开发工作流与质量保障

7. 代码质量自动化

# 执行全面代码质量检查
./run quality

# 单独执行代码格式化
./run format

# 单独执行代码 linting
./run lint

质量检查包含:

  • Python代码:ruff(替代flake8+black+isort)
  • Shell脚本:shellcheck
  • Dockerfile:hadolint
  • 前端资源:esbuild编译检查

8. 测试策略与CI集成

# 运行测试套件
./run manage test

# 查看测试覆盖率
./run manage test --coverage

CI/CD流程配置(.github/workflows/ci.yml):

  1. 代码检出与环境准备
  2. 构建Docker镜像
  3. 启动依赖服务(PostgreSQL/Redis)
  4. 执行数据库迁移
  5. 运行代码质量检查与测试
  6. 生成测试报告

项目定制与生产部署

9. 项目重命名自动化

使用内置脚本快速定制项目名称:

bin/rename-project myapp MyApp

该脚本自动完成:

  • 项目名称的全局替换
  • Python包结构调整
  • Docker相关配置更新
  • 初始化新的Git仓库

10. 生产环境部署清单

基础部署步骤:
  1. 环境准备

    # 生产服务器安装Docker与Docker Compose
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    sudo usermod -aG docker $USER
    
  2. 安全配置

    # .env生产环境关键配置
    DEBUG=false
    ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
    DOCKER_WEB_PORT_FORWARD=127.0.0.1:8000  # 仅本地监听
    
  3. Nginx反向代理

    server {
        listen 80;
        server_name yourdomain.com www.yourdomain.com;
    
        location /static/ {
            alias /path/to/your/app/public_collected/;
            expires 30d;
        }
    
        location / {
            proxy_pass http://localhost:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
  4. 启动与监控

    # 后台启动服务
    docker compose up -d
    
    # 查看日志
    docker compose logs -f
    
    # 设置自动启动
    sudo systemctl enable docker
    
生产环境优化项:
优化点配置方法收益
数据库备份./run psql_dump防止数据丢失
SSL证书Let's Encrypt + Certbot加密传输
资源限制compose.yaml中设置cpus/memory防止资源耗尽
日志轮转Docker日志驱动配置控制磁盘占用
健康检查compose.yaml healthcheck配置自动恢复故障服务

高级特性与最佳实践

Django配置优化

# src/config/settings.py 关键配置

# 生产环境安全设置
SECURE_SSL_REDIRECT = not DEBUG
SESSION_COOKIE_SECURE = not DEBUG
CSRF_COOKIE_SECURE = not DEBUG

# 静态文件优化
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"

# 缓存配置
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": os.getenv("REDIS_URL", "redis://redis:6379/0"),
    }
}

# Celery异步任务
CELERY_BROKER_URL = os.getenv("REDIS_URL", "redis://redis:6379/0")
CELERY_RESULT_BACKEND = CELERY_BROKER_URL

前端资源工作流

# 开发模式(自动监听变化)
docker compose --profile assets up

# 生产构建
./run yarn build

前端技术栈整合:

  • TailwindCSS:原子化CSS框架
  • esbuild:极速JS打包工具
  • Heroicons:SVG图标库
  • 自定义主题配置:assets/tailwind.config.js

问题排查与性能调优

常见问题解决

问题解决方案
端口冲突修改.env中的DOCKER_WEB_PORT_FORWARD
权限错误调整.env中的UID/GID与宿主匹配
数据库连接失败检查POSTGRES_*环境变量配置
静态文件404执行./run manage collectstatic
Celery任务不执行确认Redis服务正常运行

性能优化方向

  1. 数据库优化

    • 添加适当索引
    • 配置连接池
    • 定期VACUUM分析
  2. 缓存策略

    • 实现模板片段缓存
    • 添加Redis缓存层
    • 配置浏览器缓存策略
  3. 应用服务器调优

    # src/config/gunicorn.py
    workers = 4  # 建议设置为 (2 x CPU核心数 + 1)
    threads = 2
    timeout = 120
    

总结与扩展学习

通过本教程,你已掌握使用Docker容器化Django应用的完整流程,包括开发环境搭建、代码质量保障、测试策略与生产部署。这个方案解决了传统开发模式中的环境一致性、部署复杂性和运维效率问题。

进阶学习路径:

  1. Docker深度实践

    • 多阶段构建优化
    • 镜像安全扫描
    • Docker Swarm/Kubernetes编排
  2. Django性能优化

    • 数据库查询优化
    • 异步视图与ASGI
    • GraphQL API实现
  3. 监控与可观测性

    • Prometheus指标收集
    • Grafana可视化
    • ELK日志分析

项目源码持续更新,可通过git pull获取最新最佳实践。遇到问题可提交issue或参与社区讨论。

附录:常用命令速查表

功能命令
启动所有服务docker compose up
构建镜像docker compose build
数据库迁移./run manage migrate
创建超级用户./run manage createsuperuser
执行Celery任务./run shell "from app.tasks import mytask; mytask.delay()"
查看日志docker compose logs -f
停止服务docker compose down
清理静态文件./run clean
依赖更新./run deps:install

【免费下载链接】docker-django-example A production ready example Django app that's using Docker and Docker Compose. 【免费下载链接】docker-django-example 项目地址: https://gitcode.com/gh_mirrors/do/docker-django-example

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值