docs(kb-site): przepisz nieaktualne kb.okit.pl na kb-e2a24af3.okit.pl
Dociagniecie do zmiany DEFAULT_BASE_URL z 24afb49 — po niej repo w szesciu
miejscach dalej podawalo stary adres.
- kb/runbooks/kb-site-deploy.md: wszystkie wystapienia + rekord Cloudflare
(Name: kb -> kb-e2a24af3). Runbook jest visibility: private, wiec slug
moze stac wprost.
- services/kb-site/{README.md,service.yaml,env.example,docker-compose.yml}
- hosts/piha/services.yaml: komentarz przy exposure
kb/services/kb-site.md swiadomie nietkniety — dokument publiczny, slug tam
nie wchodzi (opisuje adres jako "non-obvious subdomain").
check_okf.py exit 0, gen_pages.py --check exit 0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
db81cb15d3
commit
67e49a0952
|
|
@ -168,7 +168,7 @@ services:
|
|||
kb-site:
|
||||
role: static-html-host # public KB slice generated by scripts/kb/gen_pages.py
|
||||
deployment_model: docker-compose
|
||||
exposure: public # via npm@PIHA vhost kb.okit.pl; container binds LAN :8250
|
||||
exposure: public # via npm@PIHA vhost kb-e2a24af3.okit.pl; container binds LAN :8250
|
||||
offline_required: false
|
||||
depends_on:
|
||||
local: []
|
||||
|
|
|
|||
|
|
@ -3,17 +3,17 @@ okf: "0.1"
|
|||
type: runbook
|
||||
visibility: private
|
||||
status: active
|
||||
updated: 2026-08-04
|
||||
updated: 2026-08-05
|
||||
links:
|
||||
- ../services/kb-site.md
|
||||
- ./npm-api.md
|
||||
- ../phases/okit-cloudflare.md
|
||||
---
|
||||
|
||||
# kb-site — deploy, publikacja treści, ingress (kb.okit.pl)
|
||||
# kb-site — deploy, publikacja treści, ingress (kb-e2a24af3.okit.pl)
|
||||
|
||||
Serwis: `services/kb-site/` (nginx:alpine na PIHA, host port **8250**).
|
||||
Generator: `scripts/kb/gen_pages.py`. Publiczny adres: `https://kb.okit.pl`.
|
||||
Generator: `scripts/kb/gen_pages.py`. Publiczny adres: `https://kb-e2a24af3.okit.pl`.
|
||||
|
||||
Kolejność ma znaczenie: **DNS → NPM host → cert**. Certyfikat Let's Encrypt
|
||||
leci challenge'em HTTP-01, więc rekord A musi już wskazywać na łącze domowe,
|
||||
|
|
@ -57,7 +57,7 @@ docker volume ls | grep kb-site # kb-site_kb-site_content
|
|||
Generujemy w checkoucie repo, na węźle z którego pracujesz — nie na PIHA.
|
||||
|
||||
```bash
|
||||
python3 scripts/kb/gen_pages.py --base-url https://kb.okit.pl
|
||||
python3 scripts/kb/gen_pages.py --base-url https://kb-e2a24af3.okit.pl
|
||||
python3 scripts/kb/gen_pages.py --check
|
||||
echo $? # 0 = czysto, 1 = trafienia
|
||||
```
|
||||
|
|
@ -130,7 +130,7 @@ curl -sI http://192.168.31.5:8250/index.html | head -1
|
|||
|
||||
```
|
||||
Type: A
|
||||
Name: kb
|
||||
Name: kb-e2a24af3
|
||||
Content: <publiczny IP łącza domowego> # ten sam, co ma vikunja.okit.pl
|
||||
Proxy: DNS only (szara chmurka)
|
||||
TTL: Auto
|
||||
|
|
@ -144,13 +144,13 @@ a nie na krawędź Cloudflare. Włączenie proxy to osobna decyzja, po tym jak c
|
|||
już działa.
|
||||
|
||||
Split-horizon (patrz `kb/phases/okit-cloudflare.md`): w Pi-hole na PIHA dodaj
|
||||
Local DNS Record `kb.okit.pl → 192.168.31.5`, żeby klienci w LAN szli prosto do
|
||||
Local DNS Record `kb-e2a24af3.okit.pl → 192.168.31.5`, żeby klienci w LAN szli prosto do
|
||||
npm, a nie przez hairpin NAT na routerze.
|
||||
|
||||
Sprawdzenie propagacji (z hosta poza LAN albo przez publiczny resolver):
|
||||
|
||||
```bash
|
||||
dig +short kb.okit.pl @1.1.1.1
|
||||
dig +short kb-e2a24af3.okit.pl @1.1.1.1
|
||||
```
|
||||
|
||||
---
|
||||
|
|
@ -161,15 +161,15 @@ Wszystkie komendy `npm_api.py` są **dry-run domyślnie**; realna zmiana dopiero
|
|||
z `--apply`. Puść najpierw bez `--apply` i przeczytaj payload.
|
||||
|
||||
```bash
|
||||
# 5a. host: kb.okit.pl -> PIHA:8250
|
||||
# 5a. host: kb-e2a24af3.okit.pl -> PIHA:8250
|
||||
python3 scripts/npm/npm_api.py --npm piha create-host \
|
||||
--domain kb.okit.pl \
|
||||
--domain kb-e2a24af3.okit.pl \
|
||||
--forward-host 192.168.31.5 --forward-port 8250 \
|
||||
--block-exploits --http2-support
|
||||
# ...i to samo z --apply
|
||||
|
||||
# 5b. cert Let's Encrypt (HTTP-01 — wymaga działającego kroku 4 i 5a)
|
||||
python3 scripts/npm/npm_api.py --npm piha create-cert --domain kb.okit.pl --apply
|
||||
python3 scripts/npm/npm_api.py --npm piha create-cert --domain kb-e2a24af3.okit.pl --apply
|
||||
|
||||
# 5c. podepnij cert pod host i wymuś HTTPS
|
||||
python3 scripts/npm/npm_api.py --npm piha list-hosts # weź HOST_ID
|
||||
|
|
@ -190,12 +190,12 @@ wiersz certyfikatu (szczegóły w `kb/runbooks/npm-api.md`).
|
|||
## 6. Weryfikacja końcowa
|
||||
|
||||
```bash
|
||||
curl -sI https://kb.okit.pl/ | head -1 # 200
|
||||
curl -s https://kb.okit.pl/ | grep -c 'class="cards"' # spis jest
|
||||
curl -s https://kb.okit.pl/subsystems/observer.html | tail -5 # stopka: data + commit
|
||||
curl -sI https://kb-e2a24af3.okit.pl/ | head -1 # 200
|
||||
curl -s https://kb-e2a24af3.okit.pl/ | grep -c 'class="cards"' # spis jest
|
||||
curl -s https://kb-e2a24af3.okit.pl/subsystems/observer.html | tail -5 # stopka: data + commit
|
||||
```
|
||||
|
||||
W przeglądarce: `https://kb.okit.pl` — spis pogrupowany per type, kłódka bez
|
||||
W przeglądarce: `https://kb-e2a24af3.okit.pl` — spis pogrupowany per type, kłódka bez
|
||||
ostrzeżeń, wejście w dowolną kartę, powrót linkiem „All documents".
|
||||
|
||||
Kontrola treści (ręczna, jednorazowa po pierwszej publikacji): przejrzyj spis
|
||||
|
|
@ -209,7 +209,7 @@ pilnuje pola `visibility`, ale to człowiek decyduje, co dostaje `public`.
|
|||
Po każdej zmianie w `kb/**/*.md`, która dotyczy dokumentów `public`:
|
||||
|
||||
```bash
|
||||
python3 scripts/kb/gen_pages.py --base-url https://kb.okit.pl \
|
||||
python3 scripts/kb/gen_pages.py --base-url https://kb-e2a24af3.okit.pl \
|
||||
&& python3 scripts/kb/gen_pages.py --check \
|
||||
&& tar -czf /tmp/kb-site.tgz -C build/kb-site . \
|
||||
&& scp /tmp/kb-site.tgz piha:/tmp/kb-site.tgz \
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# kb-site
|
||||
|
||||
Public slice of the knowledge base (`kb.okit.pl`) — static HTML generated from `kb/**/*.md` by `scripts/kb/gen_pages.py`, served by nginx on PIHA.
|
||||
Public slice of the knowledge base (`kb-e2a24af3.okit.pl`) — static HTML generated from `kb/**/*.md` by `scripts/kb/gen_pages.py`, served by nginx on PIHA.
|
||||
|
||||
## Sieć
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ Warunek wstępny deployu — sieć musi już istnieć na hoście:
|
|||
docker network ls | grep -w proxy # brak wyniku => docker network create proxy
|
||||
```
|
||||
|
||||
Ruch publiczny i tak nie idzie przez tę sieć: npm@PIHA (vhost `kb.okit.pl`) trafia
|
||||
Ruch publiczny i tak nie idzie przez tę sieć: npm@PIHA (vhost `kb-e2a24af3.okit.pl`) trafia
|
||||
do kontenera po opublikowanym porcie hosta `8250`.
|
||||
|
||||
Dokumentacja: [kb/services/kb-site.md](../../kb/services/kb-site.md)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ services:
|
|||
# PIHA 82x0 static-HTTP block: 8210 paperless, 8220 nextcloud,
|
||||
# 8230 kb-query, 8240 narty27 -> 8250 is the next free slot.
|
||||
# Publicly the site is reached only through the npm@PIHA vhost
|
||||
# kb.okit.pl; this bind is the proxy's upstream.
|
||||
# kb-e2a24af3.okit.pl; this bind is the proxy's upstream.
|
||||
- "8250:80"
|
||||
volumes:
|
||||
# Generated output of scripts/kb/gen_pages.py — never committed, never
|
||||
|
|
|
|||
|
|
@ -7,4 +7,4 @@
|
|||
# copy to .env.
|
||||
#
|
||||
# The public address is a generator argument, not an env var:
|
||||
# python3 scripts/kb/gen_pages.py --base-url https://kb.okit.pl
|
||||
# python3 scripts/kb/gen_pages.py --base-url https://kb-e2a24af3.okit.pl
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ service:
|
|||
name: kb-site
|
||||
owner_node: piha
|
||||
role: static-html-host # public slice of the KB, rendered by scripts/kb/gen_pages.py
|
||||
exposure: public # public via npm@PIHA (kb.okit.pl). The container itself binds
|
||||
exposure: public # public via npm@PIHA (kb-e2a24af3.okit.pl). The container itself binds
|
||||
# 8250 on the LAN; npm is the sole public entry point.
|
||||
dependencies: [] # nginx serving a local volume — nothing else required at runtime
|
||||
ports:
|
||||
|
|
|
|||
Loading…
Reference in a new issue