--- okf: "0.1" type: runbook visibility: private status: active updated: 2026-07-09 links: - ../services/gokapi.md - ../decisions/gokapi-storage-e2e-siec.md --- # Gokapi — cutover checklist ## Cutover checklist (przy deployu — NIE teraz, ten PR to tylko config) 1. `git pull` na VPS. 2. `mkdir -p /opt/homelab/data/gokapi/{data,config}` na VPS. 3. `cp services/gokapi/env.example services/gokapi/.env`, potwierdzić `TAILSCALE_BIND_IP` (`tailscale ip -4` na żywym hoście — powinno być `100.95.58.48`). 4. **Cloudflare**: rekord A `share.okit.pl` → `135.181.153.108`, **DNS only** (szara chmurka, bez proxy Cloudflare — spójne z resztą wpisów okit.pl/kapala.org w tym repo). 5. **Wildcard `*.okit.pl` na npm@VPS** — **NAJPIERW SPRAWDZIĆ, czy już istnieje**. Kontekst: wildcard `*.okit.pl` DNS-01 jest już zrobiony na `npm@PIHA` (cert #51, ważny do 2026-10-05, token Cloudflare `npm-dns01-all-zones` — Zone:DNS:Edit, All zones). Sesja `docs/sessions/2026-07-07-okit-wildcard.md` zostawiła to jako TODO: *"Drugi npm na VPS (outline/joplin/agents tam) — analogiczny wildcard `*.okit.pl`?"* — to jest ten moment, żeby to sprawdzić/zrobić. Jeśli brak: npm@VPS → SSL → New Certificate → Let's Encrypt → domeny `*.okit.pl` + `okit.pl` → DNS Challenge → Cloudflare → wkleić token `npm-dns01-all-zones` (ten sam token co PIHA, All-zones więc obejmuje okit.pl). Pułapka z poprzedniej sesji: literówka `.okit.pl` zamiast `okit.pl` w drugim polu dawała Internal Error. 6. **vhost w npm@VPS**: nowy Proxy Host, domena `share.okit.pl`, Forward Hostname/IP = `100.95.58.48` (Tailscale IP VPS, TAILSCALE_BIND_IP), port `53842`, SSL = cert wildcard `*.okit.pl` z kroku 5, Force SSL + HTTP/2. 7. `docker compose -f services/gokapi/docker-compose.yml up -d`. 8. Otworzyć `https://share.okit.pl/setup` i przejść wizard: - Database: SQLite (domyślnie, wbudowane). - Webserver: potwierdzić public URL `https://share.okit.pl`. - Authentication: Username/Password, ustawić **prawdziwe** hasło admina (nie ma tu env vara — to jedyny moment, żeby to zrobić w UI). - Storage: **Local** (nie S3 — decyzja Oskara). - Encryption: **Level 3 / End-to-End** (decyzja Oskara — E2E ON). 9. Przy każdym uploadzie: ustawiać rozsądny expiry/limit pobrań ręcznie (patrz sekcja Storage wyżej — brak globalnego defaultu w Gokapi). 10. `./healthcheck.sh` z hosta VPS, potem z zewnątrz: `curl -I https://share.okit.pl/`.