Files
app-backup/README.md

114 lines
3.1 KiB
Markdown

# 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:
```bash
sudo dnf install -y rsync tar zstd gzip rclone mariadb postfix
```
Repo deploy:
```bash
./install.sh
```
## Konfiguration
Konfig anpassen:
- `/etc/app-backup/app-backup.conf`
DB-Credentials (aus Templates):
```bash
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:
```bash
sudo rclone listremotes
sudo rclone lsd onedrive:
```
## Backup Timer
Timer aktivieren (macht install.sh bereits):
```bash
sudo systemctl enable --now app-backup.timer
sudo systemctl list-timers | grep app-backup
```
Manueller Testlauf:
```bash
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)
```bash
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
```bash
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)
```bash
sudo /usr/local/sbin/app-restore.sh --remote-file appbackup_YYYY-mm-dd_HH-MM-SS.tar.zst
```
### Teil-Restore
Nur Nextcloud + DB:
```bash
sudo /usr/local/sbin/app-restore.sh --archive /path/to/archive.tar.zst --only nextcloud,nextcloud-data,db
```
Alles außer Mail:
```bash
sudo /usr/local/sbin/app-restore.sh --archive /path/to/archive.tar.zst --skip mail
```
### Nach dem Restore prüfen
```bash
systemctl status httpd postfix dovecot --no-pager
tail -n 200 /var/log/app-backup/app-restore_*.log
```
Optional (kann dauern):
```bash
sudo -u apache php /var/www/html/nextcloud/occ maintenance:repair
```