Auf Amazon betreibe ich via EC2 einen Ubuntu-Linux-Server mit NGINX um ein paar Websites von uns auszuliefern.
Um ein Backup der wichtigsten Daten zu haben, verwende ich ein Shell-Skript, das als Cronjob läuft und täglich Dateien auf Amazons S3-Speicher hochlädt.
Vorbereitende Arbeiten
Zunächst habe ich den Befehlszeilen-Client von Amazons AWS installiert, so wie in der Anleitung beschrieben. Alternativ könnt Ihr auch den gebündelten Client installieren. Ich selbst bevorzuge den gebündelten Client. Ggf. muss für diesen zuvor noch Python via sudo apt-get install python
installiert werden.
Mit dem gebündelten Client ist der Ziel-Installationsordner des AWS-Clients in /usr/local/bin/aws
.
Backup-Skript
Ich habe mein Bash-Skript initial von dieser Anleitung abgeleitet und entsprechend angepasst.
#!/bin/sh
echo '----------------------------------'
echo 'started'
echo ' '
# https://www.ideyatech.com/creating-automated-backup-scripts-linux-s3/
#backup folder within the server where backup files are store
BAK_DEST=/tmp/backup
#folders for backup, can be comma separated for multiple folders
BAK_SOURCES=/home,/opt/bitnami,/etc/lego
# API Keys for S3
export AWS_ACCESS_KEY_ID="FJEIWN4FKDI5DJHFQEW2"
export AWS_SECRET_ACCESS_KEY="kfdshfkjFD4DFDdfjlkdfdwoXdfjdf8dfjklDW3A"
#s3 bucket name that contains backup
S3_BUCKET=my-server-backups/my-server
#number of days to keep archives
KEEP_DAYS=3
#script variables
BAK_DATE=`date +%F`
BAK_DATETIME=`date +%F-%H%M`
BAK_FOLDER=${BAK_DEST}/${BAK_DATE}
DAYOFYEAR=`date +%j`
DAYOFYEARINT=$(echo $DAYOFYEAR | sed 's/^0*//')
MYIDX=$(($DAYOFYEARINT % $KEEP_DAYS))
ROLLING_FOLDER=backup-${MYIDX}
## echo 'DOY: ' ${DAYOFYEAR}
## echo 'DOYI: ' ${DAYOFYEARINT}
## echo 'Index : ' ${MYIDX}
## echo 'Ordnername: ' ${ROLLING_FOLDER}
## exit 1
#CREATE folder where backup database is to be place
echo 'Creating temp local backup to folder ' ${BAK_FOLDER}
rm -f -R ${BAK_FOLDER}
mkdir -p ${BAK_FOLDER}
# Löschen des aktuellen Tagesordners.
echo 'Removing current day folder on S3'
# "which aws" gibt auf der Konsole den Pfad aus.
/usr/local/bin/aws s3 rm s3://${S3_BUCKET}/${ROLLING_FOLDER} --recursive
echo 'Archiving folders'
FOLDERS=$(echo $BAK_SOURCES | tr "," "\n")
i=0
for F in $FOLDERS
do
echo ' '
echo 'Archiving ' ${F} '...'
i=`expr ${i} + 1`
tar czPf ${BAK_FOLDER}/FILE_${i}_${BAK_DATETIME}.tar.gz ${F}
echo 'Created tar file ' ${BAK_FOLDER}/FILE_${i}_${BAK_DATETIME}.tar.gz
# "which aws" gibt auf der Konsole den Pfad an.
/usr/local/bin/aws s3 cp ${BAK_FOLDER}/FILE_${i}_${BAK_DATETIME}.tar.gz s3://${S3_BUCKET}/${ROLLING_FOLDER}/FILE_${i}_${BAK_DATETIME}.tar.gz --storage-class REDUCED_REDUNDANCY
done
echo 'Deleting temp local backup folder ' ${BAK_FOLDER}
rm -f -R ${BAK_FOLDER}
echo ' '
echo 'finished'
echo '----------------------------------'
Das Skript habe ich in /home/zeta
gespeichert.
Scheduler einrichten
Zuletzt habe ich noch via sudo crontab -e
die Scheduler-Datei im Editor geöffnet und folgende Zeile eingegeben:
0 1 * * * /home/zeta/backup.sh > /home/zeta/backup.log 2>&1
(Beschreibung, was die obige Umleitung >
und 2>&1
bedeuten steht hier).
Wenn anstatt dem >
ein >>
benutzt wird, wird die Protokolldatei nicht bei jedem Aufruf gelöscht, sondern es wird jeweils an die Datei angefügt.