services: # ── PocketBase ────────────────────────────────────────────────────────────── pocketbase: image: ghcr.io/muchobien/pocketbase:latest restart: unless-stopped ports: - '8090:8090' volumes: - pocketbase_data:/pb/pb_data - ./pb_hooks:/pb/pb_hooks healthcheck: test: ['CMD', 'wget', '-qO-', 'http://localhost:8090/api/health'] interval: 10s timeout: 5s retries: 5 # ── MinIO ─────────────────────────────────────────────────────────────────── minio: image: minio/minio:latest restart: unless-stopped command: server /data --console-address ':9001' ports: - '9000:9000' # S3 API - '9001:9001' # MinIO console environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: - minio_data:/data healthcheck: test: ['CMD', 'mc', 'ready', 'local'] interval: 10s timeout: 5s retries: 5 # ── MinIO bucket setup (one-shot) ─────────────────────────────────────────── minio_init: image: minio/mc:latest depends_on: minio: condition: service_healthy entrypoint: > /bin/sh -c " mc alias set local http://minio:9000 minioadmin minioadmin && mc mb --ignore-existing local/idconvert && mc anonymous set download local/idconvert && mc ilm rule add --expiry-days 1 local/idconvert " # ── Backend ───────────────────────────────────────────────────────────────── backend: build: context: ./backend dockerfile: Dockerfile restart: unless-stopped ports: - '8000:8000' environment: POCKETBASE_URL: http://pocketbase:8090 S3_ENDPOINT_URL: http://minio:9000 S3_BUCKET: idconvert S3_REGION: us-east-1 AWS_ACCESS_KEY_ID: minioadmin AWS_SECRET_ACCESS_KEY: minioadmin FRONTEND_ORIGIN: http://localhost:3000 STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY:-} STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET:-} POCKETBASE_ADMIN_TOKEN: ${POCKETBASE_ADMIN_TOKEN:-} depends_on: pocketbase: condition: service_healthy minio: condition: service_healthy healthcheck: test: ['CMD', 'wget', '-qO-', 'http://localhost:8000/health'] interval: 15s timeout: 5s retries: 5 # ── Frontend ───────────────────────────────────────────────────────────────── frontend: build: context: ./frontend dockerfile: Dockerfile restart: unless-stopped ports: - '3000:3000' environment: NUXT_PUBLIC_API_BASE: http://localhost:8000 NUXT_PUBLIC_POCKETBASE_URL: http://localhost:8090 NUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY: ${STRIPE_PUBLISHABLE_KEY:-} depends_on: backend: condition: service_healthy volumes: pocketbase_data: minio_data: