Files
2026-etpgrf-site/docker-compose.prod.yml
erjemin 3a7bb29340
All checks were successful
Build ETPGRF-site / build (push) Successful in 1m56s
mod: docker-compose сайта в продакшн (и настройка окружения)
2026-01-18 01:05:10 +03:00

85 lines
3.3 KiB
YAML
Raw Permalink 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.
version: '3.8'
services:
# Бэкенд сервис
etpgrf-backend:
# Используем готовый образ из Gitea Registry
image: git.cube2.ru/erjemin/2026-etpgrf-site:latest
# Перезапускать всегда (если упал или сервер перезагрузился)
restart: always
# Метка для Watchtower, чтобы он обновлял только этот контейнер
labels:
- "com.centurylinklabs.watchtower.scope=etpgrf"
# Запускаем collectstatic перед стартом
command: sh -c "python etpgrf_site/manage.py collectstatic --noinput && gunicorn --bind 0.0.0.0:8000 --chdir /app/etpgrf_site etpgrf_site.wsgi"
volumes:
# База данных (папка data должна быть создана на хосте)
- ./data:/app/data
# Статика (общий том)
- static_volume:/app/public/static_collected
# Медиа (папка media должна быть создана на хосте)
- ./media:/app/public/media
env_file:
- .env
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# Nginx для отдачи статики и проксирования запросов к бэкенду
etpgrf-nginx:
image: nginx:1.25-alpine
restart: always
# Метка для Watchtower (хотя nginx:alpine обновляется редко, но пусть будет)
labels:
- "com.centurylinklabs.watchtower.scope=etpgrf"
volumes:
# Конфиг берем из репозитория
- ./config/nginx/etpgrf--internal-nginx.conf:/etc/nginx/nginx.conf:ro
- static_volume:/app/public/static_collected
- ./media:/app/public/media
# Внешний порт. Если у тебя на хосте уже есть Nginx (прокси),
# то можно пробросить на 127.0.0.1:8000 или использовать внутреннюю сеть.
# Но пока оставим так:
ports:
- "127.0.0.1:8080:80" # Используем 8080, чтобы не конфликтовать с Portainer (8000) или основным Nginx (80)
depends_on:
- etpgrf-backend
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# Сервис для автоматического обновления образов из реестра
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DOCKER_API_VERSION=1.44
# Берем учетные данные из .env файла
- REPO_USER=${REPO_USER}
- REPO_PASS=${REPO_PASS}
- WATCHTOWER_REGISTRY_URL=git.cube2.ru
# Ограничиваем область видимости только этим проектом
- WATCHTOWER_SCOPE=etpgrf
# Если нужно указать реестр явно (обычно watchtower сам понимает из имени образа)
# - WATCHTOWER_REGISTRY_URL=git.cube2.ru
command: --interval 300 --cleanup # Проверять каждые 5 минут
volumes:
static_volume: