Files
netrunner-landing/docker-compose.yml
T
nineap 383077e1e6 Метрики /metrics для Next.js и ws-proxy (центральный Prometheus)
proxy-ws (Rust/axum) — тот же паттерн, что api.rs в netrunner-backend:
PrometheusBuilder + middleware, считающий http_requests_total/
http_request_duration_seconds по методу/пути/статусу.

Next.js — app/api/metrics/route.ts на prom-client (явный
runtime="nodejs", т.к. Edge Runtime не тянет perf_hooks/process.*),
отдаёт default-метрики процесса (CPU/память/event loop lag).

Оба порта (3000/3001) перестают быть 127.0.0.1-only — их должен
скрейпить центральный Prometheus на VPS с данными, обязательно
зафайрволить там на его IP (см. комментарии в docker-compose.yml).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 23:21:43 +07:00

75 lines
3.4 KiB
YAML

services:
# Фронтенд (Next.js)
landing:
image: ghcr.io/nineap/netrunner-landing:latest
container_name: netrunner-landing
restart: always
# Не 127.0.0.1 — /api/metrics (см. app/api/metrics/route.ts) должен
# скрейпиться удалённым центральным Prometheus (см.
# netrunner-data/docker-compose.observability.yml). Порт 3000 в целом уже
# не секрет (это тот же самый сайт, что и по HTTPS через реверс-прокси
# перед ним) — но ОБЯЗАТЕЛЬНО зафайрволить на этом VPS на IP
# observability-сервера, чтобы не плодить лишний голый-HTTP путь к сайту.
ports:
- "3000:3000"
environment:
- NODE_ENV=production
# PB_PUBLIC_URL — адрес PocketBase для клиентских компонентов (Pricing,
# TerminalGuestbook, docs/download/terminal-client.tsx): читается на сервере
# в соответствующих page.tsx и прокидывается пропсом, т.к. NEXT_PUBLIC_PB_URL
# Next.js зашивает в бандл на этапе сборки образа в CI и не перечитывает при
# старте контейнера (см. docker-compose.dev-remote.yml, где это стало
# проблемой из-за общего с прод образа).
- PB_PUBLIC_URL=https://netrunner-vpn.com/cms-api
- NEXT_PUBLIC_PB_URL=https://netrunner-vpn.com/cms-api
- NEXT_PUBLIC_PROXY_URL=https://netrunner-vpn.com/api/proxy
- PB_INTERNAL_URL=http://netrunner-cms:8090
# Единая авторизация: ЛК живёт в netrunner-backend на отдельном сабдомене,
# общий родительский домен .netrunner-vpn.com расшаривает cookie-сессию.
# Без NEXT_PUBLIC_ — читаются только на сервере (app/[lang]/auth/page.tsx),
# поэтому реально применяются в рантайме, а не зашиваются в бандл при сборке.
- ACCOUNT_ORIGIN=https://account.netrunner-vpn.com
- API_URL=https://account.netrunner-vpn.com/api/v1
- BOT_USERNAME=ntrnr_vpn_bot
depends_on:
- ws-proxy
networks:
- netrunner-network
# CMS (PocketBase)
netrunner-cms:
image: ghcr.io/muchobien/pocketbase:latest
container_name: netrunner-cms
restart: unless-stopped
command:
- serve
- --http=0.0.0.0:8090
- --dir=/pb_data
ports:
- "127.0.0.1:8090:8090"
volumes:
- ./pb_data:/pb_data
networks:
- netrunner-network
# Прокси-слой (Rust)
ws-proxy:
image: ghcr.io/nineap/netrunner-landing-proxy:latest
container_name: netrunner-ws-proxy
restart: always
# Не 127.0.0.1 — /metrics (см. proxy-ws/src/main.rs) должен скрейпиться
# удалённым центральным Prometheus. Обязательно зафайрволить на IP
# observability-сервера (см. netrunner-data/docker-compose.observability.yml).
ports:
- "3001:3001"
environment:
- PB_INTERNAL_URL=http://netrunner-cms:8090
depends_on:
- netrunner-cms
networks:
- netrunner-network
networks:
netrunner-network:
driver: bridge