# docker-compose.prod.yml для production развертывания проекта rosmorport_tsts # Использование: docker-compose -f docker-compose.prod.yml up -d version: '3.9' services: # Django приложение в production web: # Используем образ из Gitea реестра (собран в CI/CD) image: git.cube2.ru/erjemin/2024-test-rosmorport:latest # Имя контейнера container_name: petclones-site--backend # Переменные окружения для production environment: - DOCKER_ENV=1 - DEBUG=False - PYTHONUNBUFFERED=1 # Тома для медиа, статики и БД volumes: # Volume для media (загруженные пользователями файлы) - media:/app/public/media:rw # Volume для базы данных (SQLite файл) - database:/app/database:rw # Volume для экспорта конфигов из контейнера на хост # Контейнер копирует nginx конфиг при запуске для настройки reverse-proxy на хосте - ./config/nginx:/tmp/nginx_configs:rw # контейнер пишет сюда конфиги # Command: скрипт для копирования конфигов из контейнера на хост при запуске # Встроенный entrypoint nginx:alpine (/docker-entrypoint.sh) запустит это как команду command: > sh -c " echo '📋 Копирование внешнего nginx конфига на хост...' && cp /tmp/pet-clones--external-nginx.conf.source /tmp/nginx_configs/pet-clones--external-nginx.conf.sample && echo '✅ Пример nginx-конфига создан в ./config/nginx/pet-clones--external-nginx.conf.sample (свежий из контейнера)' && if [ ! -f /tmp/nginx_configs/pet-clones--external-nginx.conf ]; then cp /tmp/pet-clones--external-nginx.conf.source /tmp/nginx_configs/pet-clones--external-nginx.conf && echo '✅ Боевой nginx-конфиг создан в ./config/nginx/pet-clones--external-nginx.conf (свежий из контейнера)' else echo '⏭️ Боевой nginx-конфиг оставлен без изменений.' fi gunicorn --bind 0.0.0.0:8000 --workers 1 --worker-class sync --worker-tmp-dir /dev/shm --max-requests 200 --timeout 120 --access-logfile - --error-logfile - rosmorport_tsts.wsgi:application " # Перенаправляем порты ports: - "127.0.0.1:8040:8000" # Политика перезапуска restart: unless-stopped # Метки для Watchtower (авто-обновление) labels: - "com.centurylinklabs.watchtower.scope=petclones-site--scope" # Ограничения ресурсов deploy: resources: limits: cpus: '0.25' memory: 512M # Логирование в JSON-файлы (для сбора логов через docker logs) logging: driver: "json-file" options: max-size: "5m" # больше лимит в продакшене для логирования max-file: "1" # храним 1 файл лога networks: - petclones-site--network # WATCHTOWER ДЛЯ АВТОМАТИЧЕСКОГО ОБНОВЛЕНИЯ ОБРАЗОВ ИЗ РЕЕСТРА watchtower: image: containrrr/watchtower container_name: petclones-site--watchtower restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock # Переменные окружения env_file: - .env environment: - DOCKER_API_VERSION=1.44 # Берем учетные данные из .env файла - REPO_USER=${REPO_USER} - REPO_PASS=${REPO_PASS} # Ограничиваем область видимости только этим проектом - WATCHTOWER_SCOPE=petclones-site--scope # Если нужно указать реестр явно (обычно watchtower сам понимает из имени образа) # - WATCHTOWER_REGISTRY_URL=git.cube2.ru command: --interval 1800 --cleanup # Проверять каждые 30 минут logging: driver: "json-file" options: max-size: "1m" max-file: "1" networks: - petclones-site--network # Сеть для сервисов networks: default: name: petclones-site--network driver: bridge