28 lines
1.6 KiB
Markdown
28 lines
1.6 KiB
Markdown
# 001. Backend — Python 3.12 + FastAPI
|
||
|
||
- **Статус:** принято
|
||
- **Контекст/issue:** #15, #31
|
||
|
||
## Контекст
|
||
|
||
Нужен control plane: REST API, WebSocket, планировщик, парсинг конфигов, работа с SQLite.
|
||
Низкоуровневая работа сети и шифрования выполняется не нашим кодом, а бинарями `awg` и `amneziawg-go`,
|
||
трафик маршрутизирует ядро.
|
||
|
||
## Решение
|
||
|
||
Control plane — **Python 3.12 + FastAPI (async)**. Go остаётся только там, где он уже есть:
|
||
`amneziawg-go` и `amneziawg-tools` собираются в multi-stage Dockerfile (ADR-002).
|
||
|
||
## Альтернативы
|
||
|
||
- **Go целиком** — быстрее на сетевом I/O, но маршрутизацией занимается ядро, а не процесс;
|
||
выигрыш не оправдывает рост стоимости контракта с UI (схемы, генерация клиента, миграции, веб-фреймворк).
|
||
- **Node.js** — преимуществ перед Python на нагрузке в единичного пользователя нет.
|
||
|
||
## Последствия
|
||
|
||
- OpenAPI-first: FastAPI отдаёт схему, что прямо соответствует задаче #19.
|
||
- В образе появляется Python runtime (плюс 40–60 MB к размеру).
|
||
- Дисциплина async: внешние команды — только `asyncio.create_subprocess_exec`, блокирующего кода в event loop нет.
|