app-backup (Rocky Linux / Apache / Postfix)

Resiliente tägliche Backups für WordPress, Nextcloud und Mail (Postfix/Dovecot optional). Erzeugt timestamped Archive, lädt nach OneDrive via rclone und verschickt einen Mail-Report an den lokalen User johannes.

Enthält zusätzlich ein Restore-Script mit Dry-Run, Service-Stop/Start und Nextcloud Maintenance Mode.

Installation

Pakete:

sudo dnf install -y rsync tar zstd gzip rclone mariadb postfix

Repo deploy:

./install.sh

Konfiguration

Konfig anpassen:

  • /etc/app-backup/app-backup.conf

DB-Credentials (aus Templates):

sudo cp /etc/app-backup/db-wordpress.cnf.example /etc/app-backup/db-wordpress.cnf
sudo cp /etc/app-backup/db-nextcloud.cnf.example /etc/app-backup/db-nextcloud.cnf
sudo chmod 600 /etc/app-backup/db-*.cnf
sudo chown root:root /etc/app-backup/db-*.cnf

rclone für root testen:

sudo rclone listremotes
sudo rclone lsd onedrive:

Backup Timer

Timer aktivieren (macht install.sh bereits):

sudo systemctl enable --now app-backup.timer
sudo systemctl list-timers | grep app-backup

Manueller Testlauf:

sudo systemctl start app-backup.service
journalctl -u app-backup.service -n 200 --no-pager
ls -la /var/log/app-backup/
ls -la /var/backups/app-backup/archives/

Disk-Schutz / Retention (wichtig)

Um ein volllaufendes Dateisystem zu vermeiden, gilt:

  • Lokale Archive werden maximal LOCAL_RETENTION_DAYS Tage aufbewahrt (Standard: 7 Tage)
  • Zusätzlich wird vor und nach dem Staging geprüft, ob mindestens MIN_FREE_GB GiB frei sind (Standard: 10 GiB).
  • Gelöschte Backups werden im Mail-Report aufgeführt (Anzahl + grob freigegebener Speicher).

Einstellungen in /etc/app-backup/app-backup.conf:

  • LOCAL_RETENTION_DAYS=7
  • MIN_FREE_GB=10

Mail-Report

Versand per Postfix /usr/sbin/sendmail an MAIL_TO (Default: johannes). Der Report enthält u.a.:

  • Status (SUCCESS/FAIL), Laufzeit
  • Was gesichert wurde + Größen
  • Upload-Status (rclone)
  • Wie viele alte lokale Backups gelöscht wurden (Retention)

Restore (Wiederherstellung)

Dry-Run (empfohlen)

sudo /usr/local/sbin/app-restore.sh --archive /var/backups/app-backup/archives/appbackup_YYYY-mm-dd_HH-MM-SS.tar.zst --dry-run

Restore aus lokalem Archiv

sudo /usr/local/sbin/app-restore.sh --archive /var/backups/app-backup/archives/appbackup_YYYY-mm-dd_HH-MM-SS.tar.zst

Restore direkt aus OneDrive (Download + Restore)

sudo /usr/local/sbin/app-restore.sh --remote-file appbackup_YYYY-mm-dd_HH-MM-SS.tar.zst

Teil-Restore

Nur Nextcloud + DB:

sudo /usr/local/sbin/app-restore.sh --archive /path/to/archive.tar.zst --only nextcloud,nextcloud-data,db

Alles außer Mail:

sudo /usr/local/sbin/app-restore.sh --archive /path/to/archive.tar.zst --skip mail

Nach dem Restore prüfen

systemctl status httpd postfix dovecot --no-pager
tail -n 200 /var/log/app-backup/app-restore_*.log

Optional (kann dauern):

sudo -u apache php /var/www/html/nextcloud/occ maintenance:repair
Description
Backups the internal data of our nextcloud, wordpress and mariadb to a shared deive which then gets uploaded to onedrive.
Readme 77 KiB
Languages
Shell 100%