Docker Compose для Django + Gunicorn + Celery + Celery Beat + Redis + PostgreSQL
Готовый 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`.
Рекомендуемые смежные конфигурации
Дополнительные рецепты и калькуляторы для полной оптимизации данного серверного стека.