feat(proxy): add service CRUD with persistent storage

ServiceManager with JSON file persistence replaces static env var config.
CRUD API endpoints (POST/PUT/DELETE /api/services) with WebSocket broadcast.
Dashboard: add/edit/delete services via modal form.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Vadim Sobinin
2026-02-10 16:05:44 +03:00
parent 59add2a549
commit 420d75a3b7
12 changed files with 432 additions and 23 deletions

View File

@@ -38,6 +38,18 @@ Wake-on-demand система из двух компонентов:
Proxy матчит сервисы по `Host` заголовку. Если PC online — http-proxy проксирует запрос. Если offline — показывает "Waking up" страницу с автополлом.
## Service Management
Сервисы хранятся в `${DATA_DIR}/services.json` (по умолчанию `./data/services.json`). При первом запуске берутся из env var `SERVICES`, затем управляются через CRUD API:
- `GET /api/services` — список
- `POST /api/services` — создание
- `PUT /api/services/:host` — обновление (host неизменяем)
- `DELETE /api/services/:host` — удаление
`ServiceManager` (`packages/proxy/src/services/serviceManager.ts`) — in-memory + атомарная запись (tmp + rename). Изменения уведомляют dashboard через WebSocket (`service_list_changed`).
В Docker volume монтируется: `./data/proxy:/app/data`.
## Деплой
Два приложения в Dokploy из одного git repo: