services: # ── Main website ───────────────────────────────────────────────────────────── main-site: build: ./main-site container_name: bpb-main ports: - "3052:3050" environment: NODE_ENV: production ADMIN_PASSWORD: ${MAIN_ADMIN_PASSWORD} volumes: - ./main-site/update.json:/usr/src/app/update.json restart: always depends_on: - gallery-backend # ── Photo gallery backend ───────────────────────────────────────────────────── gallery-backend: build: ./main-site/photo-gallery-app/backend container_name: bpb-gallery ports: - "5001:5000" environment: MONGO_URI: mongodb://mongodb:27017/photogallery WATERMARK_URL: http://watermarker:8000/watermark volumes: - ./main-site/photo-gallery-app/backend/uploads:/usr/src/app/uploads depends_on: - mongodb - watermarker restart: always # ── Watermarker ─────────────────────────────────────────────────────────────── watermarker: build: ./main-site/photo-gallery-app/watermarker container_name: bpb-watermarker ports: - "8000:8000" restart: always # ── MongoDB ─────────────────────────────────────────────────────────────────── mongodb: image: mongo:latest container_name: bpb-mongodb ports: - "27017:27017" volumes: - ./mongodb_data:/data/db restart: always # ── eStore (Next.js / Square) ───────────────────────────────────────────────── estore: build: ./estore container_name: bpb-estore ports: - "3000:3000" env_file: ./estore/.env restart: unless-stopped depends_on: - osrm healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:3000/api/catalog"] interval: 30s timeout: 10s retries: 3 # ── OSRM (routing engine) ───────────────────────────────────────────────────── osrm: image: osrm/osrm-backend container_name: bpb-osrm ports: - "5002:5000" volumes: - ./osrm/data:/data command: osrm-routed --algorithm mld /data/connecticut-latest.osrm restart: unless-stopped