HOME LAB · SELFHOSTING · NETZWERK

Schlagwort: Docker

  • Nginx Proxy Manager mit Let’s Encrypt: saubere Reverse-Proxy-Basis

    Nginx Proxy Manager mit Let’s Encrypt: saubere Reverse-Proxy-Basis

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Nginx Proxy Manager mit Let's Encrypt: saubere Reverse-Proxy-Basis

    Kurzproblem und Zielbild

    In diesem Guide setzt du Nginx Proxy Manager mit Let’s Encrypt: saubere Reverse-Proxy-Basis mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    docker compose up -d
    docker logs --tail 100 nginx-proxy-manager
    curl -I http://localhost:81

    3) Dienst/Funktion gezielt prüfen

    curl -I https://deine-domain.tld
    docker exec -it nginx-proxy-manager ls -lah /etc/letsencrypt/live

    4) Betriebsgrenzen testen

    # Gezielten Failover-/Negativtest ausführen
    # Reaktionszeit und Fehlerbild protokollieren
    # Danach Service normalisieren und Zustand erneut verifizieren

    Validierung / Checks

    curl -I https://deine-domain.tld
    docker exec -it nginx-proxy-manager ls -lah /etc/letsencrypt/live
    # End-to-End Test mit klaren Sollwerten durchführen und Ergebnis dokumentieren

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    journalctl -n 120 --no-pager
    # betroffenen Dienst gezielt reload/restarten
    # Konfigurationsdatei auf Syntax prüfen

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    ip a
    ip route
    ss -tulpn
    # Berechtigungen und Abhängigkeiten gegenprüfen

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • Docker Compose Healthchecks richtig nutzen: depends_on, retries, startup-order

    Docker Compose Healthchecks richtig nutzen: depends_on, retries, startup-order

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Docker Compose Healthchecks richtig nutzen: depends_on, retries, startup-order

    Kurzproblem und Zielbild

    In diesem Guide setzt du Docker Compose Healthchecks richtig nutzen: depends_on, retries, startup-order mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    cat docker-compose.yml
    docker compose config
    docker compose up -d
    docker inspect --format "{{json .State.Health}}" CONTAINER

    3) Dienst/Funktion gezielt prüfen

    docker compose ps
    docker inspect --format "{{.Name}} {{.State.Health.Status}}" $(docker ps -q)

    4) Betriebsgrenzen testen

    # Gezielten Failover-/Negativtest ausführen
    # Reaktionszeit und Fehlerbild protokollieren
    # Danach Service normalisieren und Zustand erneut verifizieren

    Validierung / Checks

    docker compose ps
    docker inspect --format "{{.Name}} {{.State.Health.Status}}" $(docker ps -q)
    # End-to-End Test mit klaren Sollwerten durchführen und Ergebnis dokumentieren

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    journalctl -n 120 --no-pager
    # betroffenen Dienst gezielt reload/restarten
    # Konfigurationsdatei auf Syntax prüfen

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    ip a
    ip route
    ss -tulpn
    # Berechtigungen und Abhängigkeiten gegenprüfen

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • Immich Wartung im Alltag: Updates, Datenbank-Backup, Speicherhygiene

    Immich Wartung im Alltag: Updates, Datenbank-Backup, Speicherhygiene

    Schwierigkeit: Mittel · Dauer: 35–65 Min · Ziel: Immich Wartung im Alltag: Updates, Datenbank-Backup, Speicherhygiene

    Kurzproblem und Zielbild

    In vielen Homelabs funktioniert die Erstinstallation, aber der Dauerbetrieb wird schnell unübersichtlich. Dieses Tutorial zeigt einen reproduzierbaren Ablauf für Immich Wartung im Alltag mit Fokus auf Stabilität, klare Checks und einfache Fehlerbehebung.

    Ziel ist ein Setup, das nicht nur heute läuft, sondern auch nach Updates und Änderungen beherrschbar bleibt.

    Voraussetzungen

    • Aktuelles Debian/Ubuntu oder kompatible Appliance
    • Administrative Rechte und Wartungsfenster
    • Backup- oder Snapshot-Möglichkeit vor Änderungen

    Schnellstart (funktionierende Basis)

    # Basisprüfung
    hostnamectl
    ip a
    # Dienste prüfen
    systemctl --failed
    # Logs kurz prüfen
    journalctl -p 3 -xb --no-pager | tail -n 30

    Was macht das? Du prüfst erst den Grundzustand und vermeidest, dass Altfehler in neue Änderungen hineinwirken.

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # versions/relevante configs sichern

    Erklärung: Mit einer kurzen Bestandsaufnahme lassen sich spätere Fehler schneller eingrenzen.

    2) Kernkonfiguration sauber setzen

    cd /opt/immich
    docker compose pull
    docker compose ps
    docker exec -t immich_postgres pg_dump -U postgres immich > immich-$(date +%F).sql
    ls -lh immich-*.sql
    docker compose up -d

    Erklärung: Änderungen gezielt umsetzen, danach direkt den Dienst-/Funktionszustand prüfen.

    3) Dienst kontrolliert neu laden

    sudo systemctl daemon-reload
    sudo systemctl restart 
    sudo systemctl status  --no-pager

    4) Betriebsgrenzen testen

    docker compose ps
    docker compose logs --tail=120 server
    docker compose logs --tail=120 microservices
    curl -I http://127.0.0.1:2283

    Validierung / Checks

    docker compose ps
    docker exec -t immich_postgres psql -U postgres -d immich -c "select now();"
    docker volume ls | grep immich
    df -h

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-, Reload- oder Parameterfehler.

    docker compose logs --tail=200 server
    docker compose logs --tail=200 microservices
    docker compose logs --tail=200 immich_postgres

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing oder Berechtigungen sind inkonsistent.

    createdb -U postgres immich_restore_test
    psql -U postgres immich_restore_test < immich-YYYY-MM-DD.sql
    psql -U postgres -d immich_restore_test -c "\dt"

    Fazit

    Mit einem klaren Ablauf für Immich Wartung im Alltag reduzierst du Ausfälle und erhöhst die Wartbarkeit deutlich. Der wichtigste Hebel ist die Kombination aus kleiner Änderung, sofortigem Check und dokumentiertem Ergebnis.

    Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen und regelmäßig gegen echte Störfälle testen.

    Quellen

  • Home Assistant Backups verlässlich machen: Full/Partial, Restore-Drill

    Home Assistant Backups verlässlich machen: Full/Partial, Restore-Drill

    Schwierigkeit: Mittel · Dauer: 35–65 Min · Ziel: Home Assistant Backups verlässlich machen: Full/Partial, Restore-Drill

    Kurzproblem und Zielbild

    In vielen Homelabs funktioniert die Erstinstallation, aber der Dauerbetrieb wird schnell unübersichtlich. Dieses Tutorial zeigt einen reproduzierbaren Ablauf für Home Assistant Backups verlässlich machen mit Fokus auf Stabilität, klare Checks und einfache Fehlerbehebung.

    Ziel ist ein Setup, das nicht nur heute läuft, sondern auch nach Updates und Änderungen beherrschbar bleibt.

    Voraussetzungen

    • Aktuelles Debian/Ubuntu oder kompatible Appliance
    • Administrative Rechte und Wartungsfenster
    • Backup- oder Snapshot-Möglichkeit vor Änderungen

    Schnellstart (funktionierende Basis)

    # Basisprüfung
    hostnamectl
    ip a
    # Dienste prüfen
    systemctl --failed
    # Logs kurz prüfen
    journalctl -p 3 -xb --no-pager | tail -n 30

    Was macht das? Du prüfst erst den Grundzustand und vermeidest, dass Altfehler in neue Änderungen hineinwirken.

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # versions/relevante configs sichern

    Erklärung: Mit einer kurzen Bestandsaufnahme lassen sich spätere Fehler schneller eingrenzen.

    2) Kernkonfiguration sauber setzen

    ha backups list
    ha backups new --name "full-$(date +%F)" --all
    ha backups list | head -n 40

    Erklärung: Änderungen gezielt umsetzen, danach direkt den Dienst-/Funktionszustand prüfen.

    3) Dienst kontrolliert neu laden

    sudo systemctl daemon-reload
    sudo systemctl restart 
    sudo systemctl status  --no-pager

    4) Betriebsgrenzen testen

    ha backups list
    # Partial-Restore auf Test-Entität prüfen
    # danach Automationen/Entities gegenchecken

    Validierung / Checks

    ha core info
    ha backups list
    ha addons list
    ha supervisor logs --lines 150

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-, Reload- oder Parameterfehler.

    ha core info
    ha supervisor info
    ha supervisor logs --lines 200

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing oder Berechtigungen sind inkonsistent.

    ha backups info BACKUP_SLUG
    ha backups new --name "full-verify-$(date +%F)" --all

    Fazit

    Mit einem klaren Ablauf für Home Assistant Backups verlässlich machen reduzierst du Ausfälle und erhöhst die Wartbarkeit deutlich. Der wichtigste Hebel ist die Kombination aus kleiner Änderung, sofortigem Check und dokumentiertem Ergebnis.

    Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen und regelmäßig gegen echte Störfälle testen.

    Quellen

  • Docker Logs unter Kontrolle: Rotation, Retention und schnelle Analyse

    Docker Logs unter Kontrolle: Rotation, Retention und schnelle Analyse

    Schwierigkeit: Mittel · Dauer: 35–65 Min · Ziel: Docker Logs unter Kontrolle: Rotation, Retention und schnelle Analyse

    Kurzproblem und Zielbild

    In vielen Homelabs funktioniert die Erstinstallation, aber der Dauerbetrieb wird schnell unübersichtlich. Dieses Tutorial zeigt einen reproduzierbaren Ablauf für Docker Logs unter Kontrolle mit Fokus auf Stabilität, klare Checks und einfache Fehlerbehebung.

    Ziel ist ein Setup, das nicht nur heute läuft, sondern auch nach Updates und Änderungen beherrschbar bleibt.

    Voraussetzungen

    • Aktuelles Debian/Ubuntu oder kompatible Appliance
    • Administrative Rechte und Wartungsfenster
    • Backup- oder Snapshot-Möglichkeit vor Änderungen

    Schnellstart (funktionierende Basis)

    # Basisprüfung
    hostnamectl
    ip a
    # Dienste prüfen
    systemctl --failed
    # Logs kurz prüfen
    journalctl -p 3 -xb --no-pager | tail -n 30

    Was macht das? Du prüfst erst den Grundzustand und vermeidest, dass Altfehler in neue Änderungen hineinwirken.

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # versions/relevante configs sichern

    Erklärung: Mit einer kurzen Bestandsaufnahme lassen sich spätere Fehler schneller eingrenzen.

    2) Kernkonfiguration sauber setzen

    sudo mkdir -p /etc/docker
    cat <<'EOF' | sudo tee /etc/docker/daemon.json
    {
      "log-driver": "json-file",
      "log-opts": {"max-size": "10m", "max-file": "5"}
    }
    EOF
    sudo systemctl restart docker
    docker info | grep -E "Logging Driver|Docker Root Dir"

    Erklärung: Änderungen gezielt umsetzen, danach direkt den Dienst-/Funktionszustand prüfen.

    3) Dienst kontrolliert neu laden

    sudo systemctl daemon-reload
    sudo systemctl restart 
    sudo systemctl status  --no-pager

    4) Betriebsgrenzen testen

    docker ps --format "table {{.Names}}	{{.Status}}"
    docker inspect -f "{{.Name}} -> {{.HostConfig.LogConfig.Type}} {{json .HostConfig.LogConfig.Config}}" $(docker ps -q)
    sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail -n 10

    Validierung / Checks

    docker info | grep "Logging Driver"
    docker system df
    systemctl status docker --no-pager

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-, Reload- oder Parameterfehler.

    docker inspect -f "{{.Name}} {{json .HostConfig.LogConfig}}" CONTAINER
    docker compose up -d --force-recreate

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing oder Berechtigungen sind inkonsistent.

    docker system df
    du -sh /var/lib/docker/volumes/* | sort -h | tail -n 10
    journalctl --disk-usage

    Fazit

    Mit einem klaren Ablauf für Docker Logs unter Kontrolle reduzierst du Ausfälle und erhöhst die Wartbarkeit deutlich. Der wichtigste Hebel ist die Kombination aus kleiner Änderung, sofortigem Check und dokumentiertem Ergebnis.

    Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen und regelmäßig gegen echte Störfälle testen.

    Quellen

  • Home Assistant Updates ohne Ausfallstress: Compose-Workflow mit Rollback

    Home Assistant Updates ohne Ausfallstress: Compose-Workflow mit Rollback

    Schwierigkeit: Mittel · Dauer: 35–60 Min · Ziel: Home-Assistant-Updates reproduzierbar ausrollen und bei Problemen schnell zurückrollen.

    Kurzproblem und Zielbild

    Home Assistant wächst schnell mit Integrationen. Unkontrollierte Updates führen oft zu Ausfällen oder kaputten Add-ons. Ziel ist ein klarer Update-Workflow mit Backup, Check und Rollback.

    Voraussetzungen

    • Home Assistant via Docker Compose
    • Persistente Config unter ./config
    • Backup-Möglichkeit vor Update

    Schnellstart (funktionierende Basis)

    cd ~/stacks/homeassistant
    tar -czf backup-ha-$(date +%F-%H%M).tar.gz ./config
    docker compose pull
    docker compose up -d

    Schritt-für-Schritt Umsetzung

    1) Pre-Update Snapshot

    tar -czf backup-ha-$(date +%F-%H%M).tar.gz ./config
    cp compose.yml backup-compose-$(date +%F-%H%M).yml

    2) Update kontrolliert ausrollen

    docker compose pull
    docker compose up -d --remove-orphans
    docker compose ps

    3) Kernfunktionen prüfen

    docker compose logs --tail=180 homeassistant
    # Login/UI, Automationen, Integrationen testen

    4) Rollback bei Fehlern

    docker compose down
    cp backup-compose-YYYY-MM-DD-HHMM.yml compose.yml
    # ggf. config-backup zurückspielen
    docker compose up -d

    Validierung / Checks

    docker compose ps
    docker compose logs --tail=200 homeassistant
    curl -I http://localhost:8123

    Troubleshooting

    Container startet, UI bleibt unzuverlässig

    docker compose logs homeassistant --tail=250
    # fehlerhafte custom components prüfen

    Integrationen nach Update fehlerhaft

    # letzte stabile Version pinnen und erneut deployen

    Fazit

    Mit klarer Update-Routine wird Home Assistant deutlich berechenbarer. Nächster Schritt: festen Wartungstermin + Checkliste pro Update einführen.

    Quellen

  • Docker Compose Deployments robust machen: Struktur, Healthchecks, Rollback

    Docker Compose Deployments robust machen: Struktur, Healthchecks, Rollback

    Schwierigkeit: Mittel · Dauer: 45–60 Min · Ziel: Docker-Compose-Stacks reproduzierbar deployen, validieren und sicher zurückrollen.

    Kurzproblem und Zielbild

    Viele Compose-Setups funktionieren initial, brechen aber bei Updates oder Neustarts durch fehlende Checks und unsaubere Struktur. Ziel ist ein Ablauf, der auch unter Last stabil bleibt und im Fehlerfall schnell zurückgerollt werden kann.

    Voraussetzungen

    • Debian/Ubuntu Host mit Docker + Compose Plugin
    • Sudo-Zugriff
    • Freie Volumes/Backups vor Änderungen

    Schnellstart (funktionierende Basis)

    mkdir -p ~/stacks/app && cd ~/stacks/app
    nano compose.yml
    docker compose pull
    docker compose up -d
    docker compose ps

    Was macht das? Erzeugt einen reproduzierbaren Stack-Ordner, zieht Images und startet den Stack kontrolliert.

    Schritt-für-Schritt Umsetzung

    1) Struktur und Variablen trennen

    mkdir -p ~/stacks/app/{config,data,backup}
    cp compose.yml compose.yml.bak
    nano .env

    Erklärung: Trennung reduziert Fehler bei Upgrades und vereinfacht Restore.

    2) Healthchecks definieren

    services:
      app:
        healthcheck:
          test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
          interval: 30s
          timeout: 5s
          retries: 5

    3) Update-Fenster mit Validierung

    docker compose pull
    docker compose up -d --remove-orphans
    docker compose ps
    docker compose logs --tail=120

    4) Rollback vorbereiten

    cp compose.yml backup/compose-$(date +%F-%H%M).yml
    # im Fehlerfall:
    cp backup/compose-YYYY-MM-DD-HHMM.yml compose.yml
    docker compose up -d

    Validierung / Checks

    docker compose ps
    curl -fsS http://localhost:8080/health
    journalctl -u docker -n 120 --no-pager

    Troubleshooting

    Healthcheck bleibt „unhealthy“

    Ursache: Falscher Endpoint oder Startdauer zu kurz.

    docker compose logs app --tail=200
    # retries/timeout erhöhen

    Update startet, Service nicht erreichbar

    Ursache: Inkompatibles Image/Config.

    docker compose down
    cp backup/compose-*.yml compose.yml
    docker compose up -d

    Fazit

    Mit sauberer Struktur, Healthchecks und Rollback-Plan werden Compose-Deployments deutlich robuster. Nächster Schritt: Monitoring für Containerzustände ergänzen.

    Quellen