Webseiten automatisch via FTP auf den Rasperry PI sichern (Backup)

wp backup aufgabe anlegen b

Mittlerweile sind meine Rasperry PI’s die all-round-lösung für sämtliche, lästige Probleme. Auch meine (Webseiten) sichere ich nun automatisch mit dem Rasperry Pi über das Tool ftp oder lftp.

Das man auch erstellen von Backups eigener Webseiten nicht vernachlässigen sollte, wird hoffentlich den meisten klar sein. Auch wenn es selten ist das ein Update fehlschlägt, der Server abstürzt oder die Seite gehackt wird, ist ein funktionierendes Backup gerade dann sehr wichtig. Wichtig aber auch, dass es automatisiert im Hintergrund läuft, denn mit langweiligen wiederkehrenden Aufgaben, habe ich auch nicht unbedingt was am Hut.

Die Vergangenheit zeigt, dass ich dann lieber etwas Entwicklungsarbeit investiere um mir sollche Aufgaben zu automatisieren oder zumindest zu erleichtern.
Bisher habe ich immer mal quartalsweise ein Backup manuell angestoßen.

Das Backup der Webseite muss auch nicht immer lokal (zu Hause) sein, besser ist es trotzdem es bei sich zu haben, besser noch Offline, denn ist der Webspace erst mal gehackt, wäre dann auch das auf dem Webspace gelagerte Backup im Eimer.

WordPress automatisch mit dem Rasperry PI sichern

Bei mir läuft das Backup nun über meinen alten RasperryPi.

Was brauchen wir nun um WordPress einfach und automatisiert zu sichern?

Als erstes ein Plugin wie WP Backup, um ein Backup der Website inkluse Datenbank zu erstellen und auf dem Webspace abzulegen. Danach kommt der RasPi ins spiel auf dem das folgende Script läuft und die Daten per FTP abholt.

WP Backup Job einrichten

In WP Backup habe ich den Job wie folgt eingerichtet. Gestartet wird der Job via URL Aufruf vom RasperryPI (curl Befehl). Danach gibt es eine kurze Pause von 1-2 Minuten, wobei anschließend der Raspi anfängt das erstellte Archiv per FTP oder lFTP runterzuladen und zu löschen.

1. Aufgabe in WP Backp einrichten (Website)
– alles sichern, Dateien, MySQL Daten, XML
– speichern als gezippte Datei in uploads…
– gestartet wird der Job per URL-Aufruf

2. auf dem Rasperry PI
– Backup Script anlegen
– Zugangsdaten eintragen
– testen
– nach dem Download letztes Backup auf dem Webspace löschen, damit wir uns nicht vollmöhlen

Das Script:

Der lftp Befehl mirror wird mit zwei Optionen ausgeführt, damit alles was runtergeladen wurde, im Nachgang gelöscht wird. „mirror –delete“

#!/usr/bin/bash
# Backup ftp-sites
#

username="ftp-user"
pass="ftp-password"
ftp="ftp://www.yourwebsite.de:21 TLS" # Port 21 und TLS
localdir="/home/superpi/backups/meinewebsite/"
remotedir="/wordpress/wp-content/uploads/backwpup-fxxxxa-backups/vollbackup/"
joblink="https://www.yourwebsite.de/wp-cron.php?_nonce=xxxx&backwpup_run=runext&jobid=1"
waitingtime="300" #secounds

## starts WP Backupjob
echo "execute job: $joblink"
curl $joblink

echo "backup $ftp"
read -t $waitingtime -p "waiting:..."

## check targetdir
if [[ "$localdir" ]]; then
        echo "folder exists: $localdir"
else
        mkdir $localdir
        echo "folder has been created: $localdir"
fi

## start FTP backup
lftp -u $username,$pass $ftp -e "set ftp:ssl-allow off" << EOF
mirror $remotedir $localdir
bye
EOF


echo "download done."

Möchte man nicht extra ein Plugin installieren, kann man auch Order oder den gesamten Webspace per lFTP downloaden. Vergesst nicht an dieser Stelle, dass tatsächlich die WordPress-Datenbank die kostbare Berichte und Inhalte enthält! Ein Backup der MySQL-Datenbank per Script zu erstellen ist wieder ein ganz andere Leid, gerade ohne root-Zugriff. Im Zweifel bleibt da nur der phpMyAdmin des Providers.

Wie du den gesamten Webspace rekursiv (mit Unterordnern) runterlädst, wird im folgende Abschnitt beschrieben.

Weitere Infos und Parameter zu lftp: https://linux.die.net/man/1/lftp

den kompletten Webspace automatisch mit dem Rasperry PI sichern

Setzt ihr ein anderes CMS wie JOOMLA ein oder eine OWNCloud, Nextcloud oder was auch immer, und das wollt ihr alles einmal sichern, dann kann man das ziemlich intelligent mit der MIRROR-Funktion des Linux Tools lFTP umsetzen. Vergesst aber nicht die Datenbanken die bei Joomla, OWNCloud und Co. im Hintergrund laufen!

Damit nur die Änderungen im späteren Verlauf gesichert werden, muss man noch „–only-newer“ hinzufügen. Auf die Option „–delete“ verzichten wir hier da ansonsten der Webspace geleert werden würde.

#!/usr/bin/bash
# Backup ftp-sites without deleting downloaded remote files
#

username="<ftp-user>"
pass="<ftp-password>"
ftp="ftp://www.yourwebsite.de:21 TLS"
localdir="/home/pi/backups/wordpress"
remotedir=""
joblink="https://www.yourwebsite.de/wp-cron.php?_nonce=xxxxxx&backwpup_run=runext&jobid=1"
waitingtime="300" #secounds

## starts WP Backupjob
echo "execute job: $joblink"
curl $joblink

echo "backup $ftp"
read -t $waitingtime -p "waiting:..."

## check targetdir
if [[ "$localdir" ]]; then
        echo "folder exists: $localdir"
else
        mkdir $localdir
        echo "folder has been created: $localdir"
fi

## start FTP backup
lftp -u $username,$pass $ftp -e "set ftp:ssl-allow off" << EOF
mirror --only-newer $remotedir $localdir
bye
EOF

echo "Backup has been finished."

anschließender Virenscan mit ClamScan

Ganz praktisch… ist der Webspace erst mal runtergeladen, kann man das Backup auch mit CLAMAV auf Schadsoftware untersuchen. So hat man „eine“ kleine Kontrolle dass der Webspace sauber ist.

clamscan [options] [file/directory/-]
### ein Beispiel
clamscan /backups/

weitere Informationen zu CLAMscan findet ihr in der DOKU:
https://docs.clamav.net/manual/Usage/Scanning.html

Wer auch noch seine Docker-Umgebung einfach und schnell sichern möchte, findet die passende Anleitung ….

weitere Artikel zu Backup, Datensicherung und Rasperry PI