114 lines
3.1 KiB
Markdown
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
|
|
```
|