Initial version of JR IT backup of internal backend.
This commit is contained in:
113
README.md
Normal file
113
README.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user