name: idswyft-community
services:
  api:
    cpus: 1
    depends_on:
      engine:
        condition: service_healthy
        required: true
      postgres:
        condition: service_healthy
        required: true
    environment:
      API_KEY_SECRET: 5N8Q2R7T1V4X9Z3A6C0D5E8F2G7H1J4K
      AWS_ACCESS_KEY_ID: your_aws_key
      AWS_REGION: us-east-1
      AWS_S3_BUCKET: idswyft-documents
      AWS_SECRET_ACCESS_KEY: your_aws_secret
      CORS_ORIGINS: http://localhost:5173,http://localhost:3000,https://customer.idswyft.app,https://idswyft.app,https://www.idswyft.app
      DATABASE_SSL: ""
      DATABASE_SSL_REJECT_UNAUTHORIZED: ""
      DATABASE_URL: postgresql://idswyft:changeme-in-production@postgres:5432/idswyft
      ENCRYPTION_KEY: 7A3D9F2H6K1M5P8R4T0V7X2Z9B3C6E1G
      ENGINE_URL: http://engine:3002
      JWT_SECRET: 8F7K2P9X4M6N1Q5R3T8V0Z7A2B4C6D8
      MIGRATIONS_LENIENT: "true"
      NODE_ENV: production
      PORT: "3001"
      RATE_LIMIT_ENABLED: "true"
      SANDBOX_MODE: "true"
      SERVICE_TOKEN: 9X4V1R7K2P8M5A3D6F0H2J9L4N7Q1T8W6Y8Z0A2B4C6D8E1F3G5H7J9K1L3M5
      STORAGE_PROVIDER: supabase
      WATCHTOWER_API_TOKEN: ""
    healthcheck:
      test:
        - CMD
        - wget
        - -qO-
        - http://localhost:3001/health
      timeout: 10s
      interval: 30s
      retries: 3
      start_period: 40s
    image: ghcr.io/team-idswyft/idswyft-api:latest
    labels:
      com.centurylinklabs.watchtower.enable: "true"
    mem_limit: "1073741824"
    networks:
      default: null
    restart: unless-stopped
    volumes:
      - type: volume
        source: uploads
        target: /app/backend/uploads
        volume: {}
      - type: volume
        source: temp
        target: /app/backend/temp
        volume: {}
      - type: bind
        source: C:\idswyft-community\supabase\migrations
        target: /app/backend/migrations
        read_only: true
        bind: {}
  engine:
    cpus: 2
    environment:
      LOG_LEVEL: info
      NODE_ENV: production
      PORT: "3002"
    healthcheck:
      test:
        - CMD
        - wget
        - -qO-
        - http://localhost:3002/health
      timeout: 10s
      interval: 30s
      retries: 3
      start_period: 1m0s
    image: ghcr.io/team-idswyft/idswyft-engine:latest
    labels:
      com.centurylinklabs.watchtower.enable: "true"
    mem_limit: "2147483648"
    networks:
      default: null
    restart: unless-stopped
  frontend:
    cpus: 0.5
    depends_on:
      api:
        condition: service_started
        required: true
    image: ghcr.io/team-idswyft/idswyft-frontend:latest
    labels:
      com.centurylinklabs.watchtower.enable: "true"
    mem_limit: "268435456"
    networks:
      default: null
    ports:
      - mode: ingress
        target: 8080
        published: "80"
        protocol: tcp
    restart: unless-stopped
  postgres:
    environment:
      POSTGRES_DB: idswyft
      POSTGRES_PASSWORD: changeme-in-production
      POSTGRES_USER: idswyft
    healthcheck:
      test:
        - CMD-SHELL
        - PGPASSWORD=changeme-in-production psql -U idswyft -d idswyft -c 'SELECT 1' >/dev/null 2>&1
      timeout: 5s
      interval: 5s
      retries: 5
    image: postgres:16-alpine
    labels:
      com.centurylinklabs.watchtower.enable: "false"
    mem_limit: "1073741824"
    networks:
      default: null
    restart: unless-stopped
    volumes:
      - type: volume
        source: pgdata
        target: /var/lib/postgresql/data
        volume: {}
networks:
  default:
    name: idswyft-community_default
volumes:
  pgdata:
    name: idswyft-community_pgdata
  temp:
    name: idswyft-community_temp
  uploads:
    name: idswyft-community_uploads
