services:
  # Фронтенд (Next.js)
  landing:
    image: gitea.netrunner-vpn.com/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: gitea.netrunner-vpn.com/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
