56 lines
1.9 KiB
YAML
56 lines
1.9 KiB
YAML
name: next-chair-marios
|
|
|
|
# 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/marios/compose.yaml --env-file stacks/marios/.env up -d
|
|
#
|
|
# `stacks/blake-heritage/compose.yaml` is the identical shape for the
|
|
# first 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-marios:
|
|
image: nextchair-app:latest
|
|
container_name: next-chair-marios
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
volumes:
|
|
- next-chair-media-marios:/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-marios:
|
|
name: next-chair-media-marios
|
|
|
|
networks:
|
|
next-chair-edge:
|
|
name: next-chair-edge
|
|
external: true
|