da1c750297
- 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
71 lines
2.4 KiB
YAML
71 lines
2.4 KiB
YAML
# Тестовый стенд awg-dash (задача #21): netns-топология + мок WireGuard-endpoint.
|
|
#
|
|
# Использование:
|
|
# docker compose -f deploy/docker-compose.test.yml run --rm netns # прогон стенда
|
|
# docker compose -f deploy/docker-compose.test.yml run --rm netns --keep-topology
|
|
# docker compose -f deploy/docker-compose.test.yml up -d app # приложение для API-тестов
|
|
# (make test-netns-ci — обёртка над первым вызовом)
|
|
#
|
|
# Контейнеру `netns` нужен --privileged: внутри создаются сетевые namespace
|
|
# (`ip netns add`) и veth-пары, для этого требуются CAP_SYS_ADMIN + CAP_NET_ADMIN.
|
|
# Репозиторий монтируется только для чтения; артефакты пишутся в /artifacts и /tmp.
|
|
|
|
name: ${COMPOSE_PROJECT_NAME:-awg-dash-test}
|
|
|
|
services:
|
|
netns:
|
|
image: ${AWG_DASH_IMAGE:-awg-dash:dev}
|
|
build:
|
|
context: ..
|
|
dockerfile: ${AWG_DASH_DOCKERFILE:-deploy/Dockerfile}
|
|
container_name: awg-dash-test-netns
|
|
privileged: true
|
|
working_dir: /repo
|
|
entrypoint: ["/bin/bash", "/repo/tests/netns/run.sh"]
|
|
command: ["--report", "/artifacts/netns-report.json"]
|
|
volumes:
|
|
- ..:/repo:ro
|
|
- ${AWG_DASH_TEST_ARTIFACTS:-./artifacts}:/artifacts
|
|
environment:
|
|
AWG_NETNS_WORKDIR: /tmp/awg-netns
|
|
AWG_NETNS_PREFIX: ${AWG_NETNS_PREFIX:-awgt21}
|
|
# nft в образе приложения нет — там iptables (см. tests/netns/README.md)
|
|
AWG_FW_BACKEND: ${AWG_FW_BACKEND:-auto}
|
|
tmpfs:
|
|
- /tmp:mode=1777
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: "5m"
|
|
max-file: "2"
|
|
|
|
app:
|
|
image: ${AWG_DASH_IMAGE:-awg-dash:dev}
|
|
container_name: awg-dash-test-app
|
|
restart: "no"
|
|
volumes:
|
|
- awg-dash-test-config:/config
|
|
- awg-dash-test-data:/data
|
|
devices:
|
|
- /dev/net/tun:/dev/net/tun
|
|
cap_add:
|
|
- NET_ADMIN
|
|
- NET_RAW
|
|
- SYS_MODULE
|
|
environment:
|
|
AWG_CONFIG_DIR: /config
|
|
AWG_DATA_DIR: /data
|
|
AWG_API_HOST: 0.0.0.0
|
|
AWG_API_PORT: "8080"
|
|
AWG_TEST_STAND: "1"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8080/api/v1/health >/dev/null || exit 1"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
start_period: 20s
|
|
retries: 5
|
|
|
|
volumes:
|
|
awg-dash-test-config:
|
|
awg-dash-test-data:
|