add: пред-прод контейнер (рабочий)

This commit is contained in:
2026-05-19 21:07:43 +03:00
parent 2396387883
commit 9575e0e0d9

View File

@@ -0,0 +1,86 @@
# ==============================================================================
# Docker Compose для PRODUCTION тестирования (Local Production Simulation)
# Этот файл содержит настройки для локального тестирования production конфигурации.
#
# ВАЖНО: Используется для отладки production сборки ЛОКАЛЬНО перед деплоем!
#
# Запуск: docker compose -f docker-compose.local-prod.yml up --build
# Остановка: docker compose -f docker-compose.local-prod.yml down
# ==============================================================================
services:
web:
# Имя контейнера для удобства
container_name: oknardia-backend-prod-test
# Сборка из текущей директории
build: .
# Пробрасывание портов (тестируем на другом порту, чтобы не конфликтовать с dev)
# Dev на 8060, Prod на 8061
ports:
- "8061:8000"
# 1. КОМАНДА ЗАПУСКА (Prod режим)
# Используем Gunicorn как в production.
# При старте контейнера:
# 1. Создаём медиа директорию
# 2. Применяем миграции
# 3. Собираем статику
# 4. Генерируем sitemap'ы
# 5. Пересоздаём пре-рендер шаблоны серий
# 6. Запускаем Gunicorn (нет live reload — это production режим!)
command: >
sh -c "mkdir -p /home/app/public/media &&
python manage.py migrate --noinput &&
python manage.py collectstatic --noinput &&
python manage.py generate_sitemaps &&
python manage.py regenerate_seria_prerender &&
python -m gunicorn --workers 2 --bind 0.0.0.0:8000 --timeout 120 oknardia.wsgi:application"
# 2. МОНТИРОВАНИЕ КОДА И ДАННЫХ
# Подключаем весь проект целиком, чтобы Django правильно вычислил пути.
# В production файлы будут в контейнере, но для локального тестирования
# монтируем для удобства остановки/пересоздания.
volumes:
# Весь проект в /home/app
- .:/home/app
# 3. ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ (Production)
env_file:
# Основной конфиг из .env (DATABASE, EMAIL, API ключи)
- .env
environment:
# ПЕРЕОПРЕДЕЛЯЕМ для production режима:
- DEBUG=False # ВАЖНО: выключен debug для production
- DJANGO_LOG_LEVEL=INFO # Вместо DEBUG (меньше логов)
# Для локального тестирования: разрешить отдачу медиа через Django (только test!)
# В production это обслуживает Nginx!
- ALLOW_MEDIA_SERVE=True
# 4. РЕСУРСЫ (Для локального тестирования можно без лимитов, но в реальном production нужны)
# deploy:
# resources:
# limits:
# cpus: '1'
# memory: 512M
# reservations:
# cpus: '0.5'
# memory: 256M
# 5. ЛОГИРОВАНИЕ
# Для отладки production проблем полезно видеть логи
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# 6. ЗДОРОВЬЕ КОНТЕЙНЕРА
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s