services:
  automatisch:
    image: automatischio/automatisch:0.15.0
    restart: unless-stopped
    environment:
      - HOST=${DOMAIN}
      - PROTOCOL=http
      - PORT=3000
      - API_URL=http://${DOMAIN}
      - WEB_APP_URL=http://${DOMAIN}
      - APP_ENV=production
      - REDIS_HOST=automatisch-redis
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - POSTGRES_HOST=automatisch-postgres
      - POSTGRES_DATABASE=automatisch
      - POSTGRES_USERNAME=postgres
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
      - WEBHOOK_SECRET_KEY=${WEBHOOK_SECRET_KEY}
      - APP_SECRET_KEY=${APP_SECRET_KEY}
    volumes:
      - storage:/automatisch/storage
    depends_on:
      automatisch-postgres:
        condition: service_healthy
      automatisch-redis:
        condition: service_started

  automatisch-worker:
    image: automatischio/automatisch:0.15.0
    restart: unless-stopped
    environment:
      - APP_ENV=production
      - REDIS_HOST=automatisch-redis
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - POSTGRES_HOST=automatisch-postgres
      - POSTGRES_DATABASE=automatisch
      - POSTGRES_USERNAME=postgres
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
      - WEBHOOK_SECRET_KEY=${WEBHOOK_SECRET_KEY}
      - APP_SECRET_KEY=${APP_SECRET_KEY}
      - WORKER=true
    volumes:
      - storage:/automatisch/storage
    depends_on:
      - automatisch

  automatisch-postgres:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_DB=automatisch
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d automatisch"]
      interval: 10s
      timeout: 5s
      retries: 5

  automatisch-redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data

volumes:
  storage: {}
  postgres_data: {}
  redis_data: {}
