Files
awg-dash/deploy/docker-compose.dev.yml
T
embeddevio da1c750297 feat(#21): dev-стенд — compose-файлы, health-заглушка до #31
- docker-compose.dev.yml: отдельный project awg-dash-dev, порт 8080 в контейнере
  (наружу AWG_DASH_PORT, по умолчанию 8180 — 8080 занят на dev-хосте), bind mount
  /opt/awg-dash-dev/{config,data} -> /config,/data, healthcheck /api/v1/health,
  NET_ADMIN/NET_RAW/SYS_MODULE, /dev/net/tun, ip_forward, лимит логов;
- docker-compose.stub.yml + api_stub.py — DEV-ONLY заглушка health: AC-1 требует
  FastAPI-каркаса (#31), до него проверяем плумбинг стенда без обмана отчёта
  (в ответе ивно стоит "stub": true);
- docker-compose.test.yml: привилегированный netns-раннер (CAP_SYS_ADMIN нужен
  для `ip netns add`) + сервис app для API-тестов.

Refs #21
Refs #15
2026-10-21 23:49:11 +03:00

69 lines
2.9 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.
# 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):
# до этого контейнер отдаёт healthcheck unhealthy, а `/config` `/data` уже
# проверяются скриптом deploy/verify-dev-stand.sh. Заглушка для ранней проверки
# стенда — deploy/docker-compose.stub.yml + `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"