The only description of how git.levineuwirth.org is deployed lived on the
VPS itself, which meant recovering the deployment required first recovering
the machine — or unpacking a backup tarball to read its own compose file.
It belongs with nginx/ and systemd/.
Recorded in the header rather than lost to shell history: that DOMAIN,
SSH_DOMAIN and ROOT_URL were placeholder text until today; that
FORGEJO__* variables reach app.ini on container recreation and not on
restart; that 3000 is bound to loopback on purpose; and that SSH on 2222,
while genuinely open on the host, is filtered by enough public networks to
be the convenience path rather than the dependable one.
Also removes the caddy container and its leftovers from that box (not
tracked here, but the reason belongs with this change): created at initial
setup in March, never started once — it wanted host ports 80 and 443,
which nginx already held. Its Caddyfile did exactly what nginx now does,
and its data directories were empty. It carried restart=unless-stopped
next to a stale compose backup, so the only thing it could still plausibly
do was win a race for 443 against the server actually serving the site.
NO_REPLY_ADDRESS is set here too, now that checking showed nothing depends
on the old value: the account does not hide its email and no address in the
database sits on a noreply domain, so there was no attribution to orphan.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SUGesXiMmACsLBTGG1xuEU