mod: docker-compose сайта в продакшн (и настройка окружения)
All checks were successful
Build ETPGRF-site / build (push) Successful in 1m56s
All checks were successful
Build ETPGRF-site / build (push) Successful in 1m56s
This commit is contained in:
84
docker-compose.prod.yml
Normal file
84
docker-compose.prod.yml
Normal 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:
|
||||
Reference in New Issue
Block a user