Files
2024-test-rosmorport/docker-compose.prod.yml
erjemin 711b34af3d refactor: использовать image из реестра вместо локальной сборки в production
- Заменен build: ... на image: git.cube2.ru/erjemin/2024-test-rosmorport:latest
- В production образ должен быть собран в CI/CD и загружен из реестра
- Watchtower будет автоматически обновлять контейнер при выходе нового image
- Это более правильный и безопасный подход для production
2026-04-01 01:00:23 +03:00

109 lines
4.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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