# This compose file is for a single-host development/integration environment. # Production deployment must use the approved platform pipeline and secret manager. version: "3.8" services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: ${POSTGRES_USER:?POSTGRES_USER must be set} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set} POSTGRES_DB: ${POSTGRES_DB:-qiji} ports: - "127.0.0.1:5432:5432" volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] interval: 5s timeout: 5s retries: 12 minio: image: ${MINIO_IMAGE:?MINIO_IMAGE must be a pinned MinIO version or digest} command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:?MINIO_ROOT_USER must be set} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?MINIO_ROOT_PASSWORD must be set} ports: - "127.0.0.1:9000:9000" - "127.0.0.1:9001:9001" volumes: - miniodata:/data backend: build: ./backend ports: - "127.0.0.1:8000:8000" environment: ENVIRONMENT: development DEBUG: "false" SECRET_KEY: ${SECRET_KEY:?SECRET_KEY must be set} DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:?POSTGRES_USER must be set}:${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set}@postgres:5432/${POSTGRES_DB:-qiji} MINIO_ENDPOINT: minio:9000 MINIO_ACCESS_KEY: ${MINIO_ROOT_USER:?MINIO_ROOT_USER must be set} MINIO_SECRET_KEY: ${MINIO_ROOT_PASSWORD:?MINIO_ROOT_PASSWORD must be set} MINIO_BUCKET: qiji-photos MINIO_SECURE: "false" depends_on: postgres: condition: service_healthy minio: condition: service_started command: sh -c "alembic upgrade head && exec uvicorn app.main:app --host 0.0.0.0 --port 8000" volumes: pgdata: miniodata: