Sign inSign up

alcapone1933/docker-volume-backup

By alcapone1933

•Updated 9 months ago

Der Docker Backup Manager ist eine Lösung, um Docker-Volumes zu sichern und wiederherzustellen.

Image
0

2.5K

alcapone1933/docker-volume-backup repository overview

⁠docker-volume-backup

⁠🛠 Docker Backup Manager v0.0.2

⁠Was macht dieses Tool?

Der Docker Backup Manager ist eine spezialisierte Lösung, um Docker-Volumes sicher zu sichern und wiederherzustellen. Das Tool löst das Problem inkonsistenter Daten, indem es Container während des Backups stoppt und anschließend automatisch wieder startet.

Es bietet zwei Betriebsmodi:

  1. Web-Interface: Grafische Oberfläche für manuelle Steuerung und Konfiguration.
  2. CLI-Modus: Direkte Befehlsausführung für Automatisierung (Cronjobs), ohne dass der Webserver laufen muss.

⁠🚀 Installation & Docker Compose

Da das Tool Docker-Befehle an den Host weitergibt, ist ein korrektes Mapping der Pfade lebenswichtig.

⁠⚠️ Wichtiger Hinweis zum Backup-Pfad:

Der Pfad für die Backups MUSS auf dem Host und im Container identisch sein. Wenn du auf dem Host /opt/backup-data nutzt, muss dieser im Container ebenfalls als /opt/backup-data gemountet werden.

Beispiel docker-compose.yml:

services:
  backup-manager:
    image: alcapone1933/docker-volume-backup:latest
    container_name: docker-backup-manager
    restart: unless-stopped
    ports:
      - "8085:8080"
    volumes:
      # WICHTIG: Zugriff auf Docker auf dem Host
      - /var/run/docker.sock:/var/run/docker.sock
      # Ort für die Konfiguration (config.json)
      - ./app_data:/app/data
      # Host-Pfad und Container-Pfad MÜSSEN identisch sein:
      - /opt/backup-volume:/opt/backup-volume 
    environment:
      - TZ=Europe/Berlin
      - APP_PORT=8080
      - APP_DATA=/app/data
      - APP_VOLUMES_BACKUP=/opt/backup-volume
      - APP_DEBUG=false
      - HOSTNAME=docker-volume-backup

⁠⚙️ Umgebungsvariablen (Variablen)

VariableStandardwertBeschreibung
APP_PORT8080Port für das Web-Interface.
APP_DATA/app/dataSpeicherort der config.json.
APP_VOLUMES_BACKUP/opt/backup-volumePflicht: Zielpfad (Host & Container identisch).
APP_DEBUGfalseAktiviert detaillierte Docker-Logs.
HOSTNAMEdocker-backup-managerVerhindert, dass der Manager sich selbst stoppt.
KombinationVerhalten
Keine EnvTool nutzt das eingebettete CSS/HTML. Läuft komplett offline.
APP_DEBUG=trueDocker-Befehle werden geloggt. Web-UI kommt weiterhin aus der Binary.
APP_WEB_DEBUG=trueWeb-UI wird live aus dem Ordner ./web geladen (ideal zum Designen).
Hinter ProxyTool erkennt Pfade wie /mein-tool/api/... automatisch, da sie relativ sind.

⁠💻 CLI Benutzung (Programm-Befehle)

Wenn du dich im Container befindest oder das Programm direkt aufrufst, nutzt du den Befehl docker-backup-manager. Das Programm erkennt die Flags und führt die Aktion sofort aus.

Syntax: docker-backup-manager [AKTION] [OPTIONEN]

⁠AKTIONEN:
  • --backup : Sichert Volumes laut Web-UI Auswahl.
  • --backup-all : Sichert restlos alle auf dem System gefundenen Volumes.
  • --restore : Wiederherstellung markierter Volumes aus dem letzten Backup.
  • --restore-all : Alles aus einem Datums-Ordner wiederherstellen.
⁠OPTIONEN:
  • --vols "v1,v2" : Liste der Volumes (kommagetrennt).
  • --res-date "DATE" : Zeitstempel für Restore (z.B. 2024-12-24_03-00).
  • --res-delete yes/no : Inhalt vor Restore löschen (Standard: yes).
  • --ignore-con : Container während der Aktion NICHT stoppen.
  • --stop-con "c1,c2" : Nur diese spezifischen Container stoppen.
  • --config [PFAD] : Pfad zur config.json überschreiben.
  • --port [PORT] : Web-Server Port ändern.
  • --b-dir [PFAD] : Backup-Pfad überschreiben.
  • --version : Zeigt die installierte Version.

⁠📖 Praxis-Beispiele (Vollständige Sammlung)

⁠A. Backup-Beispiele

1. Vollständiges System-Backup: Sichert alle Volumes und stoppt alle betroffenen Container.

docker-backup-manager --backup-all

2. Gezielte Sicherung mit Container-Filter: Sichert nur db_data und stoppt dabei nur den Container mariadb_server.

docker-backup-manager --backup --vols "db_data" --stop-con "mariadb_server"

3. Hot-Backup (Keine Downtime): Sichert alle Volumes, ohne Container zu stoppen (Achtung bei Datenbanken!).

docker-backup-manager --backup-all --ignore-con

4. Backup mit spezieller Konfiguration: Verwendet eine alternative Konfigurationsdatei.

docker-backup-manager --backup --config "/app/data/prod_backup.json"

⁠B. Restore-Beispiele

