From 7a2c0ba14311aa21f8b290901903eb6386cad210 Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Sat, 6 Jan 2018 11:04:08 +0100 Subject: [PATCH] =?UTF-8?q?Die=20Struktur=20ge=C3=A4ndert=20um=20k=C3=BCnf?= =?UTF-8?q?tig=20mehrere=20Server=20in=20einem=20Ruth=20zu=20sichern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: If82413b0b88b04028459ef329cd3151d38ed7966 --- .dockerignore | 4 ++-- Dockerfile | 16 +++++++++---- example_conf.sh | 36 ++++++++++++++++++++++++++++++ reset-conf.sh | 9 ++++++++ backup.sh => start.sh | 52 +++++++++++++++++++++++++++++++++++-------- 5 files changed, 102 insertions(+), 15 deletions(-) create mode 100644 example_conf.sh create mode 100644 reset-conf.sh rename backup.sh => start.sh (51%) diff --git a/.dockerignore b/.dockerignore index 4f53685..9d357d4 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,5 @@ .directory +.git */.directory */*/.directory -.project -vitaligraf.de.sh \ No newline at end of file +.project \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 158fce8..65a2365 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,17 @@ FROM python:2 -WORKDIR /root +MAINTAINER Vitali Graf -RUN apt-get update && apt-get install rdiff-backup --no-install-recommends -y && apt-get clean && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install rdiff-backup python-pyxattr python-pylibacl --no-install-recommends -y && apt-get clean && rm -rf /var/lib/apt/lists/* -COPY ./backup.sh /root/backup.sh +COPY *.sh / -VOLUME ["/root/job.conf", "/root/.ssh", "/var/backups"] +VOLUME /backups /config /root/.ssh + +WORKDIR / + +ENV SSH_KEY_MARKER "hier X belibigen wert setzen" + +ENTRYPOINT ["/start.sh"] + +CMD ["--gen-config"] \ No newline at end of file diff --git a/example_conf.sh b/example_conf.sh new file mode 100644 index 0000000..0a84e5c --- /dev/null +++ b/example_conf.sh @@ -0,0 +1,36 @@ +# Von welchem Server soll ein Backup gemacht werden, Domain oder IP-Adresse +REMOTE_HOST='example.com' + +# Mit welchem User soll backup gemacht werden. root ist empfohlen +REMOTE_USER='root' + +# Wechle Ordner sollen gesichert werden als BASH-Array z.B. ("/home" "/var/www") +FOLDERS=() + +# Wie lange sollen Backups gesichert bleiben z.B. 8W +# ================================================== +# Remove the incremental backup information in the destination +# directory that has been around longer than the given time. +# time_spec can be either an absolute time, like "2002-01-04", or +# a time interval. The time interval is an integer followed by +# the character s, m, h, D, W, M, or Y, indicating seconds, minutes, +# hours, days, weeks, months, or years respectively, or a +# number of these concatenated. For example, 32m means 32 minutes, +# and 3W2D10h7s means 3 weeks, 2 days, 10 hours, and 7 seconds. +# In this context, a month means 30 days, a year is 365 +# days, and a day is always 86400 seconds. +DELETE_OLD_FILES='8W' + +# Zu sichernde MySQL-Datenbanken als BASH-Array z.B. ("mail" "piwik" "mybb") +# Leere Array () => es werden keine MySQL-Datenbanken gesichert +MYSQL_DB=() + +# MySQL User +MYSQL_USER='root' + +# MySQL Passwort +MYSQL_PASS='secret' + +# Wo auf dem Remote Server soll SQL_Dump abgelegt werden. +# Dieser Ordner wird zusammen mit $FOLDERS gesichert +MYSQL_DUMP_DIR='/var/backups/sqldump' \ No newline at end of file diff --git a/reset-conf.sh b/reset-conf.sh new file mode 100644 index 0000000..3dca586 --- /dev/null +++ b/reset-conf.sh @@ -0,0 +1,9 @@ +REMOTE_HOST='' +REMOTE_USER='root' +FOLDERS=() +DELETE_OLD_FILES='8W' + +MYSQL_DB=() +MYSQL_USER='root' +MYSQL_PASS='secret' +MYSQL_DUMP_DIR='/var/backups/sqldump' \ No newline at end of file diff --git a/backup.sh b/start.sh similarity index 51% rename from backup.sh rename to start.sh index 9a99ea1..db9dbbf 100755 --- a/backup.sh +++ b/start.sh @@ -2,12 +2,39 @@ # set -e -source job.conf +# source job.conf +BACKUP_DIR=/backups +CONFIG_DIR=/config +SSH_CF_DIR=/root/.ssh + +gen_config(){ + [ ! -f "$SSH_CF_DIR/id_rsa" ] && ssh-keygen -t rsa -b 4096 -f "$SSH_CF_DIR/id_rsa" -q -C "rdiff-backup-dockerized @ ${SSH_KEY_MARKER}" + + if [ ! -f "$SSH_CF_DIR/config" ]; then + echo 'Host *' > "$SSH_CF_DIR/config" + echo ' StrictHostKeyChecking no' >> "$SSH_CF_DIR/config" + # echo ' UserKnownHostsFile=/dev/null' >> "$SSH_CF_DIR/config" + + chmod go-rwx $SSH_CF_DIR/config + fi + + [ ! -f "$CONFIG_DIR/example_conf.sh" ] && cp /example_conf.sh "$CONFIG_DIR/example_conf.sh" +} backup(){ + #Konfiguration resetten + source "/reset-conf.sh" + + echo Start backup $1 + echo ================================================== + + # neue Konfiguration lesen + source "$CONFIG_DIR/$1" + # SCHRITT 1: # sichern der MySQL-Datenbanken auf dem remote host - # es muss auf dem remote host genug Platz auf der Festplatte geben damit Dump erfolgen kann! + # es muss auf dem remote host genug Platz auf der Festplatte geben damit Dump erfolgen kann! + if [ ${#MYSQL_DB[@]} -gt 0 ] then [ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "[ ! -d \"$MYSQL_DUMP_DIR\" ] && mkdir -p \"$MYSQL_DUMP_DIR\"" @@ -26,17 +53,17 @@ backup(){ for dir in "${FOLDERS[@]}" do # prüfen ob das backup-ordner existiert ... - if [ ! -d "/var/backups/${REMOTE_HOST}${dir}" ]; + if [ ! -d "$BACKUP_DIR/${REMOTE_HOST}${dir}" ]; then # ... und gegebenfals anlegen - mkdir -p "/var/backups/${REMOTE_HOST}${dir}" + mkdir -p "$BACKUP_DIR/${REMOTE_HOST}${dir}" fi # die eigentliche Sicherung ... - rdiff-backup --exclude-special-files "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "/var/backups/${REMOTE_HOST}${dir}" + rdiff-backup --exclude-special-files "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "$BACKUP_DIR/${REMOTE_HOST}${dir}" # alle Sicherungen die älter als $DELETE_OLD_FILES löschen - rdiff-backup --remove-older-than $DELETE_OLD_FILES --force "/var/backups/${REMOTE_HOST}${dir}" + rdiff-backup --remove-older-than $DELETE_OLD_FILES --force "$BACKUP_DIR/${REMOTE_HOST}${dir}" done # SCHRITT 3: @@ -45,6 +72,8 @@ backup(){ then [ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "rm -rf \"$MYSQL_DUMP_DIR/\"*.sql" fi + echo " " + echo " " } @@ -52,10 +81,15 @@ backup(){ restore(){ for dir in "${FOLDERS[@]}" do - rdiff-backup -r now "/var/backups/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}" + rdiff-backup -r now "$BACKUP_DIR/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}" done } +if [ "$1" == "--gen-config" ]; then + gen_config +elif [ "$1" == "--backup" ]; then + backup "$2" +else + echo "nichts zu tun?" +fi -# Tue das da -backup