# 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 renderer: image: ${REGISTRY:?set REGISTRY}/scrabble-renderer:${TAG:?set TAG} deploy: resources: limits: memory: 160M 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