你好、Docker
首页
Docker命令大全
Dockerfile
DockerCompose
  • Docker部署Vue项目指南
  • Docker部署Nginx指南
  • Docker部署Django项目指南
  • Docker部署fastapi项目指南
笔记
首页
Docker命令大全
Dockerfile
DockerCompose
  • Docker部署Vue项目指南
  • Docker部署Nginx指南
  • Docker部署Django项目指南
  • Docker部署fastapi项目指南
笔记
  • Docker部署Django项目指南

Docker 部署 Django 项目指南

项目概述

本指南将介绍如何使用 Docker 和 Docker Compose 部署一个基于 Django + PostgreSQL + Redis 的后端服务。通过容器化部署,我们可以实现环境一致性、快速部署和便捷的服务编排。

项目结构

├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── .env
├── .dockerignore
└── your_project/
    ├── manage.py
    ├── your_project/
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    └── apps/

配置文件

1. Dockerfile

# 使用官方 Python 镜像作为基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    postgresql-client \
    && rm -rf /var/lib/apt/lists/*

# 安装项目依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目文件
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "your_project.wsgi:application"]

2. docker-compose.yml

version: '3.8'

services:
  web:
    build: .
    command: gunicorn --bind 0.0.0.0:8000 your_project.wsgi:application
    volumes:
      - .:/app
      - static_volume:/app/static
      - media_volume:/app/media
    expose:
      - 8000
    environment:
      - DJANGO_SETTINGS_MODULE=your_project.settings
      - DATABASE_URL=postgres://postgres:postgres@db:5432/postgres
      - REDIS_URL=redis://redis:6379/0
    depends_on:
      - db
      - redis
    networks:
      - backend_network
    restart: unless-stopped

  db:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    networks:
      - backend_network
    restart: unless-stopped

  redis:
    image: redis:6-alpine
    volumes:
      - redis_data:/data
    networks:
      - backend_network
    restart: unless-stopped

  nginx:
    image: nginx:1.21-alpine
    volumes:
      - static_volume:/app/static
      - media_volume:/app/media
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"
    depends_on:
      - web
    networks:
      - backend_network
    restart: unless-stopped

volumes:
  postgres_data:
  redis_data:
  static_volume:
  media_volume:

networks:
  backend_network:
    driver: bridge

3. requirements.txt

Django>=3.2,<4.0
gunicorn>=20.1.0
psycopg2-binary>=2.9.1
redis>=4.0.0
dj-database-url>=0.5.0
django-redis>=5.0.0

4. .env

DJANGO_SETTINGS_MODULE=your_project.settings
DATABASE_URL=postgres://postgres:postgres@db:5432/postgres
REDIS_URL=redis://redis:6379/0
DJANGO_SECRET_KEY=your-secret-key-here
DJANGO_DEBUG=0

5. nginx.conf

upstream django {
    server web:8000;
}

server {
    listen 80;
    server_name localhost;

    location /static/ {
        alias /app/static/;
    }

    location /media/ {
        alias /app/media/;
    }

    location / {
        proxy_pass http://django;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

部署步骤

  1. 准备项目文件

    确保项目目录中包含所有必要的配置文件:

    • Dockerfile
    • docker-compose.yml
    • requirements.txt
    • .env
    • nginx.conf
  2. 构建和启动服务

    # 构建镜像并启动服务
    docker-compose up -d --build
    
    # 查看服务状态
    docker-compose ps
    
  3. 数据库迁移

    # 执行数据库迁移
    docker-compose exec web python manage.py migrate
    
    # 创建超级用户
    docker-compose exec web python manage.py createsuperuser
    
  4. 收集静态文件

    docker-compose exec web python manage.py collectstatic --noinput
    

常用操作命令

# 启动所有服务
docker-compose up -d

# 停止所有服务
docker-compose down

# 查看服务日志
docker-compose logs -f

# 重启特定服务
docker-compose restart web

# 进入容器执行命令
docker-compose exec web bash

注意事项

  1. 安全性考虑

    • 生产环境中修改默认的数据库密码
    • 使用环境变量管理敏感信息
    • 确保 .env 文件不被提交到版本控制系统
  2. 性能优化

    • 根据服务器配置调整 Gunicorn 的工作进程数
    • 配置 Redis 缓存策略
    • 优化 PostgreSQL 配置参数
  3. 数据备份

    • 定期备份 PostgreSQL 数据
    • 配置数据卷备份策略
  4. 扩展性

    • 服务可以根据需求横向扩展
    • 使用 Docker Swarm 或 Kubernetes 进行容器编排

故障排查

  1. 检查容器状态

    docker-compose ps
    
  2. 查看容器日志

    docker-compose logs -f [service_name]
    
  3. 检查网络连接

    docker network inspect backend_network
    

总结

通过 Docker 和 Docker Compose 部署 Django 项目,我们实现了:

  • 环境隔离和一致性
  • 服务编排和管理
  • 简化的部署和扩展流程
  • 便捷的开发和调试体验

合理配置各个服务,注意安全性和性能优化,可以构建一个稳定可靠的生产环境。根据实际需求调整配置参数,确保系统的最佳性能。

最近更新:: 2025/3/25 13:32
Contributors: YAOBIN