# ============================================================================== # 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