5. Einzelnes Volume wiederherstellen: Spielt das letzte Backup für das Volume nextcloud_files ein.

docker-backup-manager --restore --vols "nextcloud_files"

6. Disaster Recovery (Zeitpunkt-Wiederherstellung): Stellt alle Volumes auf den Stand vom 20. Dezember 2024 um 03:00 Uhr zurück.

docker-backup-manager --restore-all --res-date "2024-12-20_03-00"

7. Restore ohne Datenverlust im Ziel: Stellt Daten bereit, löscht aber vorhandene Dateien im Ziel-Volume nicht vorher.

docker-backup-manager --restore --vols "app_data" --res-delete no

⁠C. Automatisierung via Cron (Host-Ebene)

Um das Programm im Container vom Host aus zu steuern, nutzt du:

# Täglich um 03:00 Uhr Voll-Backup
0 3 * * * docker exec docker-backup-manager /usr/local/bin/docker-backup-manager --backup-all >> /var/log/docker-backup.log 2>&1


⁠🧹 Automatisches Aufräumen (Host-Skript)

Behalte immer nur die neuesten 30 Backups, um Speicherplatz zu sparen:

#!/bin/bash
BACKUP_PATH="/opt/backup-volume"
KEEP=30
cd "$BACKUP_PATH" || exit
ls -dt */ | tail -n +$((KEEP + 1)) | xargs -I {} rm -rf "{}"
echo "Cleanup durchgeführt: Nur die neuesten $KEEP Ordner wurden behalten."


⁠📄 Das Host-Backup-Skript (backup-host.sh)

Dieses Skript wird direkt auf deinem Linux-Server (Host) ausgeführt. Es nutzt die native Geschwindigkeit der Go-Binärdatei und kümmert sich im Anschluss sofort um die Speicherbereinigung (Rotation).

⁠Das Skript
#!/bin/bash

# ==============================================================================
# Docker Backup Manager - Host Automation Script
# ==============================================================================

# 1. PFADE DEFINIEREN
# Pfad zur kompilierten Go-Binärdatei
APP_BIN="/usr/local/bin/docker-backup-manager"

# Absoluter Pfad zum Backup-Verzeichnis auf deinem Server
BACKUP_DIR="/opt/backup-volume"

# Wie viele Backup-Ordner (Zeitstempel) sollen behalten werden?
KEEP_BACKUPS=30

# ------------------------------------------------------------------------------

echo "------------------------------------------------------------"
echo "🚀 Start der Backup-Automatisierung: $(date '+%Y-%m-%d %H:%M:%S')"
echo "------------------------------------------------------------"

# SCHRITT 1: Backup ausführen
# Nutzt --backup-all für eine komplette System-Sicherung.
echo "📦 Starte docker-backup-manager..."
$APP_BIN --backup-all --b-dir "$BACKUP_DIR"

# Rückgabewert prüfen (0 = Erfolg)
if [ $? -eq 0 ]; then
    echo "✅ Backup-Lauf erfolgreich beendet."
else
    echo "❌ FEHLER: Das Backup-Programm wurde unerwartet abgebrochen!"
    exit 1
fi

# SCHRITT 2: Bereinigung (Rotation)
echo "🧹 Starte Bereinigung (Behalte die neuesten $KEEP_BACKUPS Backups)..."

if [ -d "$BACKUP_DIR" ]; then
    cd "$BACKUP_DIR" || exit
    
    # Logik: Sortiert nach Datum, behält die neuesten X und löscht den Rest.
    ls -dt */ | tail -n +$((KEEP_BACKUPS + 1)) | xargs -I {} rm -rf "{}"
    
    echo "✅ Bereinigung abgeschlossen."
else
    echo "⚠️  HINWEIS: Backup-Verzeichnis nicht gefunden. Cleanup übersprungen."
fi

echo "------------------------------------------------------------"
echo "🏁 Gesamtvorgang abgeschlossen am: $(date '+%Y-%m-%d %H:%M:%S')"
echo "------------------------------------------------------------"


⁠⏰ Automatisierung mit Cronjob

Um die Backups vollautomatisch im Hintergrund laufen zu lassen, nutzt du unter Linux den Dienst cron.

⁠1. Skript vorbereiten

Speichere den obigen Code in einer Datei (z. B. /home/user/scripts/backup-host.sh) und mache sie ausführbar:

chmod +x /home/user/scripts/backup-host.sh

⁠2. Cron-Tabelle öffnen

Öffne den Editor für deine Benutzer-Crontab:

crontab -e

⁠3. Zeitplan festlegen

Füge am Ende der Datei eine Zeile hinzu. Hier sind gängige Beispiele:

  • Täglich um 03:00 Uhr morgens:
0 3 * * * /bin/bash /home/user/scripts/backup-host.sh >> /var/log/docker-backup.log 2>&1

  • Alle 12 Stunden (00:00 und 12:00 Uhr):
0 */12 * * * /bin/bash /home/user/scripts/backup-host.sh >> /var/log/docker-backup.log 2>&1

Erklärung der Syntax:

  • 0 3 * * *: Minute (0), Stunde (3), Tag, Monat, Wochentag.
  • /bin/bash ...: Der Pfad zum Skript.
  • >> /var/log/docker-backup.log 2>&1: Schreibt alle Ausgaben und Fehler in eine Logdatei, damit du später prüfen kannst, ob alles geklappt hat.

Tag summary

Content type

Image

Digest

sha256:46f61b1a5…

Size

31.4 MB

Last updated

9 months ago

docker pull alcapone1933/docker-volume-backup