mod: docker-compose сайта в продакшн (и настройка окружения)
All checks were successful
Build ETPGRF-site / build (push) Successful in 1m56s

This commit is contained in:
2026-01-18 01:05:10 +03:00
parent d5769945db
commit 3a7bb29340
2 changed files with 88 additions and 0 deletions

View File

@@ -9,3 +9,7 @@ ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0
# Доверенные источники для CSRF (важно для Docker/Nginx)
# Укажите здесь URL, по которому вы заходите на сайт (с протоколом и портом)
CSRF_TRUSTED_ORIGINS=http://localhost:8000,http://127.0.0.1:8000,http://0.0.0.0:8000
# Настройки достпа к пакетам в репозитории, чтобы wathtower мог проверять их свежесть и скачивать
REPO_USER=xxxxx
REPO_PASS=xxxxx

84
docker-compose.prod.yml Normal file
View File

@@ -0,0 +1,84 @@
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: