Caddy AutoGen
Caddy AutoGen bygger Caddy-routes "on the fly" från körande containers i ZimaOS/CasaOS.
Arkitektur:
discovery-agentläser Docker metadata viasocket-proxy.- Endast explicit opt-in exponeras (
LABEL_CADDY_ENABLE=true). - Caddy config laddas dynamiskt via Caddy Admin API (
POST /load). - TLS sker med Let's Encrypt DNS-01 via Cloudflare.
Säkerhetsmodell
- Fail-closed default: om
REQUIRE_CLOUDFLARE=trueoch token saknas laddas ingen ny extern config. - Ingen auto-exponering av alla portar.
- Endast HTTP(S)-upstreams stöds i v1.
- Docker socket exponeras inte direkt till agenten, endast via
socket-proxymed begränsade endpoint-flaggor.
Miljövariabler (appnivå)
BASE_DOMAIN(krävs), t.ex.home.example.comCLOUDFLARE_API_TOKEN(krävs i fail-closed läge)WILDCARD_DOMAIN(valfri), t.ex.home.example.comREQUIRE_CLOUDFLARE(defaulttrue)ALLOW_INTERNAL_TLS_FALLBACK(defaultfalse)POLL_SECONDS(default15)
Cloudflare-token bör vara scoped till minsta möjliga rättigheter:
Zone.Zone:ReadZone.DNS:Edit
Miljövariabler på målcontainers (opt-in)
Sätt dessa på varje container som ska exponeras:
LABEL_CADDY_ENABLE=trueLABEL_CADDY_TARGET_PORT=<container_tcp_port>
Valfria:
LABEL_CADDY_HOST=<subdomain-or-fqdn>LABEL_CADDY_SCHEME=http|httpsLABEL_CADDY_PATH=/LABEL_CADDY_HEALTH_URI=/health
Exempel (Frigate)
För Frigate med portar 5000, 8554, 8555:
- Sätt
LABEL_CADDY_ENABLE=true - Sätt
LABEL_CADDY_TARGET_PORT=5000
Då skapas endpoint bara för web UI-porten (5000), inte för RTSP/WebRTC-portarna.
Konkreta env-vars att sätta på Frigate-containern:
LABEL_CADDY_ENABLE=true
LABEL_CADDY_TARGET_PORT=5000
LABEL_CADDY_HOST=frigate
LABEL_CADDY_SCHEME=http
LABEL_CADDY_PATH=/
Lokal DNS för split-horizon
Rekommenderad stack: AdGuard Home.
- Skapa lokala records/rewrite för
*.BASE_DOMAINochBASE_DOMAINmot ZimaOS-serverns LAN-IP. - Behåll samma publika zon i Cloudflare för DNS-01-validering.
Alternativ som fungerar bra i ZimaOS:
- Technitium DNS (mer avancerad DNS-kontroll)
- Pi-hole (+ ev. Unbound)
Säkerhetsavvikelser
Följande högriskdetaljer är medvetna designval:
- Använder Docker API via
socket-proxy(inte direkt socket i discovery-agent). - Caddy måste exponera 80/443 för ingress.
Riskreduktion:
- socket-proxy endpoint-whitelist (
CONTAINERS,EVENTS,INFO,NETWORKS,PING,VERSION) POST=0no-new-privileges- read-only där möjligt
Integrationstester
Kör lokala integrationstester för discovery-agenten:
./Apps/caddy-autogen/tests/run_integration_tests.sh
Testerna mockar Docker API-svar och Caddy /load-anrop och verifierar:
- opt-in-regler (endast markerade containers exponeras),
- säker portselektionslogik (inga media/UDP-portar routas av misstag),
- fail-closed beteende när Cloudflare-token saknas.
För verifiering i riktig ZimaOS-miljö, se HOW_TO_VERIFY.md i samma mapp.