Die Struktur geändert um künftig mehrere Server in einem Ruth zu sichern

Change-Id: If82413b0b88b04028459ef329cd3151d38ed7966
This commit is contained in:
2018-01-06 11:04:08 +01:00
parent c10bbf7d76
commit 7a2c0ba143
5 changed files with 102 additions and 15 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
.directory .directory
.git
*/.directory */.directory
*/*/.directory */*/.directory
.project .project
vitaligraf.de.sh
+12 -4
View File
@@ -1,9 +1,17 @@
FROM python:2 FROM python:2
WORKDIR /root MAINTAINER Vitali Graf <info@vitaligraf.de>
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"]
+36
View File
@@ -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'
+9
View File
@@ -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'
+43 -9
View File
@@ -2,12 +2,39 @@
# set -e # 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(){ backup(){
#Konfiguration resetten
source "/reset-conf.sh"
echo Start backup $1
echo ==================================================
# neue Konfiguration lesen
source "$CONFIG_DIR/$1"
# SCHRITT 1: # SCHRITT 1:
# sichern der MySQL-Datenbanken auf dem remote host # 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 ] if [ ${#MYSQL_DB[@]} -gt 0 ]
then then
[ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "[ ! -d \"$MYSQL_DUMP_DIR\" ] && mkdir -p \"$MYSQL_DUMP_DIR\"" [ "$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[@]}" for dir in "${FOLDERS[@]}"
do do
# prüfen ob das backup-ordner existiert ... # prüfen ob das backup-ordner existiert ...
if [ ! -d "/var/backups/${REMOTE_HOST}${dir}" ]; if [ ! -d "$BACKUP_DIR/${REMOTE_HOST}${dir}" ];
then then
# ... und gegebenfals anlegen # ... und gegebenfals anlegen
mkdir -p "/var/backups/${REMOTE_HOST}${dir}" mkdir -p "$BACKUP_DIR/${REMOTE_HOST}${dir}"
fi fi
# die eigentliche Sicherung ... # 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 # 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 done
# SCHRITT 3: # SCHRITT 3:
@@ -45,6 +72,8 @@ backup(){
then then
[ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "rm -rf \"$MYSQL_DUMP_DIR/\"*.sql" [ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "rm -rf \"$MYSQL_DUMP_DIR/\"*.sql"
fi fi
echo " "
echo " "
} }
@@ -52,10 +81,15 @@ backup(){
restore(){ restore(){
for dir in "${FOLDERS[@]}" for dir in "${FOLDERS[@]}"
do 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 done
} }
if [ "$1" == "--gen-config" ]; then
gen_config
elif [ "$1" == "--backup" ]; then
backup "$2"
else
echo "nichts zu tun?"
fi
# Tue das da
backup