Files
2018-lpon-site/docker-compose.prod.yml
erjemin a523fe830e
All checks were successful
Build and Push LPON-site / build-and-push (push) Successful in 2m2s
mod: nginx-config и механизм его "перекладки" из контейнера на хост
2026-03-27 14:25:29 +03:00

94 lines
4.7 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 для PRODUCTION
#
# Этот файл предназначен для продакшен окружения. Его необходимо скопировать на продакшн-сервер под именем
# `docker-compose.yml` в корневой каталог проекта.
# Перед запуском убедитесь, что в корне проекта есть файл `.env` с необходимыми переменными окружения.
# Запуск:
# Вариант 1 (если переименовали в docker-compose.yml): docker compose up -d
# Вариант 2 (если оставили имя): docker compose -f docker compose -f compose.prod.yml up -d
# ==============================================================================
# В новых версиях Docker Compose можно не указывать версию (даже warning появляется, если указать)
# version: '3.8'
services:
# ОСНОВНОЙ СЕРВИС
lpon-site-prod:
image: git.cube2.ru/erjemin/2018-lpon-site:latest
# Имя контейнера для удобства
container_name: lpon-site-prod
# Политика перезапуска: всегда перезапускать контейнер, если он упал
restart: always
# Метки для Watchtower (авто-обновление)
labels:
- "com.centurylinklabs.watchtower.scope=lpon-scope"
# Переменные окружения
env_file:
- .env
# КОМАНДА ЗАПУСКА (Замена entrypoint.sh)
# Выполняем цепочку команд внутри контейнера при запуске:
# с. Создаем папку nginx в примонтированном томе конфигов (если нет)
# d. Копирование конфига Nginx с авто-заменой путей через sed (замену реального пути на хосте получаем
# через переменную окружения HOST_PROJECT_PATH)
# e. Инициализация боевого конфига (если нет)
command: >
sh -c "mkdir -p /nginx_configs_host/nginx &&
sed \"s|/home/user/app/lpon-site|${HOST_PROJECT_PATH:-/home/default_user/projects/lpon-site}|g\" /nginx_configs_host/nginx/lpon-app--external-nginx.conf > /nginx_configs_host/nginx/nginx_lpon.conf.example &&
if [ ! -f /nginx_configs_host/nginx/lpon-app--external-nginx.conf ]; then
cp /nginx_configs_host/nginx/nginx_lpon.conf.example /nginx_configs_host/nginx/lpon-app--external-nginx.conf;
echo 'INIT: Created new nginx config with correct paths';
fi"
# Тома (Volumes)
volumes:
# Конфиги (Монтируем папку ./config с хоста в /nginx_configs_host внутри контейнера)
# Это нужно, чтобы скрипт запуска мог положить туда .example конфиг и "боевой" конфиг (если его еще нет).
- ./config:/nginx_configs_host
ports:
# Пробрасываем порт 8020 на хосте на стандартный порт 80 внутри контейнера
# Внешний Nginx будет проксировать запросы на хост:8020
- "127.0.0.1:8020:80"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "1"
networks:
- lpon-network
# WATCHTOWER ДЛЯ АВТОМАТИЧЕСКОГО ОБНОВЛЕНИЯ ОБРАЗОВ ИЗ РЕЕСТРА
watchtower:
image: containrrr/watchtower
container_name: lpon-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=lpon-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:
- lpon-network
volumes:
static_volume:
networks:
lpon-network:
driver: bridge