--- type: issue id: "0048" status: done created: 2026-08-12 milestone: M4 priority: medium area: infrastructure related: [docs/adr/0014-wikijs-loest-docusaurus-ab.md, docs/issues/0046-wiki-in-threadnet-server-suite-umziehen.md] --- # Wiki.js in der ThreadNet Server Suite deployen (k8s + Postgres + Git-Storage) ## Problem / Motivation ADR-0014: Wiki.js löst Docusaurus ab und wird Teil der ThreadNet Server Suite (k8s), nicht mehr ein Overmind-Einzelstack. Braucht das Deployment plus den Inhalts-Speicher. ## Acceptance - Wiki.js läuft in der Suite (k8s): Deployment, **Postgres** (Rendern/Auth/Suche), in die GitOps-Definition aufgenommen (Flux). - **Öffentlich erreichbar unter `wiki.axion1337.chat`** (Entscheidung sorb 2026-08-12) — wie die übrigen Subdomains: A-Record → `49.13.132.245`, cert-manager `Certificate` via ClusterIssuer `letsencrypt-prod` (Secret `wiki-axion1337-chat-tls`), Traefik-`IngressRoute` `Host(wiki.axion1337.chat)` → Service `wikijs`:3000. Muster: `apps/authentik/ingress.yaml`. Kein Forward-Auth/Outpost — Wiki.js loggt selbst via OIDC ein (#0049). - **Neues `wiki`-Repo** auf git.lab angelegt (gespiegelt wie die übrigen), als Wiki.js **Git-Storage** eingebunden (bidirektionaler Sync) — Inhalt liegt in git (hartes Kriterium, ADR-0014). - Grundstruktur für **Betrieb** und **Anwender** angelegt (zwei Bereiche); `homelab/docs` ausdrücklich **nicht** eingebunden. - Postgres ist gesichert (Backup), da git nur Inhalt, nicht den Laufzeit-Zustand hält. ## Notes Ersetzt den Forward-Auth-Zwischenstand auf Overmind (Guide 09, #0024). OIDC + Rollen kommen in #0049, Theming in #0050. Umbrella: #0046. ## Update 2026-08-13 — Git-Storage-Architektur korrigiert (Widerspruch) Deployment, Postgres, Ingress/Cert, öffentliche Erreichbarkeit, OIDC/Rollen (#0049) und Theming (#0050) laufen live und reproduzierbar über den Konfig-Job. **Offen ist nur der Git-Storage** — und die oben geforderte Fassung ist so **nicht machbar**: „`wiki`-Repo auf git.lab, gespiegelt wie die übrigen, als Storage" setzt voraus, dass Wiki.js git.lab erreicht. Tut es nicht — der Cluster erreicht bewusst nur Gitea (verifiziert 2026-08-13). Auflösung in [ADR-0015](../adr/0015-wiki-git-storage-ueber-gitea-kanonisieren.md): Wiki.js→Gitea (`sorb/wiki`), CI kanonisiert Gitea→git.lab (Muster `canonize_rotation`). Voraussetzung (nur sorb): Gitea-Repo `sorb/wiki` (privat) anlegen + dedizierten Deploy-PAT bereitstellen. Danach verdrahtet der Agent Storage + Kanonisierungs-Job. **Nachtrag 2026-08-13 (nachmittags):** Erledigt. Repo `sorb/ThreadNetWiki` + Deploy-PAT (`wiki-git-storage-deploy`) angelegt; Git-Storage in Wiki.js verdrahtet (Secret `wikijs-git-secret`), Status `operational`, End-to-End verifiziert (Seite anlegen/löschen propagiert nach Gitea). Damit ist das harte Kriterium „Inhalt in git" erfüllt. Einziger Rest: der **Kanonisierungs-Job Gitea→git.lab** — braucht die Entscheidung, in welches git.lab-Repo kanonisiert wird. **Nachtrag 2026-08-13 (abends):** Auch der Kanonisierungs-Job ist erledigt. Ziel-Repo `git.lab/axion1337.chat/threadnet-wiki` (leer angelegt); `canonize_wiki` in der gitops-CI (Tages-Schedule) spiegelt Gitea→git.lab per Fast-Forward (kein Force, Protection bleibt; Token `WIKI_CANONIZE_TOKEN`, nur `write_repository`). Verifiziert: git.lab main === Gitea main mit voller Historie. Damit ist die Git-Storage-Strecke aus ADR-0015 komplett. Offen für #0048 bleibt nur noch die inhaltliche Grundstruktur (Bereiche Betrieb/Anwender) — die entsteht mit dem ersten echten Inhalt. **Nachtrag 2026-08-13 (spät):** Grundstruktur angelegt: `home`, `anwender/` (+ Erste Schritte), `betrieb/` (+ Deployment) — liegt in git-storage (Gitea→git.lab). Abschottung verifiziert: `wiki-anwender` liest nur `anwender/*` + `home`; `betrieb/*` fällt unter Default-Deny (checkAccess: `match && !deny`). Damit sind alle Acceptance-Punkte erfüllt **bis auf** das `wikijs-postgres`-Backup — es existiert (noch) keins. Inhaltlich unkritisch (Inhalt liegt in git), aber Kommentare/lokale Konten/Suchindex wären bei Postgres-Verlust weg. Entscheidung sorb offen: dediziertes Backup wie `synapse-backup` anlegen, oder bewusst auf die git-Wiederherstellung setzen. **Abschluss 2026-08-13:** `wikijs-backup` angelegt (nächtliches Borg-Backup der Wiki-DB, 03:30, DB-only nach dem `authentik-backup`-Muster; wiederverwendet `synapse-backup-credentials`/`-known-hosts`, eigener Repo-Pfad `wikijs-backup`). Testlauf grün: Borg-Repo initialisiert, DB gedumpt und hochgeladen, Retention 7/4/6. Damit sind **alle** Acceptance-Punkte erfüllt → **erledigt**.