promptlooper/docker-compose.yml
John Lightner fc2e4cd7d1 MAESTRO: Initialize repository with README, .gitignore, and project files
Add README.md with project description, quick-start instructions, and
AGPL-3.0 license badge. Add .gitignore for Python, Node, and Docker
artifacts. Include existing CLAUDE.md, spec, docker-compose.yml, and
env.example.
2026-04-07 01:39:18 -05:00

106 lines
3 KiB
YAML

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: ${POSTGRES_USER:-promptlooper}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}
POSTGRES_DB: ${POSTGRES_DB:-promptlooper}
volumes:
- /vmPool/r/services/promptlooper_db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-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+asyncpg://${POSTGRES_USER:-promptlooper}:${POSTGRES_PASSWORD}@promptlooper-db:5432/${POSTGRES_DB:-promptlooper}
REDIS_URL: redis://promptlooper-redis:6379/0
JWT_SECRET: ${JWT_SECRET:?Set JWT_SECRET in .env}
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 backend.worker:app worker --loglevel=info --concurrency=${MAX_CONCURRENT_RUNS:-4}
environment:
DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-promptlooper}:${POSTGRES_PASSWORD}@promptlooper-db:5432/${POSTGRES_DB:-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