====== Backup für Webseiten mit Joomla! ======
Mit diesem bash-Skript wird automatisch ein Webseite via **ftp** vom Server herunterkopiert und auf Wunsch auch die **MySQL-Datenbank** kopiert. Das Skript kann auch mehrere Webseiten auf einmal sichern.
Zur Konfiguration wird eine eigene [[scripts:joomla_backup#Konfigurationsdatei | Konfigurationsdatei]] benötigt, welche die Daten für den FTP-Zugang und die Adresse der Webseite beinhaltet.
Das Backup der MySQL-Datenbank funktioniert nur, wenn der **PHP-Save-Mode** deaktiviert ist!
===== joomla-backup.sh =====
{{googleads>ads_tpl_content_linklist|100% left}}\\
#!/bin/bash
# Copyright by Michael Mayer
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
######################################################################
## Beginn Konfigurationsbereich
##
# Vollständiger Pfad zur Konfigurationsdatei
ACCOUNT_LIST=/etc/joomla-backup.conf
# Zielverzeichnis für das Backup
BACKUP_TO=~/joomla-backup/
##
## Ende Konfigurationsbereich
######################################################################
DAY=`date "+%Y%m%d"`
cd $BACKUP_TO
# Unterverzeichis für das aktuelle Backup anlegen
if [ ! -e $DAY ]; then
mkdir $DAY
fi
cd $DAY
# Schleife für alle Webseiten
for nr in $(cut -d':' -f1 $ACCOUNT_LIST)
do
FETCH_SITE=$(grep "^$nr:" $ACCOUNT_LIST | cut -d':' -f2)
if [ $FETCH_SITE -eq 1 ]; then
# Auslesen der Konfigurationsdatei
USERNAME=$(grep "^$nr:" $ACCOUNT_LIST | cut -d':' -f3)
PASSWORD=$(grep "^$nr:" $ACCOUNT_LIST | cut -d':' -f4)
FTP_URL=$(grep "^$nr:" $ACCOUNT_LIST | cut -d':' -f5)
WWW_ROOT=$(grep "^$nr:" $ACCOUNT_LIST | cut -d':' -f6)
URL=$(grep "^$nr:" $ACCOUNT_LIST | cut -d':' -f7)
FETCH_DB=$(grep "^$nr:" $ACCOUNT_LIST | cut -d':' -f8)
WWW_ROOT=$(echo $WWW_ROOT | awk '{sub(/[/]+$/, "");print}' | awk '{sub(/^[/]+/, "");print}')
# Herunterladen der Webseite
wget --ftp-user=$USERNAME --ftp-password=$PASSWORD -xr ftp://$FTP_URL/$WWW_ROOT/*
if [ $FETCH_DB -eq 1 ]; then
# Auslesen der DB-Konfiguration von Joomla!
cd $FTP_URL/$WWW_ROOT
DB_USER=$(grep '$user' configuration.php | awk '{sub(/[;]+$/, "");print}' | cut -d\' -f2)
DB_PASSWORD=$(grep '$password' configuration.php | awk '{sub(/[;]+$/, "");print}' | cut -d\' -f2)
DB_HOST=$(grep '$host' configuration.php | awk '{sub(/[;]+$/, "");print}' | cut -d\' -f2)
DB_NAME=$(grep '$db ' configuration.php | awk '{sub(/[;]+$/, "");print}' | cut -d\' -f2)
# Erstellen des Backup-Skripts für die Datenbank
echo " backup.php
echo "ignore_user_abort(true);" >> backup.php
echo "system(\"/usr/bin/mysqldump -u$DB_USER -p$DB_PASSWORD -h $DB_HOST $DB_NAME > joomla-db.sql\", \$file);" >> backup.php
touch joomla-db.sql
echo "if (\$file==0) {echo "0";} else {echo "1";}" >> backup.php
echo "?>" >> backup.php
# Backup-Skript auf den Server hochladen
ftp ftp://$USERNAME:$PASSWORD@$FTP_URL << END_FTP
cd $WWW_ROOT
put backup.php
put joomla-db.sql
chmod 0777 joomla-db.sql
quit
END_FTP
# Ausführen des DB-Backups
result=$(curl http://$URL/backup.php)
if [ $result -eq 0 ]; then
# Herunterladen der SQL-Datei
wget --ftp-user=$USERNAME --ftp-password=$PASSWORD ftp://$FTP_URL/$WWW_ROOT/joomla-db.sql
else
echo "FEHLER: Das Backup der Datenbank konnte nicht erstellt werden!"
fi
# Aufräumen
rm backup.php
ftp ftp://$USERNAME:$PASSWORD@$FTP_URL << END_FTP
cd $WWW_ROOT
delete backup.php
delete joomla-db.sql
quit
END_FTP
cd $BACKUP_TO/$DAY
fi
fi
done
Es ist sehr wichtig, dass die Schlüsselworte **END_FTP** in obigem Skript, jeweils **allein und am Anfang einer Zeile** stehen!
===== Konfigurationsdatei =====
Die Parameter für jede Webseite werden in einer Zeile durch *:* getrennt angegeben. Eine Zeile hat dabei folgende Parameter
:::::::
Die Parameter haben dabei folgende Bedeutung:
* **nr** ist eine laufende, **eindeutige** Nummer
* **fetch_site** Wenn die Seite gesichert werden soll muss hier der Wert **1** stehen, sonst wird das Backup für diese Seite übersprungen
* **username** Benutzername für den FTP-Login
* **passwort** Passwort für den FTP-Benutzer
* **ftp_url** Die URL des FTP-Servers (ohne führendes ftp://)
* **www_root** Verzeichnis zum Root des Webservers (meistens ''http_docs'' oder ähnlich)
* **http_url** URL des Webservers (ohne führendes http://)
* **fetch_db** Hat den Wert **1** wenn die Datenbank mitgesichert werden soll
Zur Veranschaulichung ist hier ein Beispiel wie die Konfigurationsdatei aussehen kann:
1:1:user1:secret:ftp.example.com:httpdocs:www.example.com:1
2:1:user2:secret:ftp.example.de:httpdocs:www.example.de:0
In diesem Beispiel werden zwei Webseiten gesichert, bei der zweiten wird aber auf das Backup der Datenbank verzichtet.
Da in dieser Konfigurationsdatei die **Passwörter im Klartext** eingetragen sind, muss der Zugriff auf diese Datei unbedingt auf bestimmte Benutzer eingeschränkt werden.
Folgende Befehle legen den Besitzer der Datei fest und erlauben nur diesem den Schreib-/Lesezugriff:
$ chmod
$ chmod 0600
===== Siehe auch =====
* [[scripts:inkrementelles_backup | Inkrementelles Backup]]
{{tag>linux joomla scripts}}