65 lines
3.0 KiB
Markdown
65 lines
3.0 KiB
Markdown
# 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)
|
|
|
|
```bash
|
|
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`.
|
|
|
|
## Разработка
|
|
|
|
```bash
|
|
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.
|