name: fulfillment-review services: postgres: image: postgres:17.10-alpine3.23 restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:?POSTGRES_DB is required} POSTGRES_USER: ${POSTGRES_USER:?POSTGRES_USER is required} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required} volumes: - postgres-data:/var/lib/postgresql/data ports: - "127.0.0.1:5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 3s retries: 10 start_period: 5s app: build: . restart: unless-stopped depends_on: postgres: condition: service_healthy environment: DATABASE_URL: ${DATABASE_URL:?DATABASE_URL is required} HOST: 0.0.0.0 PORT: 3000 ALLOWED_HOSTS: ${ALLOWED_HOSTS:-localhost,127.0.0.1} ALLOWED_ORIGIN_HOSTS: ${ALLOWED_ORIGIN_HOSTS:-localhost,127.0.0.1} LOG_LEVEL: ${LOG_LEVEL:-info} ports: - "127.0.0.1:3000:3000" read_only: true tmpfs: - /tmp:size=16m,mode=1777 security_opt: - no-new-privileges:true cap_drop: - ALL volumes: postgres-data: