--metrics-port (0.0.0.0, в отличие от --health-port — тот 127.0.0.1-only)
отдаёт netrunner_connections_active/total, netrunner_auth_validate_duration_seconds,
netrunner_auth_failures_total, netrunner_circuit_breaker_open. Тот же
hand-rolled HTTP-паттерн, что и health.rs — без HTTP-фреймворка ради
одного эндпоинта.
scripts/generate-prometheus-targets.mjs генерит список scrape-таргетов
из nodes.json — job update-observability-targets в deploy.yml гоняет
его при каждом деплое нод и заливает на VPS с данными
(netrunner-data/observability/targets/nodes.json), чтобы центральный
Prometheus не терял из виду ноды без ручной правки конфига.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- .gitea/workflows/build.yml — cargo build --release + docker build/push в
ghcr.io/nineap/netrunner-proxy:latest (Dockerfile сам не компилирует Rust,
ждёт уже готовый target/release/netrunner-server).
- .gitea/workflows/deploy.yml — только вручную (workflow_dispatch), параметр
target: имя ноды из nodes.json или "all". Job "resolve" фильтрует список,
job "deploy" — matrix по результату, каждая нода видна в прогоне отдельной
строкой. Деплой пересоздаёт контейнер (pull+rm+run), не просто restart —
иначе новый образ не подхватится.
- nodes.json — список нод (name/host/proxy_port/decoy_host), шаблон с
CHANGE_ME — заполнить реальными IP.
Нужные секреты: GHCR_TOKEN (тот же, что и в остальных репо), PROXY_NODES_SSH_KEY
(общий master-ключ на все ноды), PROXY_INTERNAL_SECRET, BACKEND_URL (те же
значения, что уже настроены у бэкенда).