buildmymcpserver/infra/traefik/dynamic.yml
Marco Sadjadi 8a7ffe673d feat(deploy): production Dockerfiles, compose stack, and runbook
- Multi-stage Dockerfiles for web/api/generator (pnpm workspace install,
  tsx runtime — workspace packages are raw TS, same model as runner-template).
- docker-compose.prod.yml: postgres + redis + the three app services.
  api/generator/web use host networking so the generator's host-port probe
  is correct and every service shares one address space; api + generator
  mount the Docker socket. Binds nothing on 80/443 — safe beside other apps.
- Optional Traefik reverse proxy in infra/traefik/ (heavily gated — only if
  the box has no existing proxy).
- .env.production.example, .dockerignore, DEPLOY.md (Cloudflare zone, GoDaddy
  nameserver switch, server deploy, Google Cloud Console OAuth app).
- api/generator `start` now runs via tsx; `node dist/index.js` could never
  resolve the raw-TS workspace imports.

All three images verified building clean; the API container boots under tsx.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 00:37:02 +02:00

33 lines
770 B
YAML

# Traefik file-provider routes. The app stack uses host networking, so it has
# no Docker labels for Traefik to discover — routes are declared statically here.
# Targets are loopback ports owned by docker-compose.prod.yml.
http:
routers:
bmm-web:
rule: "Host(`buildmymcp.com`) || Host(`www.buildmymcp.com`)"
entryPoints:
- websecure
service: bmm-web
tls:
certResolver: le
bmm-api:
rule: "Host(`api.buildmymcp.com`)"
entryPoints:
- websecure
service: bmm-api
tls:
certResolver: le
services:
bmm-web:
loadBalancer:
servers:
- url: "http://127.0.0.1:3001"
bmm-api:
loadBalancer:
servers:
- url: "http://127.0.0.1:4000"