HOME LAB · SELFHOSTING · NETZWERK

Schlagwort: Docker

  • WireGuard Site-to-Site mit OPNsense und Linux: Routing ohne Chaos

    WireGuard Site-to-Site mit OPNsense und Linux: Routing ohne Chaos

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: WireGuard Site-to-Site mit OPNsense und Linux: Routing ohne Chaos

    Kurzproblem und Zielbild

    In diesem Guide setzt du WireGuard Site-to-Site mit OPNsense und Linux: Routing ohne Chaos 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

    wg show
    ip route
    ss -lunp | grep 51820

    3) Dienst/Funktion gezielt prüfen

    ping -c 3 REMOTE_SUBNET_HOST
    traceroute REMOTE_SUBNET_HOST
    wg show

    4) Betriebsgrenzen testen

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

    Validierung / Checks

    ping -c 3 REMOTE_SUBNET_HOST
    traceroute REMOTE_SUBNET_HOST
    wg show
    # 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 Storage-Tuning: Upload-Pfade, Transcoding, Datenbankpflege

    Immich Storage-Tuning: Upload-Pfade, Transcoding, Datenbankpflege

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Immich Storage-Tuning: Upload-Pfade, Transcoding, Datenbankpflege

    Kurzproblem und Zielbild

    In diesem Guide setzt du Immich Storage-Tuning: Upload-Pfade, Transcoding, Datenbankpflege 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 ps
    docker compose logs --tail 120 microservices
    df -h
    docker volume ls | grep immich

    3) Dienst/Funktion gezielt prüfen

    curl -I http://127.0.0.1:2283
    docker exec -t immich_postgres psql -U postgres -d immich -c "select now();"

    4) Betriebsgrenzen testen

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

    Validierung / Checks

    curl -I http://127.0.0.1:2283
    docker exec -t immich_postgres psql -U postgres -d immich -c "select now();"
    # 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

  • K3s Ingress mit Traefik absichern: TLS, Middleware, Rate-Limits

    K3s Ingress mit Traefik absichern: TLS, Middleware, Rate-Limits

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: K3s Ingress mit Traefik absichern: TLS, Middleware, Rate-Limits

    Kurzproblem und Zielbild

    In diesem Guide setzt du K3s Ingress mit Traefik absichern: TLS, Middleware, Rate-Limits 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

    kubectl get ingress -A
    kubectl get middleware -A
    kubectl describe ingress INGRESS -n NAMESPACE

    3) Dienst/Funktion gezielt prüfen

    kubectl get certificates -A
    kubectl logs -n kube-system deploy/traefik --tail=120

    4) Betriebsgrenzen testen

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

    Validierung / Checks

    kubectl get certificates -A
    kubectl logs -n kube-system deploy/traefik --tail=120
    # 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

  • Portainer RBAC im Homelab: Teams, Stacks, sichere Freigaben

    Portainer RBAC im Homelab: Teams, Stacks, sichere Freigaben

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Portainer RBAC im Homelab: Teams, Stacks, sichere Freigaben

    Kurzproblem und Zielbild

    In diesem Guide setzt du Portainer RBAC im Homelab: Teams, Stacks, sichere Freigaben 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

    # UI: Users/Teams/Endpoints Rollen zuweisen
    docker logs --tail 100 portainer
    curl -I http://localhost:9000

    3) Dienst/Funktion gezielt prüfen

    # Test mit Non-Admin User gegen Stack-Aktionen
    # API permissions prüfen

    4) Betriebsgrenzen testen

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

    Validierung / Checks

    # Test mit Non-Admin User gegen Stack-Aktionen
    # API permissions prüfen
    # 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

  • Prometheus Node Exporter sauber deployen: Targets, Labels, Retention

    Prometheus Node Exporter sauber deployen: Targets, Labels, Retention

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Prometheus Node Exporter sauber deployen: Targets, Labels, Retention

    Kurzproblem und Zielbild

    In diesem Guide setzt du Prometheus Node Exporter sauber deployen: Targets, Labels, Retention 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 run -d --name node-exporter --net=host --pid=host -v /:/host:ro,rslave quay.io/prometheus/node-exporter:latest --path.rootfs=/host
    curl -s http://127.0.0.1:9100/metrics | head

    3) Dienst/Funktion gezielt prüfen

    curl -s http://PROMETHEUS:9090/api/v1/targets | jq .
    # target state = up

    4) Betriebsgrenzen testen

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

    Validierung / Checks

    curl -s http://PROMETHEUS:9090/api/v1/targets | jq .
    # target state = up
    # 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

  • Vaultwarden Backup & Restore Drill: SQLite/Postgres, Anhänge, Schlüssel

    Vaultwarden Backup & Restore Drill: SQLite/Postgres, Anhänge, Schlüssel

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Vaultwarden Backup & Restore Drill: SQLite/Postgres, Anhänge, Schlüssel

    Kurzproblem und Zielbild

    In diesem Guide setzt du Vaultwarden Backup & Restore Drill: SQLite/Postgres, Anhänge, Schlüssel 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

    sqlite3 /data/db.sqlite3 ".backup /backup/vw-$(date +%F).sqlite3"
    tar czf /backup/vw-attachments-$(date +%F).tar.gz /data/attachments
    ls -lh /backup

    3) Dienst/Funktion gezielt prüfen

    sqlite3 /backup/vw-YYYY-MM-DD.sqlite3 "pragma integrity_check;"
    # Test-Login in Restore-Instanz

    4) Betriebsgrenzen testen

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

    Validierung / Checks

    sqlite3 /backup/vw-YYYY-MM-DD.sqlite3 "pragma integrity_check;"
    # Test-Login in Restore-Instanz
    # 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

  • Unbound DNS in OPNsense härten: DNSSEC, Blocklisten, Performance

    Unbound DNS in OPNsense härten: DNSSEC, Blocklisten, Performance

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Unbound DNS in OPNsense härten: DNSSEC, Blocklisten, Performance

    Kurzproblem und Zielbild

    In diesem Guide setzt du Unbound DNS in OPNsense härten: DNSSEC, Blocklisten, Performance 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

    # GUI: Services > Unbound DNS
    # DNSSEC aktivieren, DoT Upstream optional, Access Lists einschränken
    unbound-control status
    unbound-control list_local_zones

    3) Dienst/Funktion gezielt prüfen

    drill dnssec-failed.org @OPNSENSE_IP
    drill cloudflare.com @OPNSENSE_IP
    clog /var/log/resolver/latest.log | tail -n 80

    4) Betriebsgrenzen testen

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

    Validierung / Checks

    drill dnssec-failed.org @OPNSENSE_IP
    drill cloudflare.com @OPNSENSE_IP
    clog /var/log/resolver/latest.log | tail -n 80
    # 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

  • Grafana Alerts in der Praxis: Contact Points, Routing, Noise reduzieren

    Grafana Alerts in der Praxis: Contact Points, Routing, Noise reduzieren

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Grafana Alerts in der Praxis: Contact Points, Routing, Noise reduzieren

    Kurzproblem und Zielbild

    In diesem Guide setzt du Grafana Alerts in der Praxis: Contact Points, Routing, Noise reduzieren 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

    # Grafana UI: Alerting > Contact points / Notification policies
    # Testalarm erstellen und auslösen
    curl -s http://localhost:3000/api/health

    3) Dienst/Funktion gezielt prüfen

    # UI prüfen: Alert state history
    journalctl -u grafana-server -n 100 --no-pager

    4) Betriebsgrenzen testen

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

    Validierung / Checks

    # UI prüfen: Alert state history
    journalctl -u grafana-server -n 100 --no-pager
    # 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

  • Proxmox VLAN-Trunk aufsetzen: Bridge, VM-Tagging, Fehleranalyse

    Proxmox VLAN-Trunk aufsetzen: Bridge, VM-Tagging, Fehleranalyse

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Proxmox VLAN-Trunk aufsetzen: Bridge, VM-Tagging, Fehleranalyse

    Kurzproblem und Zielbild

    In diesem Guide setzt du Proxmox VLAN-Trunk aufsetzen: Bridge, VM-Tagging, Fehleranalyse 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

    ip -br link
    cat /etc/network/interfaces
    bridge vlan show
    pvesh get /nodes/$(hostname)/network

    3) Dienst/Funktion gezielt prüfen

    ip -d link show vmbr0
    bridge vlan show
    ping -c 3 GATEWAY_VLAN

    4) Betriebsgrenzen testen

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

    Validierung / Checks

    ip -d link show vmbr0
    bridge vlan show
    ping -c 3 GATEWAY_VLAN
    # 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