headscale-admin is a SvelteKit build with its asset base path hardcoded
to /admin, so the earlier Caddyfile root override (to serve it at /)
broke asset loading. Revert it and instead document serving the UI via
an NPM Custom Location (/admin) on the same headscale.example.com
proxy host, which also avoids CORS entirely since the browser sees one
origin for both the UI and the API it calls.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- config.yaml: migrate to current headscale config schema (database/dns
nested keys instead of legacy db_type/db_path/dns_config), add noise
private key path, prefixes, and a DERP map (required at startup)
- compose.yaml: bind-mount a fixed Caddyfile for headscale-ui so it
serves from /app/admin instead of 404ing at /app
- README: document NPM reverse proxy setup (websockets on, HTTP/2 off
to avoid breaking the ts2021 noise protocol handshake), split
Android/iOS vs laptop client instructions, add headscale-ui admin
panel setup with API key generation, switch CLI examples to
docker exec against the running container
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Existing content preserved and reordered to the canonical section order;
missing sections generated from each stack's compose data (ports, volumes,
env vars, image links). Fixes copy-paste errors in Dockhand sections
(qbittorrent pointed at archivebox; invokeai/thunderbird said SERVICENAME)
and persistant->persistent typos in gatus.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>