% cat docker-compose.yml # docker-compose.prod.yml для production развертывания проекта rosmorport_tsts # Для использование на хосте провайдера, перейдите в папку с приложением, размемтите # его там под именем `docker-compose.yml` # # Запуск на продакшене: # cd <папка-с-приложением> # mkdir -p config/nginx media database # sudo chmod -R 777 media database config/nginx # sodo docker compose 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 # Переменные окружения env_file: - .env # Переменные окружения для production environment: - DOCKER_ENV=1 - DEBUG=False - PYTHONUNBUFFERED=1 # Тома для медиа, статики и БД # ВАЖНО: Используем локальные монтирования, а не именованные тома! # Данные должны быть доступны на хосте для nginx и резервного копирования volumes: # Локальная папка для media (загруженные пользователями файлы) # Контейнер: /app/public/media → Хост: ./media - ./media:/app/public/media:rw # Локальная папка для базы данных (SQLite файл) # Контейнер: /app/database → Хост: ./database - ./database:/app/database:rw # Volume для экспорта конфигов из контейнера на хост # Контейнер: /tmp/nginx_configs → Хост: ./config/nginx - ./config/nginx:/tmp/nginx_configs:rw # Command: запуск Django приложения с миграциями command: > sh -c " cd /app/rosmorport_tsts && echo 'Применение миграций БД...' && python manage.py migrate --noinput && echo 'Сбор статических файлов...' && python manage.py collectstatic --noinput && echo '🚀 Запуск gunicorn...' && 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: 256M # Логирование в JSON-файлы (для сбора логов через docker logs) logging: driver: "json-file" options: max-size: "5m" # больше лимит в продакшене для логирования max-file: "1" # храним 1 файл лога # 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"