156166b4e5
- deploy/booking: shared Easy!Appointments stack with brand-matched wizard (flatpickr recolor, single-tenant provider hide, iframe auto-fit height reporter) - deploy/clients: per-client isolated nginx compose stacks with _template scaffold, new-client.sh, and happynails live site - deploy/backup: smb-db backup script - n8n: booking-sync workflow; onboarding tweaks - playbooks: lead-to-customer lifecycle + outreach - templates: nail-studio landing previews - backoffice: app/db/init/compose updates Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
31 lines
1.1 KiB
YAML
31 lines
1.1 KiB
YAML
# Per-client stack — ONE isolated static-site container per business client.
|
|
#
|
|
# Each client is its own Compose project (name: smb-client-<slug>), 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-<slug>: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
|