Files
2026-06-07 20:02:33 +02:00

3.1 KiB

Dokumentation

Ablauf

  1. Das Script ermittelt das Projektverzeichnis.
  2. Es lädt docker-backup-sftp-uploader.conf aus demselben Verzeichnis.
  3. Es legt Backup- und Log-Verzeichnis an.
  4. Es prüft benötigte Kommandos, Pflichtwerte und freien Speicher.
  5. Es stoppt Docker mit docker compose down.
  6. Es erstellt ein tar.gz-Archiv des Projektordners.
  7. Es startet Docker mit docker compose up -d.
  8. Es lädt das Archiv per SFTP hoch.
  9. Es verschickt bei Erfolg oder Fehler eine Mail, sofern Mailversand konfiguriert ist.
  10. Es löscht das lokale Archiv, außer KEEP_LOCAL_BACKUP=true ist gesetzt.

Konfiguration

Die Konfiguration liegt standardmäßig in docker-backup-sftp-uploader.conf neben dem Script. Alternativ kann ein anderer Pfad über CONFIG_FILE angegeben werden:

CONFIG_FILE="/etc/docker-backup-sftp-uploader.conf" ./docker-backup-sftp-uploader.sh
Variable Standard Beschreibung
SFTP_HOST Pflichtwert Hostname des SFTP-Servers
SFTP_PORT 22 Port des SFTP-Servers
SFTP_USER Pflichtwert SFTP-Benutzer
SFTP_PASS Pflichtwert SFTP-Passwort
SFTP_REMOTE_DIR Pflichtwert Zielverzeichnis auf dem SFTP-Server
MAIL_TO leer Empfängeradresse; leer deaktiviert Mailversand
MAIL_FROM leer Optionaler Absender für mail -r
BACKUP_DIR leer = Ordner neben dem Projekt Lokales Ziel für Archive
LOG_DIR ${BACKUP_DIR}/logs Lokales Ziel für Logs
KEEP_LOCAL_BACKUP false Lokales Archiv nach Lauf behalten
MIN_FREE_MB 1024 Zusätzlicher freier Speicher, der neben der Quellgröße vorhanden sein muss

Voraussetzungen

Auf dem Server müssen diese Kommandos verfügbar sein:

  • docker
  • tar
  • gzip
  • sshpass
  • sftp
  • optional mail

Mailversand

Das Script nutzt das lokale Kommando mail. Auf Debian/Ubuntu kann dafür zum Beispiel mailutils, bsd-mailx oder ein passendes Mail-Relay wie msmtp eingerichtet sein.

Wenn keine Mail ankommt:

  • prüfen, ob MAIL_TO gesetzt ist
  • prüfen, ob mail installiert ist: command -v mail
  • einen manuellen Test ausführen: echo test | mail -s "Test" empfaenger@example.com
  • lokale Mail-Logs prüfen, zum Beispiel /var/log/mail.log
  • falls MAIL_FROM Probleme macht, testweise leer lassen

Speicherplatz und große Dateien

Das Archiv wird bewusst nicht in /tmp erstellt, weil /tmp auf vielen Systemen als kleiner tmpfs-Mount eingerichtet ist. Für große Projekte sollte BACKUP_DIR auf ein Dateisystem mit ausreichend freiem Speicher zeigen, zum Beispiel:

BACKUP_DIR="/srv/backups/mein-projekt"

Das Script prüft vor dem Docker-Stopp grob, ob genug Platz vorhanden ist. Der Mindestbedarf entspricht ungefähr der Quellgröße plus 10 Prozent Reserve plus MIN_FREE_MB.

Der SFTP-Upload schreibt zuerst ${BACKUP_FILE}.part und benennt die Datei nach erfolgreichem Upload um. Dadurch bleibt auf dem Zielserver erkennbar, ob ein Upload vollständig abgeschlossen wurde.

Cron-Beispiel

0 3 * * * /pfad/zum/docker-backup-sftp-uploader.sh