# 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: ```bash 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: ```bash 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 ```cron 0 3 * * * /pfad/zum/docker-backup-sftp-uploader.sh ```