
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_<id>
– 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
Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!