Nextcloud Sicher- & Wiederherstellung
von Carsten Rieger|Aktualisiert 25. April 2021
Nextcloud Sicherung und Wiederherstellung
EIn neuerer Guide ist verfügbar: Nextcloud Backup (Borg) mit De-Duplizierung
Mit dem skizzierten Vorgehen wird der Nextcloud Server regelmäßig gesichert und rotiert. Die Sicherungen enthalten u.a.
– das Web – und Datenverzeichnis: /var/www/nextcloud und /var/nc_data
– sowie die Nextcloud Datenbank.
Ersetzen Sie im weiteren Verlauf bitte den osusername und die Datenbank bzw . das Datenbankppasswort nextcloud mit Ihren Werten.
Beginnen wir und wechseln dazu in den sudo Mode:
sudo -s
1. Nextcloud Wartungsmodus aktivieren:
sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –on
2. Sicherung des Webverzeichnisses:
tar -cpzf /home/osusername/ncserver_`date +”%w”`.tar.gz -C /var/www/nextcloud .
3. Sicherung des Datenverezeichnisses:
tar -cpzf /home/osusername/ncdata_`date +”%w”`.tar.gz -C /var/nc_data .
4. Sicherung der Datenbank:
mysqldump –single-transaction –routines -h localhost -unextcloud -pnextcloud nextcloud > /home/osusername/ncdb_`date +”%w”`.sql
5. Nextcloud Wartungsmodus deaktivieren:
sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –off
Sicherung erstellt.
Wiederherstellung der zuvor erstellten Nextcloud Sicherung
Die Sicherung besteht u.a. aus
– dem Webverzeichnis: /var/www/nextcloud
– dem Datenverzeichnis: /var/nc_data/appdata_
– der Datenbank: nextcloud.
Wir demonstrieren die exemplarische Herstellung einer Montags-Sicherung (_1). Wechseln Sie dafür zuerst in den sudo Mode:
sudo -s
1. Nextcloud Wartungsmodus aktivieren:
sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –on
2. Stoppen aller relevanten Services:
/usr/sbin/service nginx stop
/usr/sbin/service php7.4-fpm stop
3. Löschen der alten Verzeichnisse:
rm -r /var/www/nextcloud/
rm -r /var/nc_data/
4. Anlegen der Verzeichnisse und Entpacken der Sicherung:
mkdir -p /var/www/nextcloud/
mkdir -p /var/nc_data/
tar -xpzf /home/osusername/ncserver_1.tar.gz -C /var/www/nextcloud/
tar -xpzf /home/osusername/ncdata_1.tar.gz -C /var/nc_data/
5. Berechtigungen setzen:
chown -R www-data:www-data /var/nc_data /var/www
6. Nextcloud Datenbank wiederherstellen:
– Löschen der alten Datenbank
mysql -h localhost -uroot -pnextcloud -e “DROP DATABASE nextcloud”
– Anlegen einer leeren Datenbank
mysql -h localhost -uroot -pnextcloud -e “CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci”
– Berechtigungen setzen
mysql -h localhost -uroot -pnextcloud -e “GRANT ALL PRIVILEGES on nextcloud.* to nextcloud@localhost”
– Wiederherstellen der Datenbank
mysql -h localhost -unextcloud -pnextcloud nextcloud < /home/osusername/ncdb_1.sql 7. Neustart der relevanten Services: /usr/sbin/service php7.4-fpm start /usr/sbin/service nginx start 8. Nextcloud fingerprint setzen: Nach einem Daten- oder Datenbankrestore sollte immer occ maintenance:data-fingerprint ausgeführt werden. Dieser Befehl passt den ETag aller Dateien an und teilt den Sync-Clients mit, das Dateien verändert wurden. sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:data-fingerprint 9. Nextcloud Wartungsmodus deaktivieren: sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –off Done. Nachfolgen stelle ich Ihnen ein exemplarisches Backupscript zur Verfügung, das nur noch hinsichtlich der Verzeichnisse und Datenbankparameter angepasst werden muss: !/bin/bash #enbale Maintenance Mode to prevent users from working with Nextcloud sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –on #create directory first: mkdir /backup -p BACKUP_STORE=/backup #create directory first: mkdir /backup-repository -p ARCHIVE_STORE=/backup-repository #declare dateformat and numbering of backups CURRENT_TIME_FORMAT=”%w” #print start date/time echo “START: $(date)” #list of folders to be backed up, feel free to add/remove directories FOLDERS_TO_BACKUP=( “/root/” “/etc/fail2ban/” “/etc/letsencrypt/” “/etc/mysql/” “/etc/nginx/” “/etc/php/” “/etc/ssh/” “/etc/pam.d/” “/etc/ssl/” “/var/www/” “/var/nc_data/” “/nc_data/rainloop-storage/” ) #declare the backup filename ARCHIVE_FILE=”$ARCHIVE_STORE/nc_backup_$(date +$CURRENT_TIME_FORMAT).tar.gz” #change directory cd $BACKUP_STORE #start rsync to back up the folders for FOLDER in ${FOLDERS_TO_BACKUP[@]} do if [ -d “$FOLDER” ]; then echo “Copying $FOLDER…” rsync -AaRx –delete $FOLDER $BACKUP_STORE else echo “Skipping $FOLDER (does not exist!)” fi done #copy the fstab [ -f /etc/fstab ] && cp /etc/fstab $BACKUP_STORE/etc/ #copy the mail configuration [ -f /etc/msmtprc ] && cp /etc/msmtprc $BACKUP_STORE/etc/ #create a database back up mysqldump –single-transaction -h localhost -unextcloud -pnextcloud nextcloud > $BACKUP_STORE/ncdb_date +”%w”.sql
#print the database backup size
mysql -hlocalhost -unextcloud -pnextcloud -e “SELECT table_schema ‘DB’,round(sum(data_length+index_length)/1024/1024,1) ‘Size (MB)’ from information_schema.tables WHERE table_schema = ‘nextcloud’;”
#create the directories
mkdir -p $(dirname $ARCHIVE_FILE)
#compress all data
tar -cpzf $ARCHIVE_FILE .
#print back up size
echo “nc_backup size: $(stat –printf=’%s’ $ARCHIVE_FILE | numfmt –to=iec)”
#stop all services
/usr/sbin/service nginx stop
/usr/sbin/service mysql stop
/usr/sbin/service redis-server stop
/usr/sbin/service php7.4-fpm stop
#remove copied files
[ -f $BACKUP_STORE/ncdb_date +”%w”.sql ] && rm -f $BACKUP_STORE/ncdb_date +”%w”.sql
[ -f /etc/msmtprc ] && rm -f $BACKUP_STORE/etc/msmtprc
[ -f /etc/fstab ] && rm -f $BACKUP_STORE/etc/fstab
#restart all services
/usr/sbin/service nginx stop
/usr/sbin/service mysql restart
/usr/sbin/service redis-server restart
#enable if Collabora and/or OnlyOffice are used
/usr/bin/docker restart COLLABORAOFFICE
/usr/sbin/service php7.4-fpm restart
/usr/sbin/service nginx restart
#disable maintanance mode
sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –off
#Nextcloud optimizations
#Ubuntu:
/usr/bin/redis-cli -s /var/run/redis/redis-server.sock <<EOF
#Debian: /usr/bin/redis-cli -s /var/run/redis/redis.sock <<EOF
FLUSHALL
quit
EOF
sudo -u www-data php7.4 /var/www/nextcloud/occ files:scan –all
sudo -u www-data php7.4 /var/www/nextcloud/occ files:scan-app-data
#check for Nextcloud updates
echo “Nextcloud apps are checked for updates…”
sudo -u www-data php7.4 /var/www/nextcloud/occ app:update –all
#print end date/time
echo “END: $(date)”
exit 0