name: xpltd_promptlooper networks: promptlooper: driver: bridge ipam: config: - subnet: 172.33.0.0/24 services: promptlooper-db: image: postgres:16-alpine container_name: promptlooper-db restart: unless-stopped networks: - promptlooper ports: - "5434:5432" environment: POSTGRES_USER: promptlooper POSTGRES_PASSWORD: promptlooper POSTGRES_DB: promptlooper volumes: - /vmPool/r/services/promptlooper_db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U promptlooper"] interval: 10s timeout: 5s retries: 5 promptlooper-redis: image: redis:7-alpine container_name: promptlooper-redis restart: unless-stopped networks: - promptlooper volumes: - /vmPool/r/services/promptlooper_redis:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 promptlooper-api: build: context: . dockerfile: docker/Dockerfile target: api container_name: promptlooper-api restart: unless-stopped networks: - promptlooper ports: - "8401:8401" # MCP server environment: DATABASE_URL: postgresql://promptlooper:promptlooper@promptlooper-db:5432/promptlooper REDIS_URL: redis://promptlooper-redis:6379/0 JWT_SECRET: ${JWT_SECRET:-dev-secret-change-in-production} API_KEY: ${API_KEY:-} DEFAULT_ENDPOINT_URL: ${DEFAULT_ENDPOINT_URL:-} DEFAULT_ENDPOINT_KEY: ${DEFAULT_ENDPOINT_KEY:-} MAX_CONCURRENT_RUNS: ${MAX_CONCURRENT_RUNS:-4} MAX_TOKENS_PER_SWEEP: ${MAX_TOKENS_PER_SWEEP:-0} MCP_ENABLED: ${MCP_ENABLED:-true} MCP_PORT: "8401" depends_on: promptlooper-db: condition: service_healthy promptlooper-redis: condition: service_healthy promptlooper-worker: build: context: . dockerfile: docker/Dockerfile target: api container_name: promptlooper-worker restart: unless-stopped networks: - promptlooper command: celery -A worker:celery_app worker --loglevel=info --concurrency=${MAX_CONCURRENT_RUNS:-4} working_dir: /app/backend environment: DATABASE_URL: postgresql://promptlooper:promptlooper@promptlooper-db:5432/promptlooper REDIS_URL: redis://promptlooper-redis:6379/0 DEFAULT_ENDPOINT_URL: ${DEFAULT_ENDPOINT_URL:-} DEFAULT_ENDPOINT_KEY: ${DEFAULT_ENDPOINT_KEY:-} MAX_CONCURRENT_RUNS: ${MAX_CONCURRENT_RUNS:-4} depends_on: promptlooper-db: condition: service_healthy promptlooper-redis: condition: service_healthy promptlooper-web: build: context: . dockerfile: docker/Dockerfile target: web container_name: promptlooper-web restart: unless-stopped networks: - promptlooper ports: - "8400:80" depends_on: - promptlooper-api