
🌐 Auch auf: English · Français · Español
Wolltest du schon immer deine selbst gehostete Nextcloud-Instanz sichern, ohne dabei Blut und Wasser zu schwitzen? Keine Lust mehr, Ordner von Hand zu rsyncen oder eine kaputte Datenbank zu riskieren? Anschnallen, Sysadmin – hier kommt ein schlankes kleines Bash-Skript, das die Drecksarbeit für dich erledigt. Vom Einschalten des Wartungsmodus über das Synchronisieren deines externen Datenverzeichnisses bis zum Dump deiner MySQL-Datenbank – alles in einem einzigen Durchlauf. 🧠
📜 Was macht dieses Skript?
Das Skript sichert deinen entfernten Nextcloud-Server in 6 Schritten:
- Wartungsmodus einschalten
- MySQL-Datenbank-Dump erstellen
- Das Verzeichnis
config/sichern - Eigene
themes/sichern (optional) - Das externe Datenverzeichnis synchronisieren
- Wartungsmodus wieder ausschalten
Das alles mit rsync, ssh und ein bisschen Shell-Magie. Das Ergebnis: ein vollautomatisches Backup, das du per Cron bis zum Abwinken laufen lassen kannst.
🧠 Das Skript (einfach einfügen & anpassen)
#!/bin/bash
# === CONFIGURATION ===
REMOTE_USER="root"
REMOTE_HOST="your.remote.host"
REMOTE_SSH_PORT=22
SSH_KEY="$HOME/.ssh/id_rsa"
# Local backup destination (no versioning)
LOCAL_BACKUP_DIR="/data/backup/nextcloud/yourinstance"
mkdir -p "$LOCAL_BACKUP_DIR"
# Remote Nextcloud directory (contains everything)
REMOTE_NC_DIR="/var/www/html/nextcloud"
# Database credentials (use .my.cnf or secured method in production)
REMOTE_DB_NAME="your_db_name"
REMOTE_DB_USER="your_db_user"
# REMOTE_DB_PASS is omitted for security
# === BACKUP START ===
echo "🛡️ [1/4] Enabling maintenance mode ..."
ssh -i "$SSH_KEY" -p $REMOTE_SSH_PORT -o LogLevel=ERROR "$REMOTE_USER@$REMOTE_HOST"
\
"sudo -u www-data php $REMOTE_NC_DIR/occ maintenance:mode --on" > /dev/null
echo "🗃️ [2/4] Creating database dump ..."
ssh -i "$SSH_KEY" -p $REMOTE_SSH_PORT -o LogLevel=ERROR "$REMOTE_USER@$REMOTE_HOST"
\
"mysqldump -u $REMOTE_DB_USER -p'********' $REMOTE_DB_NAME" > "$LOCAL_BACKUP_DIR/db.sql"
echo "📦 [3/4] Backing up entire Nextcloud directory from $REMOTE_NC_DIR ..."
rsync -az --delete -e "ssh -i $SSH_KEY -p $REMOTE_SSH_PORT -o LogLevel=ERROR"
\
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_NC_DIR/" "$LOCAL_BACKUP_DIR/nextcloud/"
echo "✅ [4/4] Disabling maintenance mode ..."
ssh -i "$SSH_KEY" -p $REMOTE_SSH_PORT -o LogLevel=ERROR "$REMOTE_USER@$REMOTE_HOST"
\
"sudo -u www-data php $REMOTE_NC_DIR/occ maintenance:mode --off" > /dev/null
🔒 Vergiss nicht, deine Geheimnisse einzutragen
- <your_db_name> – Der Name deiner Nextcloud-Datenbank
- <your_db_user> – Der Datenbankbenutzer
- <your_db_password> – Das Passwort (gut aufbewahren, Leute!)
- REMOTE_HOST / PORT / DIRS – An den Aufbau deines Servers anpassen
Für Geheimnisse nimmt man am besten Umgebungsvariablen oder externe .env-Dateien. Hartkodieren ist für schnelle Quick’n’dirty-Skripte okay – pushe sie nur nicht auf GitHub 😅.
🧪 Erst testen, dann automatisieren
Bevor du das in deine Crontab wirfst, teste es von Hand und schau dir deinen Backup-Ordner an. Ein vollständiges Backup sollte Folgendes enthalten:
db.sql– Deine komplette Nextcloud-Datenbankconfig/– Konfigurationsdateienthemes/– Eigene Themes (falls vorhanden)datafiles/– Alle von Benutzern hochgeladenen Dateien
Du kannst noch Logging, Fehlerbehandlung, Versionierung und E-Mail-Berichte ergänzen – aber für die meisten Clouds im Heimbetrieb erledigt dieses einfache Skript den Job. ☁️
🤖 TL;DR
Wenn du Nextcloud selbst hostest, ist das hier das Skript, von dem du nicht wusstest, dass du es brauchst. Per SSH rein, rsyncen, was das Zeug hält, die DB dumpen und ruhig schlafen, weil deine Cloud sicher ist – zumindest bis jemand über das Stromkabel vom NAS stolpert. 😉
Happy Hacking & sichere verantwortungsvoll! 🧬





