headscale: fix config schema, DERP map, and UI routing; document setup

- 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>
This commit is contained in:
code
2026-09-18 16:09:00 +00:00
co-authored by Claude Sonnet 5
parent 454039fd18
commit 151e6b5aad
4 changed files with 121 additions and 23 deletions
+25 -4
View File
@@ -1,12 +1,33 @@
server_url: https://headscale.example.com
listen_addr: 0.0.0.0:8080
db_type: sqlite3
db_path: /var/lib/headscale/db.sqlite
noise:
private_key_path: /var/lib/headscale/noise_private.key
database:
type: sqlite
sqlite:
path: /var/lib/headscale/db.sqlite
prefixes:
v4: 100.64.0.0/10
v6: fd7a:115c:a1e0::/48
derp:
server:
enabled: false
urls:
- https://controlplane.tailscale.com/derpmap/default
auto_update_enabled: true
update_frequency: 24h
log:
level: info
dns_config:
dns:
override_local_dns: true
base_domain: tailnet.local
base_domain: tailnet.local
nameservers:
global:
- 1.1.1.1
- 8.8.8.8