name: convexmonorepo-local

services:
  postgres:
    image: postgres:17
    container_name: convexmonorepo-local-postgres
    ports: ['${POSTGRES_PORT:-5432}:5432']
    environment:
      - POSTGRES_USER=${POSTGRES_USER:-convexmonorepo}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-localdev}
      - POSTGRES_DB=${POSTGRES_DB:-convexmonorepo_payload}
    volumes: [payload-postgres-data:/var/lib/postgresql/data]
    restart: unless-stopped
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}']
      start_period: 10s
      interval: 5s
      retries: 10
      timeout: 5s

  convex-backend:
    image: ghcr.io/get-convex/convex-backend:${BACKEND_TAG:-latest}
    container_name: convexmonorepo-local-convex
    ports:
      - '${BACKEND_PORT:-3210}:3210'
      - '${SITE_PROXY_PORT:-3211}:3211'
    environment:
      - INSTANCE_NAME=${LOCAL_INSTANCE_NAME:-convexmonorepo_local}
      - INSTANCE_SECRET=${LOCAL_INSTANCE_SECRET:-0000000000000000000000000000000000000000000000000000000000000000}
      - CONVEX_CLOUD_ORIGIN=http://localhost:${BACKEND_PORT:-3210}
      - CONVEX_SITE_ORIGIN=http://localhost:${SITE_PROXY_PORT:-3211}
      - DISABLE_BEACON=true
      - REDACT_LOGS_TO_CLIENT=false
      - DO_NOT_REQUIRE_SSL=true
      # Convex uses its own volume by default. A cloned project may opt into
      # Convex-on-Postgres by configuring a separate database URL here:
      # - POSTGRES_URL=postgres://user:password@postgres:5432/convex?sslmode=disable
    volumes: [convex-data:/convex/data]
    restart: unless-stopped
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:3210/version']
      start_period: 10s
      interval: 5s
      retries: 20
      timeout: 5s
    stop_grace_period: 10s
    stop_signal: SIGINT

  convex-dashboard:
    image: ghcr.io/get-convex/convex-dashboard:${DASHBOARD_TAG:-latest}
    container_name: convexmonorepo-local-convex-dashboard
    ports: ['${DASHBOARD_PORT:-6791}:6791']
    environment:
      - NEXT_PUBLIC_DEPLOYMENT_URL=http://localhost:${BACKEND_PORT:-3210}
    depends_on:
      convex-backend:
        condition: service_healthy
    restart: unless-stopped

volumes:
  payload-postgres-data:
  convex-data:
