From 9575e0e0d913acbbdf15b5e2a2b559837a764eb8 Mon Sep 17 00:00:00 2001 From: erjemin Date: Tue, 19 May 2026 21:07:43 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=BF=D1=80=D0=B5=D0=B4-=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=B9=D0=BD=D0=B5?= =?UTF-8?q?=D1=80=20(=D1=80=D0=B0=D0=B1=D0=BE=D1=87=D0=B8=D0=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.local-prod.yml | 86 +++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 docker-compose.local-prod.yml diff --git a/docker-compose.local-prod.yml b/docker-compose.local-prod.yml new file mode 100644 index 0000000..5a0b6cd --- /dev/null +++ b/docker-compose.local-prod.yml @@ -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 +