embeddevio a4475113bc
contract-openapi / openapi-contract (push) Failing after 36s
contract-openapi / ts-client-is-current (push) Failing after 28s
Merge pull request 'Sprint 0 / #21: dev/staging стенд — docker-compose, тома, netns-харнесс' (#53) from feat/21-dev-stand into main
Sprint 0 / #21: dev/staging стенд — docker-compose, тома, netns-харнесс

Ревью QA (раунд 3) APPROVE: AC-1 health 200 + healthy, AC-2 состояние переживает
restart и --force-recreate, AC-3 netns 8/8 ok; gates shellcheck/validate_compose/
test-deploy (51 passed, coverage 98.86%) — зелёные, все 5 замечаний раундов 1-2 закрыты.
Прогоны выполнены ревьюером на стенд-хосте 192.168.1.147.
CI-гейт заменён по причине дефекта git-http Gitea (#58: bad pack header в job-чекэуте).
Refs #21, #15, #58.
2026-10-28 22:12:02 +03:00
2026-10-16 22:45:47 +03:00

awg-dash

VPN-шлюз AmneziaWG с интеллектуальной маршрутизацией: один Docker-образ = туннель + policy routing + split-tunnel (GeoIP / DNS) + REST API v1 + Web UI (тёмная тема).

  • Эпик и декомпозиция: Gitea issue #15 (embeddevio/awg-dash).
  • Исполнение: Hermes Kanban, борда awg-dash (hermes kanban --board awg-dash list).
  • PoC-референс: embeddevio/amneziawg-docker-gateway (bash + iptables, docs/technical-specification.md).

Архитектура

Два процесса в одном образе:

Процесс Пользователь Ответственность
awg-agent root awg/wg-интерфейс, iptables/ipset, dnsmasq, policy routing, метрики
awg-api непривилегированный FastAPI: REST API v1, WebSocket, статика UI

Обмен — unix-socket /run/awg/agent.sock; состояние — SQLite в /data, конфиги .conf в /config. Принятые решения зафиксированы в docs/adr/.

Быстрый старт (после релиза 1.0)

docker run -dit --name=vpn-gateway \
  --network=host \
  --device=/dev/net/tun:/dev/net/tun \
  --cap-add=NET_ADMIN --cap-add=SYS_MODULE \
  --restart always \
  -v /srv/awg/config:/config -v /srv/awg/data:/data \
  registry.example.com/vpn-gateway:latest

Web UI: http://<host>:8080. До релиза образ собирается локально: make build.

Разработка

make venv    # локальное окружение (.venv)
make lint    # ruff + mypy
make test    # pytest + coverage (порог 70%)
make build   # docker build образа (задача #18)
make dev-up  # dev-стенд (задача #21)

Сетевые тесты выполняются в netns-стенде (tests/netns/), без реального VPN-провайдера.

Структура репозитория

Путь Назначение
backend/awg_agent/ привилегированный агент: туннель, маршрутизация, GeoIP, DNS, метрики
backend/awg_api/ FastAPI-приложение (REST + WS + статика UI)
backend/tests/ unit/integration-тесты (pytest)
ui/ React + TypeScript + Tailwind + shadcn-ui
deploy/ Dockerfile, compose-профили, entrypoint, Grafana-дашборд
docs/adr/ архитектурные решения
tests/netns/ сетевой тестовый стенд

Процесс разработки

1 задача = 1 issue = 1 ветка feat/<issue>-slug = 1 PR.

Гейты мержа: CI green, coverage нового кода ≥ 70 %, security scan low/none, ревью владельца роли. Merge в main и деплой в prod — только TechLead после гейтов. Все операции с репозиторием — через Gitea MCP.

S
Description
awg-dash 🚀
Readme MIT 537 KiB
Languages
Python 85.4%
Shell 12.3%
Makefile 2.3%