ťařina
Obsah Soubory
markdown

Caddy.md

4.3 kB 197 řádků Změněno Zobrazit na GitHubu Stáhnout
markdown
# Caddy Reverse proxy, která vyřídí HTTPS sama a bez konfigurace. Pro homelab je to nejrozumnější volba a stránka o ní je krátká, protože není o čem psát. ## Minimální konfigurace `Caddyfile`: ```nas.example.cz {    reverse_proxy 127.0.0.1:5000}``` To je celé. Caddy si při startu vyžádá certifikát od Let's Encrypt, nastaví přesměrování z HTTP na HTTPS, poskládá správný řetěz certifikátů, nastaví hlavičky `X-Forwarded-*` a zapne WebSockety. Srovnej to s ekvivalentem v [nginxu](Nginx). To je ten důvod. ## Víc služeb ```nas.example.cz {    reverse_proxy 127.0.0.1:5000} foto.example.cz {    reverse_proxy 127.0.0.1:2283    request_body {        max_size 50GB    }} home.example.cz {    reverse_proxy 127.0.0.1:8123} git.example.cz {    reverse_proxy 127.0.0.1:3000}``` ## Docker Compose ```yamlservices:  caddy:    image: caddy:2    restart: unless-stopped    ports:      - "80:80"      - "443:443"      - "443:443/udp"     # HTTP/3    volumes:      - ./Caddyfile:/etc/caddy/Caddyfile:ro      - caddy_data:/data      - caddy_config:/config    networks: [web] volumes:  caddy_data:  caddy_config:``` **Svazek `caddy_data` musí být trvalý.** Jsou v něm certifikáty. Když ho ztratíš při každém restartu, budeš si o certifikáty žádat pořád dokola a Let's Encrypt tě po pár dnech omezí. Viz [certifikáty](Certifikaty-a-Lets-Encrypt). V Compose se na ostatní služby odkazuješ jménem kontejneru: ```foto.example.cz {    reverse_proxy immich:2283}``` Souvislosti v [sítích v Dockeru](Site-v-Dockeru). ## Užitečné věci **Přesměrování:** ```example.cz {    redir https://www.example.cz{uri} permanent}``` **Statické soubory:** ```example.cz {    root * /var/www/example    file_server    encode gzip zstd}``` **Bezpečnostní hlavičky:** ```nas.example.cz {    reverse_proxy 127.0.0.1:5000    header {        Strict-Transport-Security "max-age=31536000"        X-Content-Type-Options nosniff        X-Frame-Options SAMEORIGIN        -Server    }}``` To `-Server` hlavičku odstraní. **Omezení podle IP:** ```proxmox.example.cz {    @nepovolene not remote_ip 192.168.1.0/24 10.10.0.0/24    respond @nepovolene "Nope" 403    reverse_proxy 127.0.0.1:8006}``` **Základní přihlášení:** ```tajne.example.cz {    basic_auth {        martin $2a$14$hashhashhash    }    reverse_proxy 127.0.0.1:9000}``` Hash vygeneruješ přes `caddy hash-password`. **Vnitřní služba s vlastním certifikátem:** ```router.doma {    tls internal    reverse_proxy 192.168.1.1}``` `tls internal` vytvoří vlastní certifikační autoritu. Pro vnitřní služby, kde nemáš veřejnou doménu. Kořenový certifikát musíš rozvézt na zařízení, jinak budou hlásit varování dál — na místním stroji stačí `caddy trust`, jinde je to ruční práce. Souvislosti a omezení ve [vlastní certifikační autoritě](Vlastni-certifikacni-autorita). ## Wildcard certifikát Pro `*.example.cz` potřebuješ DNS-01 ověření, které vyžaduje sestavení Caddy s pluginem pro tvého DNS poskytovatele: ```dockerfileFROM caddy:2-builder AS builderRUN xcaddy build --with github.com/caddy-dns/cloudflare FROM caddy:2COPY --from=builder /usr/bin/caddy /usr/bin/caddy``` ```*.example.cz {    tls {        dns cloudflare {env.CF_API_TOKEN}    }    @nas host nas.example.cz    handle @nas {        reverse_proxy 127.0.0.1:5000    }    @foto host foto.example.cz    handle @foto {        reverse_proxy 127.0.0.1:2283    }}``` Podrobněji o rozdílu mezi HTTP-01 a DNS-01 v [certifikátech](Certifikaty-a-Lets-Encrypt). ## Diagnostika ```bashcaddy validate --config /etc/caddy/Caddyfilecaddy fmt --overwrite /etc/caddy/Caddyfilesystemctl reload caddyjournalctl -u caddy -fdocker compose logs -f caddy``` | Problém | Příčina ||---|---|| Certifikát se nevydá | port 80 není dostupný zvenku, nebo DNS nesměřuje sem || `502` | služba za proxy neběží, nebo špatné jméno kontejneru || Po restartu nový certifikát | svazek `/data` není trvalý || Wildcard nefunguje | chybí DNS plugin, HTTP-01 wildcard neumí | ## Kdy Caddy nestačí Když potřebuješ jemné ladění výkonu, exotické moduly, nebo když už máš nginx konfiguraci, kterou nechceš přepisovat. Pro všechno ostatní v homelabu je Caddy méně práce a méně chyb.