# Self-contained compose project for cup26.briggen.dev.
# Deploy: rsync the repo to /root/cup26/, place this file there as
# docker-compose.yml, then `docker compose up -d --build`.
# Joins the EXISTING external `proxy` network — the shared Traefik stack is untouched.
name: cup26

services:
  cup26:
    build: .
    container_name: cup26
    restart: unless-stopped
    environment:
      - PORT=8787
      - STATIC_DIR=/app/dist
      - NODE_ENV=production
      - ALLOWED_ORIGINS=https://cup26.briggen.dev
      - DATA_DIR=/data
      # football-data.org free API token (https://www.football-data.org/client/register)
      - FOOTBALL_DATA_TOKEN=${FOOTBALL_DATA_TOKEN:-}
      # opt-in unofficial sources (usually blocked from a datacenter IP; ESPN is primary)
      - ENABLE_SOFASCORE=${ENABLE_SOFASCORE:-false}
      - ENABLE_FOTMOB=${ENABLE_FOTMOB:-false}
      - ARCHIVE_DIR=/data/archive
      # Web Push (optional): goal/kickoff alerts. Generate once with
      # `npx web-push generate-vapid-keys`; absent keys = feature hidden.
      - VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY:-}
      - VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY:-}
      - VAPID_SUBJECT=${VAPID_SUBJECT:-}
    volumes:
      # The LIVE SQLite must stay on a real local filesystem (WAL + locking do
      # not survive network mounts). HOST_DATA_DIR can override if ever needed.
      - ${HOST_DATA_DIR:-cup26-data}:/data
      # Nightly VACUUM INTO snapshots land here — point HOST_ARCHIVE_DIR at the
      # 1TB storage box (CIFS is fine for sequential snapshot files).
      - ${HOST_ARCHIVE_DIR:-cup26-archive}:/data/archive
    security_opt:
      - no-new-privileges:true
    mem_limit: 384m
    memswap_limit: 384m
    pids_limit: 200
    cpus: 1.0
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.cup26.rule=Host(`cup26.briggen.dev`)"
      - "traefik.http.routers.cup26.entrypoints=websecure"
      - "traefik.http.routers.cup26.tls.certresolver=letsencrypt"
      - "traefik.http.services.cup26.loadbalancer.server.port=8787"
    networks:
      - proxy

volumes:
  cup26-data:
  cup26-archive:

networks:
  proxy:
    external: true
