Dieses Wiki dokumentiert den Umbau der eigenen Web-Apps von einzelnen
systemd-Diensten auf einen Kubernetes-Cluster mit einer gemeinsamen
PostgreSQL-Instanz und einem S3-kompatiblen Objektspeicher.
Es ist ausdrücklich ein Lernprojekt: Kubernetes soll nicht nur
laufen, sondern sichtbar und anfassbar sein. Deshalb steht hier bei jeder
Entscheidung auch, was die Alternative gewesen wäre und warum sie es nicht
geworden ist.
Die Bibel-App ist von diesem Projekt ausgenommen. Kein Container, keine
Datenbank-Migration, keine Änderung an ihren Cron-Läufen oder ihrer Route.
Dasselbe gilt für Bibel-Explorer und Bibel Vereint.
| Architektur | wie das Ganze aufgebaut ist, und warum vier Namensräume |
| Entscheidungen | jede Wahl mit Alternative und Begründung (E1–E13) |
| Technologien | was jedes Werkzeug ist und welche Fassung läuft |
| Arbeitsablauf | wie man etwas ändert, baut, ausrollt, zurücknimmt |
| Fallen | 21 Dinge, die zugeschlagen haben — Symptom, Ursache, Lösung |
| Überwachung | was gemessen wird, wann es meldet, wo man nachsieht |
| Betrieb und bewährte Praxis | wie Server und Cluster eingestellt sind, und die Regeln des Hauses |
| Bauweise | Muster für Code und Datenbankentwurf — liegt als Skill bauweise in jedem Projekt |
| Codeprüfung | was die erste Prüfung gegen die Bauweise gefunden hat |
| Stand | was läuft, was nachgemessen ist, was fehlt |
| Umschaltung | der 3.9.2026 — was umgestellt und was dabei gefunden wurde |
| Was noch nicht im Cluster ist | die vollständige Bestandsaufnahme, mit Entscheidung je Posten |
| Bibel-App und der Cluster | geprüft und verneint — mit Messwerten |
| PostgreSQL | eine Instanz, sechs Datenbanken, Sicherung nach S3 |
| MinIO / S3 | Objektspeicher im eigenen Haus, S3-kompatibel |
| Migration SQLite → PostgreSQL | das Verfahren und die zwölf echten Unterschiede |
| Sicherung des Clusters | was offsite geht — und die Lücke, die niemand sah |
| Zeiterfassung | die erste migrierte App — hier wurde das Muster gebaut |
| Bücherei | die kleinste — und der Fund idle in transaction |
| Einkauf | die einzige mit eigenen Dateien → MinIO |
| CineSort | die größte — 473.273 Zeilen, Volltextsuche neu gebaut |
| personal-os (openclaw) | siebzehn Läufe, ein Abbild — Umschaltung steht aus |
| Wiederkehrende Läufe | warum Kubernetes Jobs den crontab ersetzen |
| Lernpfad | in welcher Reihenfolge man das begreift, mit Übungen |
Alles ist über einen eigenen Hostnamen erreichbar. Passwörter:
ssh openclaw-server 'cat /opt/homelab/.zugang'
| Werkzeug | Adresse | Wofür |
|---|---|---|
| Wiki.js | https://wiki.31-220-73-209.sslip.io | diese Seiten |
| ArgoCD | https://argocd.31-220-73-209.sslip.io | was soll laufen, was läuft, wo weicht es ab |
| Headlamp | https://headlamp.31-220-73-209.sslip.io | Pods, Protokolle, Shell, Ereignisse |
| Traefik | https://traefik.31-220-73-209.sslip.io | Routen und Middlewares |
| pgAdmin | https://pgadmin.31-220-73-209.sslip.io | Tabellen, Abfragen, Ausführungspläne |
| MinIO | https://minio.31-220-73-209.sslip.io | Buckets, Dateien, Zugriffsschlüssel |
| Registry | https://registry.31-220-73-209.sslip.io | die selbst gebauten Container-Abbilder |
Die migrierten Apps, jeweils parallel zur alten Fassung:
| App | im Cluster | bisher |
|---|---|---|
| Zeiterfassung | https://zeit.31-220-73-209.sslip.io | /zeit/ |
| Einkauf | https://einkauf.31-220-73-209.sslip.io | /einkauf/ |
| Bücherei | https://buecherei.31-220-73-209.sslip.io | /buecherei/ |
| CineSort | https://cinesort.31-220-73-209.sslip.io | /cinesort/ |
Alle bisherigen Adressen funktionieren unverändert weiter, insbesondere
https://31-220-73-209.sslip.io/bibel/.
# Cluster anhalten — alles Alte läuft unverändert weiter
ssh openclaw-server 'systemctl stop k3s'
# Cluster restlos entfernen
ssh openclaw-server '/usr/local/bin/k3s-uninstall.sh'