diff --git a/docs/backlog.md b/docs/backlog.md index 7d1ee31..eaa5d3d 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -39,6 +39,75 @@ historia incydentów, out-of-band watchdog. ## Aktywne +### Gotchas (z 2026-06-30 — migracja kapala.org → Cloudflare/wildcard) + +**Data**: 2026-06-30 +**Źródło**: sesja 2026-06-30 (`docs/sessions/2026-06-30-kapala-cloudflare-wildcard-mesh.md`) + +- **NPM custom WS config + Websockets Support:** NIE wklejać + `proxy_http_version 1.1;` do Advanced gdy Websockets Support = ON. + NPM dodaje tę dyrektywę sam → duplikat → nginx -t failuje → plik + proxy_host/.conf się NIE generuje → "unrecognized name" mimo + dobrego certu. Objaw mylący (wygląda jak problem certu/DNS). + Diagnoza: `strings /data/database.sqlite | grep ` → pole nginx_err. + +- **Cloudflare auto-proxy na import:** CF proxuje A/CNAME przy dodaniu strefy. + DKIM CNAME (fm1/2/3._domainkey) proxied = zepsuty podpis maila. + Zawsze przełączyć na DNS only (szara chmurka) przed aktywacją. + Reserved/CGNAT IP (Tailscale 100.x) CF wymusza DNS only automatycznie. + +--- + +### Migracja okit.pl → Cloudflare (większy projekt, firmowa domena) + +**Data**: 2026-06-30 +**Źródło**: sesja 2026-06-30 (`docs/sessions/2026-06-30-kapala-cloudflare-wildcard-mesh.md`) +Naprawi wszystkie wygasłe certy okit.pl naraz (HTTP-01 failuje przy mesh DNS): +ap, audiobooks, code-server, dysk, forgejo, ha-embed, hagc, ngpm, node-red, +okit.pl, pihole, ha.okit.pl. Wzorzec jak kapala.org: NS na CF, wildcard *.okit.pl +przez DNS-01, przepiąć hosty. UWAGA: okit.pl ma usługi publiczne (foty) — +rozdzielić mesh-only od publicznych. Ostrożnie — firmowa domena. + +--- + +### foty.kapala.org renew failuje (#47, expired 2026-06-19, HTTP-01) + +**Data**: 2026-06-30 +**Źródło**: sesja 2026-06-30 (`docs/sessions/2026-06-30-kapala-cloudflare-wildcard-mesh.md`) +Foty są PUBLICZNE celowo (zewn. dostęp za hasłem NPM) — port 80 powinien +być dostępny, więc HTTP-01 powinno działać. Sprawdzić czemu failuje +(DNS foty wskazuje na zły IP? port 80 zablokowany?). NIE przenosić na mesh. + +--- + +### Cleanup po błędnej ścieżce HA-Tailscale-addon (z 2026-06-29) + +**Data**: 2026-06-30 +**Źródło**: sesja 2026-06-30 (`docs/sessions/2026-06-30-kapala-cloudflare-wildcard-mesh.md`) +- ha-ken: Stop + Uninstall add-on Tailscale +- Tailscale admin: usunąć node ha-ken (100.98.128.40) +- 42.pl/okit.pl: usunąć rekord ha-ken → 87.205.110.38 (jeśli jest) + +--- + +### Stary ha.okit.pl (cert wygasł 6/28, teraz "Not Used") + +**Data**: 2026-06-30 +**Źródło**: sesja 2026-06-30 (`docs/sessions/2026-06-30-kapala-cloudflare-wildcard-mesh.md`) +Zostawić lub usunąć proxy host + DNS. Niepilne (martwy, nie szkodzi). + +--- + +### Stopniowa migracja usług domowych okit.pl → kapala.org (mesh-only) + +**Data**: 2026-06-30 +**Źródło**: sesja 2026-06-30 (`docs/sessions/2026-06-30-kapala-cloudflare-wildcard-mesh.md`) +dysk, audiobooks, budget, code-server, home, ha-embed, node-red... wg wzorca +migracji usługi na kapala.org (patrz sesja: CF rekord A → 100.108.208.3 DNS only, +NPM proxy host z wildcard *.kapala.org, Advanced PUSTE, weryfikacja grep+curl). + +--- + ### `deploy-node.sh` nie reloaduje config-driven serwisów (cicha rozbieżność deploy↔config) **Data**: 2026-06-26 diff --git a/docs/sessions/2026-06-30-kapala-cloudflare-wildcard-mesh.md b/docs/sessions/2026-06-30-kapala-cloudflare-wildcard-mesh.md new file mode 100644 index 0000000..f3539d6 --- /dev/null +++ b/docs/sessions/2026-06-30-kapala-cloudflare-wildcard-mesh.md @@ -0,0 +1,57 @@ +# 2026-06-30 — Migracja kapala.org → Cloudflare + wildcard DNS-01, HA i Immich na mesh + +## Cel +Trwałe rozwiązanie problemu zdalnego dostępu do HA (i innych usług domowych) +przez Tailscale. Odejście od HTTP-01 per-host (wygasające certy przy mesh DNS) +na rzecz wildcard cert przez DNS-01. + +## Co zrobiono + +### Migracja DNS kapala.org: 42.pl → Cloudflare +- Eksport strefy z 42.pl (AXFR, 13 rekordów) jako siatka bezpieczeństwa +- Dodanie kapala.org do Cloudflare (Free), import + ręczne uzupełnienie +- KRYTYCZNE: CF auto-proxuje rekordy na import — wszystkie A/CNAME + przełączone na "DNS only" (szara chmurka). DKIM CNAME proxied = zepsuty + podpis maila. Wszystkie 9 rekordów zweryfikowane 1:1 z eksportem. +- NS w VipoWer: fns1/fns2.42.pl → dom.ns.cloudflare.com / katja.ns.cloudflare.com +- Propagacja ~45 min. Mail (Fastmail MX/DKIM/SPF) bez przerwy przez całą migrację. + +### Wildcard cert DNS-01 +- CF API token (Zone:DNS:Edit, scope kapala.org) +- NPM → SSL → Let's Encrypt via DNS → Cloudflare → *.kapala.org + kapala.org +- Cert #49 (npm-49) wydany, auto-renew przez DNS-01 potwierdzony (renew zadziałał) +- Expires 2026-09-28, odnawia się sam + +### Usługi przeniesione na kapala.org (mesh-only) +- ha.kapala.org → 192.168.31.7:8123 (cert wildcard, WS ON) +- immich.kapala.org → 192.168.31.5:2283 (cert wildcard, WS ON) +- DNS w CF: rekordy A → 100.108.208.3 (Tailscale PIHA, DNS only/reserved IP) + +## Bugi rozwiązane + +### "unrecognized name" na ha.kapala.org mimo dobrego certu (root cause) +Objaw: cert OK (npm-49), DNS OK, host "Online" w UI, ale curl → TLS +unrecognized name. Plik proxy_host/4.conf nie istniał. +Przyczyna: custom Advanced config zawierał `proxy_http_version 1.1;`, +a NPM dodaje tę dyrektywę SAM przy Websockets Support = ON. +Duplikat → `nginx -t` odrzucał cały 4.conf → plik się nie generował. +Diagnoza przez `strings /data/database.sqlite | grep kapala`: + nginx_err: "proxy_http_version directive is duplicate in 4.conf:68" +Fix: usunięcie `proxy_http_version 1.1;` z Advanced. Plik się wygenerował. + +### immich.okit.pl 403 Forbidden (red herring → nie ruszany) +403 od openresty = Access List "Local" blokuje mesh, NIE cert (cert żył do 9/28). +Decyzja: zamiast zmieniać Access List — przeniesiono na immich.kapala.org +(mesh-only, wildcard cert). immich.okit.pl zostaje do migracji okit.pl. + +## Wzorzec migracji usługi na kapala.org (mesh) +1. CF: rekord A → 100.108.208.3 (DNS only) +2. NPM proxy host: forward wewn. IP:port, Access List = Publicly Accessible, + cert *.kapala.org, Advanced PUSTE (zero proxy_http_version!) +3. Weryfikacja: grep conf (plik istnieje) + curl (cert *.kapala.org + 200/302) +4. Zmiana URL w apce/kliencie + +## Stan końcowy +- ha.kapala.org, immich.kapala.org — działają przez mesh, zielona kłódka +- Mail kapala.org (Fastmail) — bez przerwy, MX/DKIM/SPF OK +- Wildcard *.kapala.org — auto-renew DNS-01 potwierdzony diff --git a/inventory/topology.yaml b/inventory/topology.yaml index 5cd162d..6632260 100644 --- a/inventory/topology.yaml +++ b/inventory/topology.yaml @@ -6,6 +6,31 @@ deployment: mode: pull orchestrator: saturn +# Ingress dla usług domowych przez NPM @ PIHA + wildcard cert kapala.org. +# Od 2026-06-30. Poprzednia ścieżka (add-on Tailscale na ha-ken) PORZUCONA. +# DNS kapala.org: Cloudflare, wildcard *.kapala.org via DNS-01 (auto-renew). +# Mail: Fastmail (MX/DKIM/SPF na CF, DNS only). +# Subdomeny mesh: A → 100.108.208.3 (Tailscale PIHA), DNS only. +ingress: + dns_provider: cloudflare # kapala.org od 2026-06-30 + wildcard_cert: + domain: "*.kapala.org" + method: dns-01 # Cloudflare DNS-01, auto-renew + proxy: npm-piha # Nginx Proxy Manager @ PIHA + services: + home_assistant: + host: 192.168.31.7 + port: 8123 + ingress: ha.kapala.org # NPM @ PIHA, cert *.kapala.org, mesh-only + access: tailscale # 100.108.208.3 + cert: wildcard-kapala # DNS-01 Cloudflare, auto-renew + immich: + host: 192.168.31.5 + port: 2283 + ingress: immich.kapala.org # NPM @ PIHA, cert *.kapala.org, mesh-only + access: tailscale + cert: wildcard-kapala + nodes: saturn: