version: '3.7'
services:
  activepieces:
    image: activepieces/activepieces:0.18.2
    container_name: activepieces
    restart: unless-stopped
    ports:
      - '${APP_PORT}:80'
    depends_on:
      activepieces-postgres:
        condition: service_healthy
      activepieces-redis:
        condition: service_healthy
    environment:
      - AP_ENGINE_EXECUTABLE_PATH=dist/packages/engine/main.js
      - AP_API_KEY=${AP_API_KEY}
      - AP_ENCRYPTION_KEY=${AP_ENCRYPTION_KEY}
      - AP_JWT_SECRET=${AP_JWT_SECRET}
      - AP_ENVIRONMENT=prod
      - AP_FRONTEND_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN}
      - AP_WEBHOOK_TIMEOUT_SECONDS=30
      - AP_TRIGGER_DEFAULT_POLL_INTERVAL=5
      - AP_POSTGRES_DATABASE=activepieces
      - AP_POSTGRES_HOST=activepieces-postgres
      - AP_POSTGRES_PORT=5432
      - AP_POSTGRES_USERNAME=tipi
      - AP_POSTGRES_PASSWORD=${AP_POSTGRES_PASSWORD}
      - AP_EXECUTION_MODE=UNSANDBOXED
      - AP_REDIS_HOST=activepieces-redis
      - AP_REDIS_PORT=6379
      - AP_SANDBOX_RUN_TIME_SECONDS=600
      - AP_TELEMETRY_ENABLED=true
      - AP_TEMPLATES_SOURCE_URL="https://cloud.activepieces.com/api/v1/flow-templates"
    networks:
      - tipi_main_network

    labels:
      # Main
      traefik.enable: true
      traefik.http.middlewares.activepieces-web-redirect.redirectscheme.scheme: https
      traefik.http.services.activepieces.loadbalancer.server.port: 80
      # Web
      traefik.http.routers.activepieces-insecure.rule: Host(`${APP_DOMAIN}`)
      traefik.http.routers.activepieces-insecure.entrypoints: web
      traefik.http.routers.activepieces-insecure.service: activepieces
      traefik.http.routers.activepieces-insecure.middlewares: activepieces-web-redirect
      # Websecure
      traefik.http.routers.activepieces.rule: Host(`${APP_DOMAIN}`)
      traefik.http.routers.activepieces.entrypoints: websecure
      traefik.http.routers.activepieces.service: activepieces
      traefik.http.routers.activepieces.tls.certresolver: myresolver
      # Local domain
      traefik.http.routers.activepieces-local-insecure.rule: Host(`activepieces.${LOCAL_DOMAIN}`)
      traefik.http.routers.activepieces-local-insecure.entrypoints: web
      traefik.http.routers.activepieces-local-insecure.service: activepieces
      traefik.http.routers.activepieces-local-insecure.middlewares: activepieces-web-redirect
      # Local domain secure
      traefik.http.routers.activepieces-local.rule: Host(`activepieces.${LOCAL_DOMAIN}`)
      traefik.http.routers.activepieces-local.entrypoints: websecure
      traefik.http.routers.activepieces-local.service: activepieces
      traefik.http.routers.activepieces-local.tls: true

  activepieces-postgres:
    image: postgres:14
    restart: unless-stopped
    container_name: activepieces-postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
      interval: 30s
      timeout: 30s
      retries: 3
    environment:
      - POSTGRES_DB=activepieces
      - POSTGRES_PASSWORD=${AP_POSTGRES_PASSWORD}
      - POSTGRES_USER=tipi
    volumes:
      - '${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data'
    networks:
      - tipi_main_network

  activepieces-redis:
    image: redis:7
    container_name: activepieces-redis
    healthcheck:
      test: redis-cli ping
      interval: 30s
      timeout: 30s
      retries: 3
    restart: unless-stopped
    volumes:
      - '${APP_DATA_DIR}/data/redis/:/data'
    networks:
      - tipi_main_network
