Implemented the deployment redesign. - Added Dockge-first-class stacks: - [stacks/infra/compose.yaml] - [stacks/caddy/compose.yaml] - Added reusable business template: [deploy/business-compose.yaml.template] - Added automated provisioning: [scripts/create-business.sh] - Added per-business database/user, secrets, media volume, private networks, and Caddy route generation. - Removed Traefik and manual business Compose files. - Updated environment templates, .gitignore, and deployment documentation in [README.md] Validation completed: - Docker Compose config passed for infra, Caddy, and generated business stacks. - Shell syntax validation passed. - Registry image tags containing / were tested. - No remaining Traefik or obsolete deployment references found.
This commit is contained in:
13 files changed
+289
-380
No files matched your search
@@ -1,63 +0,0 @@
|
||||
name: next-chair-blake-heritage
|
||||
|
||||
# One business's app container on the shared multi-business VPS setup —
|
||||
# see docker-compose.infra.yaml for the shared MySQL/Traefik this attaches
|
||||
# to, and that file's header for the exact one-time setup steps (create
|
||||
# this business's database, copy .env.business.example) needed before
|
||||
# this file can start.
|
||||
#
|
||||
# docker compose -f docker-compose.blake-heritage.yaml --env-file .env.business.blake-heritage up -d --build
|
||||
#
|
||||
# `docker-compose.marios.yaml` is the identical shape for the second
|
||||
# business — copy this file's pattern again for any future business.
|
||||
|
||||
services:
|
||||
next-chair-blake-heritage:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
# Builds the image fresh here. Once there are more than a couple of
|
||||
# businesses, it's worth building once (`docker build -t
|
||||
# nextchair-app:latest .`) and swapping this `build:` block for
|
||||
# `image: nextchair-app:latest` in every business's file instead, so
|
||||
# a code update doesn't mean rebuilding the identical image N times —
|
||||
# not necessary to start with.
|
||||
container_name: next-chair-blake-heritage
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env.business.blake-heritage
|
||||
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
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.blake-heritage.rule=Host(`${DOMAIN}`)"
|
||||
- "traefik.http.routers.blake-heritage.entrypoints=websecure"
|
||||
- "traefik.http.routers.blake-heritage.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.blake-heritage.loadbalancer.server.port=3000"
|
||||
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
|
||||
Reference in new issue
Block a user