91e214dad2
Prometheus/Loki/Grafana больше не живут внутри backend-стека — единый
стек теперь на VPS с данными (netrunner-data), т.к. ему нужно видеть
ещё лендинг и все прокси-ноды, не только бэкенд. Отсюда только тонкий
promtail, пушащий логи по сети (LOKI_PUSH_URL).
Новые бизнес-метрики поверх уже существующих generic HTTP-метрик:
payments_total{provider,status}, nodes_online/nodes_total,
support_tickets_total{status}, referral_signups_total,
partner_commission_total{currency} — тем же макросом metrics::counter!/
gauge!, что уже был в api.rs/error.rs.
Новый гейт-эндпоинт GET /api/v1/admin/observability/check (только
Owner/Moderator) — для Caddy forward_auth перед Grafana (см.
netrunner-data/observability/Caddyfile), встройка в админку через
GRAFANA_PUBLIC_URL в GET /api/v1/config.
templates/init_node.sh — добавляет --metrics-port 9093 в провижининг
новых прокси-нод.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
57 lines
2.2 KiB
Bash
57 lines
2.2 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
echo "[*] Step 1: Updating system packages..."
|
|
apt-get update -y && apt-get install -y ca-certificates libssl3
|
|
|
|
echo "[*] Step 2: Installing Docker..."
|
|
if ! command -v docker &> /dev/null; then
|
|
curl -fsSL https://get.docker.com -o get-docker.sh
|
|
sh get-docker.sh
|
|
fi
|
|
|
|
echo "[*] Step 3: Logging into ghcr.io via Control Plane token..."
|
|
echo "$GH_TOKEN" | docker login ghcr.io -u nineap --password-stdin
|
|
|
|
echo "[*] Step 4: Pulling the latest Netrunner image..."
|
|
docker pull ghcr.io/nineap/netrunner-proxy:latest
|
|
|
|
echo "[*] Step 5: Starting Netrunner Proxy at port ${NODE_PORT}..."
|
|
# NODE_PORT/SNI_DOMAIN/BACKEND_URL/PROXY_INTERNAL_SECRET подставляет
|
|
# NodeService::provision_node_via_ssh (см. src/modules/nodes/service.rs) —
|
|
# конкретные для ЭТОЙ ноды значения, а не общий дефолт на все ноды разом.
|
|
# Раньше control-plane URL был захардкожен прямо тут на конкретный IP, а
|
|
# --decoy-host/--require-auth/--health-port вообще не передавались — нода
|
|
# всегда стартовала с дефолтным декоем (www.debian.org, одинаковым для всех
|
|
# нод сразу) и БЕЗ проверки токена/лимитов трафика, независимо от того, что
|
|
# админ вводил при добавлении ноды.
|
|
docker run -d \
|
|
--name netrunner-proxy \
|
|
--restart always \
|
|
--network host \
|
|
--cap-add NET_ADMIN \
|
|
--cap-add NET_RAW \
|
|
--cap-add DAC_OVERRIDE \
|
|
--device /dev/net/tun:/dev/net/tun \
|
|
-e PROXY_INTERNAL_SECRET="$PROXY_INTERNAL_SECRET" \
|
|
ghcr.io/nineap/netrunner-proxy:latest \
|
|
./netrunner-proxy \
|
|
--port "$NODE_PORT" \
|
|
--decoy-host "$SNI_DOMAIN" \
|
|
--require-auth \
|
|
--backend-url "$BACKEND_URL" \
|
|
--health-port 9091 \
|
|
--metrics-port 9093
|
|
|
|
echo "[*] Step 6: Starting Watchtower for auto-updates..."
|
|
docker run -d \
|
|
--name watchtower \
|
|
--restart always \
|
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
-v /root/.docker/config.json:/config.json:ro \
|
|
containrrr/watchtower \
|
|
--interval 300 \
|
|
--cleanup \
|
|
netrunner-proxy
|
|
|
|
echo "[+] Node deployment complete. Proxy and Watchtower are running." |