All checks were successful
CD / Build and push images (push) Successful in 1m7s
CD / Deploy to Test (push) Successful in 10s
CD / Smoke tests against Test (push) Successful in 1m8s
CD / Promote to Int (push) Successful in 10s
CI / Lint, typecheck, test (push) Successful in 3m13s
CI / Build container images (push) Has been skipped
CI / Auth e2e pack (push) Successful in 5m18s
CI / Import/export fidelity gate (push) Successful in 46s
docs/self-hosting/README.md is the complete operator contract: install from the two reference files, first-run wizard walkthrough, update procedure with the one-release downgrade window, backup/restore with the sidecar, readyz-based troubleshooting (incl. the classic proxy/WebSocket and APP_BASE_URL/CSRF mistakes), and a build-from-source note; linked from the repository README; English-only by documented decision. The reference compose gains a `caddy` profile (new Caddyfile) that publishes 80/443 and terminates TLS via Let's Encrypt for $DOMAIN — localhost uses Caddy's internal CA for smoke tests. deploy/self-hosting-verify.sh scripts the clean-machine test: a fresh directory with only the published files boots to the wizard answering over TLS, then removes itself; verified green on the stage host. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
22 lines
520 B
Caddyfile
22 lines
520 B
Caddyfile
# Ingress for the optional `caddy` compose profile (issue #88).
|
|
# $DOMAIN comes from .env; a real domain gets automatic Let's Encrypt
|
|
# certificates (ports 80+443 must be reachable from the internet), the
|
|
# `localhost` default uses Caddy's internal CA. Routing mirrors
|
|
# deployment.md: /api → api, /collab (WebSocket) → collab, rest → web.
|
|
|
|
{$DOMAIN:localhost} {
|
|
encode gzip
|
|
|
|
handle /api/* {
|
|
reverse_proxy api:3000
|
|
}
|
|
|
|
handle /collab* {
|
|
reverse_proxy collab:3000
|
|
}
|
|
|
|
handle {
|
|
reverse_proxy web:8080
|
|
}
|
|
}
|