100 lines
3.4 KiB
YAML
100 lines
3.4 KiB
YAML
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:
|