# Per-client stack — ONE isolated static-site container per business client. # # Each client is its own Compose project (name: smb-client-), so they # start / stop / update / remove fully independently and never share state. # Booking is handled by the client's own Google Calendar Appointment Schedule # (no container), and leads/bookings flow into the shared CRM via the n8n # webhooks baked into the client's page — so this stack only serves the site. # # Don't edit this file per client. Copy the folder with ../new-client.sh, which # fills .env (CLIENT_SLUG, CLIENT_DOMAIN) and seeds site/. name: smb-client-${CLIENT_SLUG} services: site: image: nginx:1.27-alpine container_name: client-${CLIENT_SLUG} restart: unless-stopped volumes: - ./site:/usr/share/nginx/html:ro networks: [proxy] # shared with Caddy; reached as client-:80 mem_limit: 64m # static nginx idles at a few MB; cap keeps the 16 GB box safe logging: driver: json-file options: max-size: "5m" max-file: "3" networks: proxy: external: true