73137b78d9f7f7c083b0a2a947901f198b7d509f
# 🗓️ Migration Log – 2026-03-25 ## 🔧 Ziel der Session * Bereinigung und Härtung der bestehenden Container-Architektur * Umstellung auf Git-basierte Stacks (Gitea + Portainer) * Entfernung unnötiger Angriffsflächen (Ports, bridge-Netzwerke) --- ## 🔐 Vaultwarden – Finalisierung ### Änderungen * Migration auf `frontend_net` * Entfernung von Host-Port * Integration über Traefik (`vault.kaleschke.info`) * Nutzung von `ADMIN_TOKEN_FILE` statt Klartext * Entfernung alter `config.json` ### Ergebnis * sauberer, sicherer Betrieb * keine Secrets im Klartext * reproduzierbar über Git --- ## 🗄️ PostgreSQL (postgresql17) – Migration ### Ausgangszustand * lief als Einzelcontainer * im `bridge` Netzwerk * Port `5432` öffentlich * Passwort im Klartext sichtbar ### Änderungen * Migration in Git-Stack (`infra/postgresql17`) * Entfernung von Port-Binding (`5432`) * nur noch im `backend_net` * Einführung von Secret-Datei (`POSTGRES_PASSWORD_FILE`) * Restart-Policy auf `unless-stopped` ### Vorgehen 1. Backup via `pg_dumpall` 2. Zustand via `docker inspect` gesichert 3. Container gestoppt & entfernt 4. neuer Stack über Gitea deployed 5. Funktion geprüft (DB + abhängige Services) ### Ergebnis * Daten unverändert erhalten * kein externer Zugriff mehr möglich * zentrale DB für: * mail-archiver * paperless-ngx --- ## 🍽️ Mealie – Neuaufbau ### Ausgangszustand * Zugriff über Port `9935` * DB im `frontend_net` * Klartext-Passwort in Compose * kein Traefik ### Änderungen #### Architektur * Einführung von `mealie_internal` Netzwerk * `mealie-postgres` nur noch intern erreichbar * `mealie` in: * `frontend_net` (Traefik) * `mealie_internal` (DB) #### Zugriff * Entfernung von Port `9935` * Integration über Traefik (`mealie.kaleschke.info`) #### Secrets * Entfernung von Klartext-Passwort aus Compose * Nutzung von Portainer Environment Variable: * `MEALIE_DB_PASSWORD` ### Besonderheit * `env_file` mit Host-Pfad funktionierte nicht * Ursache: Portainer Git-Stacks haben keinen Zugriff auf `/mnt/...` ### Lösung * Secrets über Portainer UI verwaltet * Compose nutzt `${MEALIE_DB_PASSWORD}` ### Ergebnis * saubere Trennung von App und DB * keine offenen Ports * Git-Repo ohne Secrets --- ## 🔁 DIUN ### Änderungen * Integration ins `frontend_net` * Nutzung von Container-Namen für Gotify --- ## ⚠️ Wichtige Learnings ### Portainer + Git + env_file * Host-Pfade (`/mnt/...`) sind nicht erreichbar * `env_file` daher ungeeignet 👉 Lösung: * Nutzung von Portainer Environment Variables --- ### `_FILE` Support ist nicht universell * Vaultwarden → unterstützt `_FILE` * PostgreSQL → unterstützt `_FILE` * Mealie → unterstützt `_FILE` **nicht** --- ### Migration ohne Risiko * Daten liegen immer im Volume * Container können jederzeit neu gebaut werden * Backup + Inspect vor Änderung ist Pflicht --- ## 🏁 Fazit Alle kritischen Services wurden erfolgreich: * abgesichert * strukturiert * in Git überführt 👉 System ist jetzt: * reproduzierbar * deutlich sicherer * architektonisch sauber
Homelab Infrastructure (KalliLab CORE)
Dieses Repository ist die zentrale Quelle ("Single Source of Truth") für die komplette Infrastruktur meines Homelabs.
🚨 WICHTIG – Einstieg
Vor jeder Änderung lesen:
- 👉 HOMELAB_ARCHITECTURE_MASTER_V2.md
- 👉 docs/WORKFLOW.md
Architektur
- Host: Unraid
- Container: Docker (Compose)
- Reverse Proxy: Traefik v3
- Zugriff: Tailscale (VPN)
- DNS: Pi-hole + Unbound
- GitOps: Gitea + Portainer (Stacks aus Git)
Grundprinzipien
- Alle Änderungen erfolgen über Git (kein manuelles Editieren in Portainer)
- Keine produktiven Container außerhalb von Compose
- Traefik ist der einzige öffentliche Einstiegspunkt
- Admin-Dienste sind nicht öffentlich erreichbar (nur via VPN oder Auth)
- Secrets werden niemals im Repository gespeichert
Repository-Struktur
core/→ Basisdienstesecurity/→ sicherheitskritische Diensteinfra/→ Datenbanken & technische Servicesapps/→ Anwendungenops/→ Monitoring & Toolshost-services/→ Dienste mit Host-Netztraefik/→ Reverse Proxy Konfigurationdocs/→ Dokumentation & Prozesseenv/→ Beispiel-Umgebungsvariablen
Workflow
- Änderung im Repository
- Commit & Push
- Portainer deployed automatisch
- Testen
- Dokumentation aktualisieren
Status
Initialer Aufbau der Infrastruktur (GitOps Migration gestartet)
Description
Languages
Shell
68%
PowerShell
25.7%
Python
5.6%
JavaScript
0.4%
Dockerfile
0.3%