# Версия синтаксиса Docker Compose version: "3.8" services: # 1. Веб-сервер и реверс-прокси Caddy caddy: image: caddy:2-alpine container_name: platform-caddy restart: unless-stopped ports: # Публикуем стандартные порты для веб-трафика - "80:80" - "443:443" - "443:443/udp" # Для HTTP/3 volumes: # Подключаем наш файл конфигурации Caddy - ./Caddyfile:/etc/caddy/Caddyfile # Подключаем папки с файлами, которые Caddy будет раздавать - ./data/frontend:/srv/frontend # Статика фронтенда - ./data/textures:/srv/files/textures # Скины и плащи - ./data/modpack_files:/srv/files/modpacks # Файлы модпаков # Именованные тома для персистентных данных Caddy (SSL-сертификаты и т.д.) - caddy_data:/data - caddy_config:/config networks: - platform-net # 2. Бэкенд-сервер на Go backend: # Образ будет собираться и публиковаться в Gitea Registry нашим CI/CD image: gitea.mrixs.me/minecraft-platform/backend:latest container_name: platform-backend restart: unless-stopped depends_on: - postgres # Запускать только после старта базы данных env_file: - .env # Подключаем файл с секретными переменными (пароли, ключи) networks: - platform-net # 3. Вспомогательный сервис для измерения пинга ping-helper: image: gitea.mrixs.me/minecraft-platform/ping-helper:latest container_name: platform-ping-helper restart: unless-stopped networks: - platform-net # 4. База данных PostgreSQL postgres: image: postgres:16-alpine container_name: platform-postgres restart: unless-stopped volumes: # Именованный том для хранения данных БД - postgres_data:/var/lib/postgresql/data # Монтируем папку со скриптами миграций для возможного ручного запуска - ./scripts/migrations:/docker-entrypoint-initdb.d env_file: - .env # Пароли и имя БД также берем из .env networks: - platform-net # Определяем именованные тома для хранения данных между перезапусками контейнеров volumes: postgres_data: caddy_data: caddy_config: # Определяем общую сеть для взаимодействия контейнеров по именам сервисов networks: platform-net: driver: bridge