services: postgres: image: postgres:15-alpine@sha256:fe0737ba566a2c5b2a28f34433c0a423261900ec17b9bf7ad115e1aae7e57f1b restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-familygram} POSTGRES_USER: ${POSTGRES_USER:-familygram} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env} volumes: - postgres-data:/var/lib/postgresql/data ports: - "127.0.0.1:${POSTGRES_PORT:-5432}:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-familygram} -d ${POSTGRES_DB:-familygram}"] interval: 5s timeout: 5s retries: 20 minio: image: ghcr.io/coollabsio/minio@sha256:69b55a1c1c5dc285ce04db96689f5b2102317fc77a50680a1874ca6efd1c87f9 restart: unless-stopped command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:?Set MINIO_ROOT_USER in .env} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?Set MINIO_ROOT_PASSWORD in .env} volumes: - minio-data:/data ports: - "${MINIO_BIND_HOST:-127.0.0.1}:${MINIO_API_PORT:-9000}:9000" - "127.0.0.1:${MINIO_CONSOLE_PORT:-9001}:9001" app: build: . restart: unless-stopped depends_on: postgres: condition: service_healthy minio: condition: service_started environment: DATABASE_URL: postgresql://${POSTGRES_USER:-familygram}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-familygram} APP_URL: ${APP_URL:-http://localhost:3000} S3_ENDPOINT: http://minio:9000 S3_PUBLIC_ENDPOINT: ${S3_PUBLIC_ENDPOINT:-http://localhost:9000} S3_REGION: ${S3_REGION:-us-east-1} S3_ACCESS_KEY: ${MINIO_ROOT_USER} S3_SECRET_KEY: ${MINIO_ROOT_PASSWORD} S3_BUCKET: ${S3_BUCKET:-familygram} HEALTH_ALLOWED_ORIGIN: ${HEALTH_ALLOWED_ORIGIN:-} ports: - "${APP_BIND_HOST:-127.0.0.1}:${APP_PORT:-3000}:3000" healthcheck: test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/api/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"] interval: 10s timeout: 5s retries: 12 volumes: postgres-data: minio-data: