Files
2022_oknardia/docker-compose.local-prod.yml

91 lines
4.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ==============================================================================
# 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. Пересчитываем рейтинги профилей, стеклопакетов и наборов
# (метод Манна-Уитни: может занять 30-60 сек на БД с 94+ профилями)
# 7. Запускаем Gunicorn (нет live reload — это production режим!)
# (timeout=120 сек для запуска, достаточно для всех процедур инициализации)
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 manage.py make_rating &&
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