# Application-owned local infrastructure: Postgres, MinIO, Qdrant. # # Intentionally separate from docker-compose.langfuse.yml (different service # names, volumes, and ports). Run alone for app development, or combine with # Langfuse: # # docker compose \ # -f docker-compose.yml \ # -f docker-compose.langfuse.yml \ # --env-file .env \ # --env-file .env.langfuse \ # up -d # # Do not use this compose stack as-is for production. services: app-postgres: image: docker.io/postgres:17 restart: always environment: POSTGRES_USER: ${POSTGRES_USER:-chatbot} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-chatbot} POSTGRES_DB: ${POSTGRES_DB:-chatbot} ports: - 127.0.0.1:${POSTGRES_PORT:-5433}:5432 volumes: - app_postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-chatbot}"] interval: 3s timeout: 3s retries: 10 app-minio: image: cgr.dev/chainguard/minio restart: always entrypoint: sh command: -c 'mkdir -p /data/${MINIO_BUCKET:-chatbot-source-files} && minio server --address ":9000" --console-address ":9001" /data' environment: MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-chatbot} MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:-chatbot-secret} ports: - 127.0.0.1:9100:9000 - 127.0.0.1:9101:9001 volumes: - app_minio_data:/data healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 1s timeout: 5s retries: 5 start_period: 1s app-qdrant: image: docker.io/qdrant/qdrant restart: always ports: - 127.0.0.1:6343:6333 - 127.0.0.1:6344:6334 volumes: - app_qdrant_data:/qdrant/storage healthcheck: test: ["CMD-SHELL", "bash -c '/dev/null || exit 1"] interval: 3s timeout: 3s retries: 10 start_period: 3s volumes: app_postgres_data: driver: local app_minio_data: driver: local app_qdrant_data: driver: local