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