使用Docker部署cookiecutter-django项目指南
cookiecutter-django 项目地址: https://gitcode.com/gh_mirrors/coo/cookiecutter-django
前言
在现代Web开发中,Docker已经成为部署Django应用的标准方式之一。本文将详细介绍如何使用Docker和Docker Compose来部署基于cookiecutter-django模板创建的项目。这个模板提供了一个生产就绪的Django项目结构,集成了许多最佳实践。
准备工作
在开始部署之前,请确保满足以下要求:
- Docker 17.05或更高版本
- Docker Compose 1.17或更高版本
Docker Compose架构解析
cookiecutter-django项目提供了一个精心设计的docker-compose.production.yml
文件,它定义了以下核心服务:
- Django应用服务:运行在Gunicorn后面
- PostgreSQL数据库:存储应用的关系型数据
- Redis服务:用于缓存
- Traefik反向代理:默认启用HTTPS
如果项目配置中启用了Celery(通过设置use_celery=y
),还会包含以下额外服务:
- Celery Worker:执行异步任务
- Celery Beat:处理定时任务
- Flower:Celery任务监控界面(通过Traefik在5555端口提供HTTPS访问)
环境配置
项目使用环境变量进行配置,主要涉及以下几个方面:
- 错误监控:建议配置Sentry DSN地址,以便捕获生产环境中的错误
- 邮件服务:必须配置邮件后端(如Mailgun),否则用户注册等功能会失败
- 云服务集成:如果在云平台上部署,可以使用IAM角色替代直接配置凭证
安全配置
项目默认启用了多项安全措施:
- HTTPS强制:Traefik会自动从Let's Encrypt获取并更新证书
- 主机验证:必须正确配置
DJANGO_ALLOWED_HOSTS
- Admin安全:Django admin默认要求HTTPS连接
Webpack与Whitenoise的注意事项
如果选择使用Webpack但不使用Whitenoise,需要注意静态文件URL的构建时机问题。Webpack在构建时需要知道静态URL,而Django是在运行时获取这些配置。有几种解决方案:
- 合并环境变量文件
- 创建根目录下的.env文件
- 在构建命令中直接传递变量
数据库持久化
PostgreSQL数据默认存储在名为production_postgres_data
的Docker卷中。建议:
- 定期备份此卷
- 考虑使用外部存储方案
部署流程
完整的部署步骤如下:
-
构建镜像:
docker compose -f docker-compose.production.yml build
-
启动服务:
docker compose -f docker-compose.production.yml up -d
-
执行数据库迁移:
docker compose -f docker-compose.production.yml run --rm django python manage.py migrate
-
创建管理员用户:
docker compose -f docker-compose.production.yml run --rm django python manage.py createsuperuser
生产环境管理
对于生产环境,建议:
- 使用进程管理器:如系统服务管理器,确保服务自动重启
- 日志监控:定期检查容器日志
- 扩展服务:可以水平扩展Django和Celery Worker实例
媒体文件处理
如果没有使用云存储服务,媒体文件将由Nginx服务提供,存储在production_django_media
卷中。务必注意:
- 定期备份此卷
- 考虑存储空间扩展需求
总结
通过cookiecutter-django模板和Docker的结合,开发者可以快速部署一个生产就绪的Django应用。本文涵盖了从环境配置到实际部署的全过程,帮助开发者避免常见陷阱,确保应用安全稳定地运行。
cookiecutter-django 项目地址: https://gitcode.com/gh_mirrors/coo/cookiecutter-django
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考