version: "3.9" services: # ─────────────────────── Databases & Caches ─────────────────────── postgres: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: postgres volumes: - postgres-data:/var/lib/postgresql/data networks: [backend] redis: image: redis:7-alpine restart: unless-stopped command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"] volumes: - redis-data:/data networks: [backend] minio: image: minio/minio:RELEASE.2024-04-18T19-09-19Z restart: unless-stopped environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} command: server /data --console-address ":9001" volumes: - minio-data:/data networks: [backend] # ─────────────────────── Medusa processes ─────────────────────── medusa-server: build: context: ./server dockerfile: Server.Dockerfile # path relative to repo root depends_on: [postgres, redis, minio] restart: unless-stopped environment: # Core DB / cache DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres?ssl_mode=disable REDIS_URL: redis://default:${REDIS_PASSWORD}@redis:6379/0 # S3 (MinIO) storage S3_ENDPOINT: http://minio:9000 S3_REGION: ${S3_REGION:-us-east-1} S3_BUCKET: ${S3_BUCKET} S3_ACCESS_KEY_ID: ${MINIO_ROOT_USER} S3_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD} # Medusa‑specific MEDUSA_BACKEND_URL: ${MEDUSA_BACKEND_URL:-http://localhost:9000} MEDUSA_WORKER_MODE: server DISABLE_MEDUSA_ADMIN: "false" COOKIE_SECRET: ${COOKIE_SECRET} JWT_SECRET: ${JWT_SECRET} # CORS etc. ADMIN_CORS: ${ADMIN_CORS} STORE_CORS: ${STORE_CORS} AUTH_CORS: ${AUTH_CORS} # Any other keys (Stripe, Resend, …) STRIPE_API_KEY: ${STRIPE_API_KEY} STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET} RESEND_API_KEY: ${RESEND_API_KEY} RESEND_FROM_EMAIL: ${RESEND_FROM_EMAIL} networks: [backend] medusa-worker: build: context: ./server dockerfile: Worker.Dockerfile depends_on: [postgres, redis, medusa-server] restart: unless-stopped environment: DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres?ssl_mode=disable REDIS_URL: redis://default:${REDIS_PASSWORD}@redis:6379/0 S3_ENDPOINT: http://minio:9000 S3_REGION: ${S3_REGION:-us-east-1} S3_BUCKET: ${S3_BUCKET} S3_ACCESS_KEY_ID: ${MINIO_ROOT_USER} S3_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD} MEDUSA_WORKER_MODE: worker DISABLE_MEDUSA_ADMIN: "true" networks: [backend] # ────────────────────────── Shared Stuff ────────────────────────── volumes: postgres-data: redis-data: minio-data: networks: backend: driver: bridge