# dev/staging стенд awg-dash (задача #21, эпик #15). # # Отдельный compose-project `awg-dash-dev` — не пересекается с контейнерами PoC # (amneziawg-client) и другими сервисами dev-хоста. # # Запуск: make dev-up (поднимает стек с образом awg-dash:dev) # Проверка AC: make dev-verify (health 200 + переживание restart для /config /data) # Логи: make dev-logs # Остановка: make dev-down (тома/каталоги состояния сохраняются) # # AC-1 (health 200) до реализации FastAPI-каркаса (#31): сам образ API не поднимает, # поэтому `make dev-up` автоматически добавляет оверрайд с health-заглушкой # (deploy/docker-compose.stub.yml, ответ помечен "stub": true) и стенд проходит # healthcheck. После появления backend/awg_api/app.py оверрайд не добавляется. # Явные режимы: `make dev-up-app` (только реальный образ), `make dev-up-stub`. name: ${COMPOSE_PROJECT_NAME:-awg-dash-dev} services: awg-dash: image: ${AWG_DASH_IMAGE:-awg-dash:dev} build: context: .. dockerfile: ${AWG_DASH_DOCKERFILE:-deploy/Dockerfile} args: AMNEZIAWG_GO_REF: ${AMNEZIAWG_GO_REF:-master} AMNEZIAWG_TOOLS_REF: ${AMNEZIAWG_TOOLS_REF:-master} container_name: awg-dash-dev restart: unless-stopped # Порт приложения внутри образа всегда 8080 (EXPOSE/AWG_API_PORT). # На dev-хосте 192.168.1.147 порт 8080 занят (drawio) — по умолчанию 8180. ports: - "${AWG_DASH_PORT:-8180}:8080" volumes: # Состояние вынесено на хост, чтобы правки конфигурации переживали # `docker compose restart` (AC задачи #21) и пересоздание контейнера. - ${AWG_DASH_HOST_DIR:-/opt/awg-dash-dev}/config:/config - ${AWG_DASH_HOST_DIR:-/opt/awg-dash-dev}/data:/data devices: - /dev/net/tun:/dev/net/tun cap_add: # NET_ADMIN — iptables/ipset/ip rule; NET_RAW — ping/socket-проверки; # SYS_MODULE — sysctl net.ipv4.ip_forward и модули ядра (как в ТЗ). - NET_ADMIN - NET_RAW - SYS_MODULE sysctls: net.ipv4.ip_forward: "1" net.ipv4.conf.all.src_valid_mark: "1" environment: AWG_CONFIG_DIR: /config AWG_DATA_DIR: /data AWG_RUN_DIR: /run/awg AWG_API_HOST: 0.0.0.0 AWG_API_PORT: "8080" AWG_LOG_LEVEL: ${AWG_LOG_LEVEL:-info} AWG_DEV_STAND: "1" healthcheck: test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8080/api/v1/health >/dev/null || exit 1"] interval: 15s timeout: 5s start_period: 30s retries: 4 stop_grace_period: 20s logging: driver: json-file options: max-size: "10m" max-file: "3"