name: next-chair-blake-heritage # One business's app container on the shared multi-business VPS setup — # see stacks/infra/compose.yaml for the shared MySQL/Caddy/Dockge this # attaches to, and that file's header for the exact one-time setup steps # (create this business's database, copy .env.business.example, add a # Caddy site file) needed before this file can start. # # docker compose -f stacks/blake-heritage/compose.yaml --env-file stacks/blake-heritage/.env up -d # # `stacks/marios/compose.yaml` is the identical shape for the second # business — this is also the shape the management UI (manager/) # generates for every new business it provisions. # # Uses the shared prebuilt image (see the repo root's README/Dockerfile — # `docker build -t nextchair-app:latest .` once per code update) rather # than building from source per business, so adding or updating a # business is just starting/recreating a container, not a rebuild. services: next-chair-blake-heritage: image: nextchair-app:latest container_name: next-chair-blake-heritage restart: unless-stopped env_file: - .env volumes: - next-chair-media-blake-heritage:/app/storage/media healthcheck: # No curl/wget in the node:22-alpine base image — a plain Node # request avoids adding a package just for this. See # src/app/api/health/route.ts: healthy as soon as the database is # reachable, even before installation completes. test: [ "CMD", "node", "-e", "require('http').get('http://localhost:3000/api/health', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))", ] interval: 10s timeout: 5s retries: 10 start_period: 20s networks: - next-chair-edge volumes: next-chair-media-blake-heritage: name: next-chair-media-blake-heritage networks: next-chair-edge: name: next-chair-edge external: true