Micha 73137b78d9 Migration Log – 2026-03-25
# 🗓️ 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
2026-03-25 19:13:35 +00:00
2026-03-25 19:13:35 +00:00
2026-03-23 17:54:57 +01:00
2026-03-25 18:06:22 +00:00
2026-03-23 18:47:30 +00:00

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:

  1. 👉 HOMELAB_ARCHITECTURE_MASTER_V2.md
  2. 👉 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/ → Basisdienste
  • security/ → sicherheitskritische Dienste
  • infra/ → Datenbanken & technische Services
  • apps/ → Anwendungen
  • ops/ → Monitoring & Tools
  • host-services/ → Dienste mit Host-Netz
  • traefik/ → Reverse Proxy Konfiguration
  • docs/ → Dokumentation & Prozesse
  • env/ → Beispiel-Umgebungsvariablen

Workflow

  1. Änderung im Repository
  2. Commit & Push
  3. Portainer deployed automatisch
  4. Testen
  5. Dokumentation aktualisieren

Status

Initialer Aufbau der Infrastruktur (GitOps Migration gestartet)

S
Description
Meine NAS-Architektur
Readme 6.1 MiB
Languages
Shell 68%
PowerShell 25.7%
Python 5.6%
JavaScript 0.4%
Dockerfile 0.3%