# Production main-host overlay, applied on top of docker-compose.yml on the main host:
#   docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
#
# It (1) publishes caddy 80/443 — there is no host caddy in prod, so the contour caddy
# owns the edge and does its own ACME on CADDY_SITE_ADDRESS — and the gateway bot-link
# :9443 the remote bot dials in over mTLS; and (2) retunes the baseline limits down for the
# 2 vCPU / 1.9 GiB host (GOMAXPROCS=2, smaller memory caps, shorter Prometheus
# retention). The contour launches deliberately undersized at zero players; the added
# node_exporter + Grafana watch host memory so it can be resized at Selectel when
# traffic arrives.
#
# The bot + its VPN sidecar are absent here (the telegram-local profile is not
# activated); the prod bot runs on its own host from docker-compose.bot.yml.

services:
  caddy:
    ports:
      - "80:80"
      - "443:443"
    deploy:
      resources:
        limits:
          memory: 96M

  gateway:
    # Prod pulls the pushed image by tag instead of building locally; the base
    # build: section stays dormant because the deploy always pulls first.
    image: ${REGISTRY:?set REGISTRY}/scrabble-gateway:${TAG:?set TAG}
    ports:
      - "9443:9443"
    environment:
      # 2 vCPU host: align the Go scheduler with the cgroup quota (the baseline's 3-core gateway needs 3 cores).
      GOMAXPROCS: "2"
    deploy:
      resources:
        limits:
          cpus: "2.0"
          memory: 384M

  backend:
    image: ${REGISTRY:?set REGISTRY}/scrabble-backend:${TAG:?set TAG}
    deploy:
      resources:
        limits:
          memory: 384M

  postgres:
    deploy:
      resources:
        limits:
          memory: 384M

  validator:
    image: ${REGISTRY:?set REGISTRY}/scrabble-telegram-validator:${TAG:?set TAG}
    deploy:
      resources:
        limits:
          memory: 96M

  landing:
    image: ${REGISTRY:?set REGISTRY}/scrabble-landing:${TAG:?set TAG}
    deploy:
      resources:
        limits:
          memory: 64M

  otelcol:
    deploy:
      resources:
        limits:
          memory: 256M

  prometheus:
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.retention.time=7d
    deploy:
      resources:
        limits:
          memory: 256M

  tempo:
    deploy:
      resources:
        limits:
          memory: 384M

  grafana:
    deploy:
      resources:
        limits:
          memory: 256M

  postgres_exporter:
    deploy:
      resources:
        limits:
          memory: 64M
