version: "3"

networks:
  traefik-proxy:
    driver: bridge

services:
  apito:
    image: registry.gitlab.com/apito.io/engine:v2.1.6
    platform: linux/amd64
    environment:
      - ENVIRONMENT=production
      - CORS_ORIGIN=https://console.your-domain.com
      - COOKIE_DOMAIN=your-domain.com
      - SYSTEM_DB_HOST=http://db.your-domain.com
      - SYSTEM_DB_PORT=80
      - PROJECT_DB_HOST=http://db.your-domain.com
      - PROJECT_DB_PORT=80
      - KV_HOST=redis.your-domain.com
    volumes:
      - /home/ubuntu/engine.env:/go/src/gitlab.com/apito.io/engine/.env
    depends_on:
      - apito-arangodb
      - apito-redis
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: 1G
    networks:
      - default
      - traefik-proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.apito-api.rule=Host(`api.your-domain.com`)"
      - "traefik.http.routers.apito-api.entrypoints=web"
      - "traefik.http.services.apito-api.loadbalancer.server.port=5050"
      - "traefik.docker.network=traefik-proxy"

  apito-console:
    image: registry.gitlab.com/apito-front/apito-console-v4:v0.1.1
    platform: linux/amd64
    environment:
      - VITE_REST_API=https://api.your-domain.com
      - VITE_GRAPH_API=https://api.your-domain.com/system/graphql
      - VITE_PUBLIC_GRAPH_API=https://api.your-domain.com/secured/graphql
      - VITE_GRAPH_SUBS_API=wss://api.your-domain.com/system/graphql/subscription
      - VITE_AUTH_PROVIDER=apito
    depends_on:
      - apito
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: 512M
    networks:
      - default
      - traefik-proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.apito-console.rule=Host(`console.your-domain.com`)"
      - "traefik.http.routers.apito-console.entrypoints=web"
      - "traefik.http.services.apito-console.loadbalancer.server.port=8080"
      - "traefik.docker.network=traefik-proxy"

  apito-arangodb:
    image: arangodb:3.11.8
    platform: linux/amd64
    environment:
      - ARANGO_ROOT_PASSWORD=your_secure_arangodb_password
    restart: unless-stopped
    networks:
      - default
      - traefik-proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.apito-arangodb.rule=Host(`db.your-domain.com`)"
      - "traefik.http.routers.apito-arangodb.entrypoints=web"
      - "traefik.http.services.apito-arangodb.loadbalancer.server.port=8529"
      - "traefik.docker.network=traefik-proxy"
    volumes:
      - apito_arango_data:/var/lib/arangodb3
      - apito_arango_apps:/var/lib/arangodb3-apps

  apito-redis:
    image: redis:7-alpine
    platform: linux/amd64
    command:
      [
        "redis-server",
        "--appendonly",
        "yes",
        "--requirepass",
        "your_secure_redis_password",
      ]
    restart: unless-stopped
    networks:
      - default
      - traefik-proxy
    labels:
      - "traefik.enable=true"
      - "traefik.tcp.routers.apito-redis.rule=HostSNI(`*`)"
      - "traefik.tcp.routers.apito-redis.entrypoints=redis"
      - "traefik.tcp.services.apito-redis.loadbalancer.server.port=6379"
      - "traefik.docker.network=traefik-proxy"
    volumes:
      - apito_redis_data:/data

  reverse-proxy:
    image: traefik:v3.0
    command:
      - "--api.dashboard=true"
      - "--api.insecure=true"
      - "--log.level=DEBUG"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.redis.address=:6379"
      - "--providers.docker.network=traefik-proxy"
    ports:
      - "80:80"
      - "6379:6379"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    restart: unless-stopped
    networks:
      - default
      - traefik-proxy

volumes:
  apito_arango_data:
  apito_arango_apps:
  apito_redis_data:
