# Описываем список запускаемых сервисов (контейнеров) services: # Название нашего сервиса внутри экосистемы Docker Compose stun: # Путь к папке, где находится Dockerfile для сборки образа. # Точка означает текущую директорию. build: . # Имя и тег, которые будут присвоены собранному Docker-образу image: go-stun-server:latest # Фиксированное имя контейнера в операционной системе (для удобства просмотра через `docker ps`) container_name: stun_server # Сетевой режим: "host". Контейнер использует сетевой стек хоста напрямую. # Включает максимальную производительность UDP, убирает задержки и накладные расходы # стандартного механизма маршутизации Docker (docker-proxy). Порты пробрасывать не нужно. network_mode: "host" # Политика перезапуска: контейнер будет автоматически перезапускаться при падении приложения, # сбое Docker-демона или полной перезагрузке самого VPS (если только вы не остановили его вручную). restart: unless-stopped # Переменные окружения, которые прокидываются внутрь приложения environment: # Задаем переменную PUBLIC_IP. Конструкция \${VARIABLE:-default} означает: # взять значение PUBLIC_IP из файла .env системы, а если его там нет, использовать дефолтный 127.0.0.1 - PUBLIC_IP=${PUBLIC_IP:-127.0.0.1} # Секция управления ресурсами при развертывании (работает как в Swarm, так и в стандартном Compose) deploy: resources: # Устанавливаем жесткие лимиты, которые контейнер не сможет превысить limits: # Выделяем серверу максимум 2 процессорных ядра (ядра CPU) cpus: '2' # Ограничиваем оперативную память до 128 Мб (для STUN этого более чем достаточно) memory: 128M # Настройка ротации и сбора логов контейнера (важно для защиты диска от переполнения) logging: # Используем стандартный драйвер логирования в JSON-файлы driver: "json-file" options: # Максимальный размер одного файла лога — 10 Мегабайт max-size: "10m" # Хранить не более 3 архивных файлов логов. Старые логи будут автоматически затираться. max-file: "3"