Docker Compose для Django + Gunicorn + Celery + Celery Beat + Redis + PostgreSQL

Обновлено: Август 2026 Стек: Python 3.12, Django 5.x, Celery 5.x, Redis 7, PostgreSQL 16 Проверено: Production-Ready

Готовый production docker-compose.yml для Django 5: веб-сервер Gunicorn, асинхронные воркеры Celery, планировщик Celery Beat, Redis, Postgres и Nginx.

Интерактивный генератор под ваши параметры
Параметры подставляются в код в реальном времени
docker-compose.yml
# docker-compose.yml
version: '3.8'

services:
  web:
    build: .
    container_name: django_web
    restart: always
    command: gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 3
    volumes:
      - ./:/app
      - static_volume:/app/staticfiles
      - media_volume:/app/media
    environment:
      - DATABASE_URL=postgres://{{db_user}}:{{db_password}}@db:5432/{{db_name}}
      - CELERY_BROKER_URL=redis://redis:6379/0
    depends_on:
      - db
      - redis
    networks:
      - django_net

  celery_worker:
    build: .
    container_name: django_celery_worker
    restart: always
    command: celery -A config worker -l info
    volumes:
      - ./:/app
    environment:
      - DATABASE_URL=postgres://{{db_user}}:{{db_password}}@db:5432/{{db_name}}
      - CELERY_BROKER_URL=redis://redis:6379/0
    depends_on:
      - redis
      - db
    networks:
      - django_net

  celery_beat:
    build: .
    container_name: django_celery_beat
    restart: always
    command: celery -A config beat -l info
    volumes:
      - ./:/app
    environment:
      - DATABASE_URL=postgres://{{db_user}}:{{db_password}}@db:5432/{{db_name}}
      - CELERY_BROKER_URL=redis://redis:6379/0
    depends_on:
      - redis
    networks:
      - django_net

  db:
    image: postgres:16-alpine
    container_name: django_postgres
    restart: always
    environment:
      POSTGRES_DB: {{db_name}}
      POSTGRES_USER: {{db_user}}
      POSTGRES_PASSWORD: {{db_password}}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - django_net

  redis:
    image: redis:7-alpine
    container_name: django_redis
    restart: always
    networks:
      - django_net

  nginx:
    image: nginx:alpine
    container_name: django_nginx
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - static_volume:/app/staticfiles:ro
      - media_volume:/app/media:ro
    depends_on:
      - web
    networks:
      - django_net

networks:
  django_net:
    driver: bridge

volumes:
  postgres_data:
  static_volume:
  media_volume:

Разбор ключевых директив конфигурации

Техническое обоснование директив и их прямое влияние на процессор (CPU), оперативную память (RAM) и дисковый ввод-вывод (NVMe I/O).

Директива / Блок Рекомендуемое значение Зачем нужно и системное влияние (CPU / RAM / I-O)
celery -A config worker Фоновый воркер Celery Выполняет тяжелые фоновые задачи (отправка писем, генерация PDF, выгрузка отчетов) без задержки ответа пользователю.

Рекомендуемые системные требования VDS под этот стек

Расчет минимальной и оптимальной конфигурации виртуального сервера для стабильной работы без сбоев.

Оптимальный сайзинг: 2-4 vCPU, 4-8 GB RAM, 60 GB NVMe
Расчетная нагрузка: Django SaaS / Web-сервис
Timeweb Cloud
2 CPU / 4 GB NVMe
Процессор: 2-4 vCPU
Память RAM: 4-8 GB RAM
Накопитель: 60 GB NVMe
🔷 Selectel
2 vCPU / 4 GB RAM
Процессор: 2-4 vCPU
Память RAM: 4-8 GB RAM
Накопитель: 60 GB NVMe
🟠 Beget
Turbo 4 GB
Процессор: 2-4 vCPU
Память RAM: 4-8 GB RAM
Накопитель: 60 GB NVMe

Онлайн-утилиты SysKit для проверки этого сервера

Протестируйте корректность применения конфигурации прямо сейчас в один клик.

Частые ошибки при настройке и их решение (FAQ)

Типовые проблемы вебмастеров и сисадминов при внедрении данной конфигурации.

Как выполнить collectstatic при первом старте?
Запустите `docker compose run --rm web python manage.py collectstatic --no-input`.