87 lines
3.8 KiB
YAML
87 lines
3.8 KiB
YAML
# ==============================================================================
|
||
# 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
|
||
|