rclone.conf — pCloud-Zugang.restic-password — Restic-Schlüsselcooldb-backup.sh + cooldb-bak-rotate.shmsmtprc — Mail-Config| Komponente | Version | Notiz |
|---|---|---|
| OS | Debian 13 (Trixie) | fĂĽr 1:1 Recovery gleiche Version nutzen |
| Apache | 2.4.66 | Module: rewrite, ssl, php |
| PHP | 8.4.16 | 9 Module installiert |
| MariaDB | 11.8.6 | max_allowed_packet=128M |
| Restic | 0.18.0 | via apt + rclone-Helfer |
| rclone | installiert in /usr/bin/rclone | Backend: pcloud |
| VM-IP | 192.168.178.121 | FritzBox-LAN, Subnetz /24 |
| Hostname | 121-CoolDB-Catta | im Restic mit dieser Host-Tag |
| DB-Größe | ~61 MB | cooldb / cooluser |
rclone:pcloud:Backups/CoolDB-Catta-Restic
| Port | Quelle | Zweck |
|---|---|---|
| 80/tcp | ĂĽberall | HTTP |
| 443 | ĂĽberall | HTTPS |
| 22/tcp | 192.168.178.0/24 (LAN) | SSH (nur LAN!) |
1Frische Debian 13 (Trixie)-VM aufsetzen
In Proxmox neue VM erstellen, Debian-13-ISO booten, Standard-Installation. Hostname: 121-CoolDB-Catta (wichtig — Restic merkt sich den Host-Tag).
2IP-Adresse setzen
Statische IP 192.168.178.121, Gateway 192.168.178.1 (FritzBox), DNS 192.168.178.1
3System aktualisieren
sudo apt update && sudo apt upgrade -y
1Apache + PHP + MariaDB
sudo apt install -y apache2 mariadb-server \
php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-gd \
php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline \
php8.4-xml php8.4-zip libapache2-mod-php8.4 \
php-common php-curl php-gd php-mbstring php-mysql php-xml php-zip
2Restic + rclone + msmtp + curl
sudo apt install -y restic rclone msmtp msmtp-mta curl ufw
3Apache-Module aktivieren
sudo a2enmod rewrite ssl php8.4
sudo systemctl restart apache2
4UFW-Firewall einrichten
sudo ufw allow 80/tcp
sudo ufw allow 443
sudo ufw allow from 192.168.178.0/24 to any port 22 proto tcp
sudo ufw enable
sudo ufw status verbose
1rclone-Konfiguration
sudo mkdir -p /root/.config/rclone
sudo cp rclone.conf /root/.config/rclone/rclone.conf
sudo chmod 600 /root/.config/rclone/rclone.conf
sudo chown root:root /root/.config/rclone/rclone.conf
# Testen
sudo rclone lsd pcloud:Backups
Erwartung: CoolDB-Catta-Restic erscheint in der Liste.
2Restic-Passwort
sudo cp .restic-password /root/.restic-password
sudo chmod 600 /root/.restic-password
3Backup-Skripte
sudo cp cooldb-backup.sh /usr/local/bin/
sudo cp cooldb-bak-rotate.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/cooldb-*.sh
4msmtp-Mail-Config
sudo cp msmtprc /etc/msmtprc
sudo chmod 640 /etc/msmtprc
sudo chown root:msmtp /etc/msmtprc 2>/dev/null || sudo chown root:root /etc/msmtprc
# Testen
echo "Recovery-Test" | sudo msmtp DEINEMAIL@example.com
1Snapshot-Liste prĂĽfen
export RESTIC_PASSWORD_FILE=/root/.restic-password
export RESTIC_REPOSITORY="rclone:pcloud:Backups/CoolDB-Catta-Restic"
sudo -E restic snapshots
Erwartung: Liste mit Snapshots — der neueste oben.
2Neuesten Snapshot wiederherstellen
sudo -E restic restore latest --target /
Stellt wieder her:
/var/www/cool/ — App-Code/var/backups/cooldb/ — DB-Dump/etc/msmtprc — Mail-Config (überschreibt unseren Cope von oben)/etc/apache2/sites-available/cool.conf/etc/php/8.4/apache2/php.ini/etc/mysql/mariadb.conf.d/50-server.cnf/etc/cron.d/cooldb-* (3 Dateien)/usr/local/bin/cooldb-*.sh (überschreibt Cope von oben mit aktuellster Version)1MariaDB-Konfig anpassen (wegen großer Anhänge)
sudo systemctl restart mariadb
# Pruefen ob die wiederhergestellte 50-server.cnf greift:
sudo mysql -e "SHOW VARIABLES LIKE 'max_allowed_packet';"
Erwartung: 134217728 (= 128 MB)
2Datenbank + User anlegen
sudo mysql <<'SQL'
CREATE DATABASE cooldb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'cooluser'@'localhost' IDENTIFIED BY 'Nurdu23212';
GRANT ALL PRIVILEGES ON cooldb.* TO 'cooluser'@'localhost';
FLUSH PRIVILEGES;
SQL
cooldb-backup.sh als DB_PASS. Im Notfall dort nachschauen.
3Neuesten DB-Dump einspielen
# Neuestes Dump-File finden
sudo ls -lt /var/backups/cooldb/*.sql | head -3
# Einspielen (Pfad anpassen)
sudo mysql -u cooluser -pNurdu23212 cooldb < /var/backups/cooldb/cooldb-NEUESTES-FILE.sql
# Verifikation
sudo mysql -u cooluser -pNurdu23212 cooldb -e "SHOW TABLES;"
Erwartung: vault_categories, vault_items, vault_attachments, vault_todos, vault_todo_subtasks, vault_todo_lists, vault_tags, etc.
1vhost aktivieren
sudo a2ensite cool.conf
sudo a2dissite 000-default.conf 2>/dev/null
sudo apache2ctl configtest
sudo systemctl reload apache2
2Permissions setzen
sudo chown -R www-data:www-data /var/www/cool
sudo chmod -R 755 /var/www/cool
1Cron-Dateien sind nach Restore in /etc/cron.d/
ls /etc/cron.d/cooldb-*
Erwartung: 3 Dateien — backup, reminder, bak-rotate
2Cron-Service neu laden
sudo systemctl reload cron
3Reminder testen (läuft jede Minute)
sudo tail -f /var/log/syslog | grep CRON
# Strg+C zum Abbrechen
1Browser-Test
Im Browser http://192.168.178.121 oder https://... öffnen → Login-Maske erscheint? Wenn ja: einloggen.
2Daten prĂĽfen
Cool_DB-Tab → Einträge sichtbar? · ToDo-Tab → Listen + ToDos sichtbar? · Anhänge → klicken auf Vorschau/Download?
3Backup-Test
sudo /usr/local/bin/cooldb-backup.sh
Erwartung: "âś“ Backup abgeschlossen"
| Problem | Lösung |
|---|---|
| rclone-Test schlägt fehl | pCloud-Token in rclone.conf abgelaufen — neu generieren mit rclone config reconnect pcloud: |
| Restic kann Repo nicht öffnen | Passwort in .restic-password falsch — vergleiche Bytes mit Bundle-Datei |
| Apache zeigt 500 | sudo tail -30 /var/log/apache2/error.log — meist PHP-Modul fehlt |
| DB-Login schlägt fehl | Passwort in cooldb-backup.sh nachschauen (DB_PASS=...) |
| Anhänge laden nicht | max_allowed_packet in MariaDB prüfen — muss 128M sein |
| Mail wird nicht versendet | msmtp-Test: echo "test" | msmtp deine@mail |
| Reminder läuft nicht | cat /etc/cron.d/cooldb-reminder + systemctl reload cron |
Alles wieder online — Cool_DB läuft. Backup wird ab morgen 03:00 automatisch wieder ausgeführt. Restic-Snapshots in pCloud bleiben erhalten.