add: пред-прод контейнер (рабочий)
This commit is contained in:
86
docker-compose.local-prod.yml
Normal file
86
docker-compose.local-prod.yml
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user