# ADR — архитектурные решения awg-dash Один файл = одно решение. Формат: контекст -> решение -> последствия. | ADR | Решение | |---|---| | [001](001-backend-python-fastapi.md) | Backend — Python 3.12 + FastAPI | | [002](002-single-image-modular-monolith.md) | Модульный монолит в одном образе, 2 процесса | | [003](003-reconcile-desired-state.md) | Декларативный reconcile вместо императивных скриптов | | [004](004-geoip-ripe-provider.md) | GeoIP: RIPE Stat + локальный кэш + абстракция провайдера | | [005](005-dns-dnsmasq.md) | DNS: встроенный dnsmasq + перехват порта 53 | | [006](006-state-sqlite.md) | Состояние: SQLite (WAL) + /config + /data | | [007](007-embedded-web-server.md) | Web-сервер: встроенный uvicorn, без nginx | | [008](008-api-ui-security.md) | Безопасность API/UI: токен, CSRF, rate limit, маскировка секретов | Новые решения добавляются со следующим номером и ссылкой на issue, для которого решение принято.