Die Struktur geändert um künftig mehrere Server in einem Ruth zu sichern
Change-Id: If82413b0b88b04028459ef329cd3151d38ed7966
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
.directory
|
.directory
|
||||||
|
.git
|
||||||
*/.directory
|
*/.directory
|
||||||
*/*/.directory
|
*/*/.directory
|
||||||
.project
|
.project
|
||||||
vitaligraf.de.sh
|
|
||||||
+12
-4
@@ -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"]
|
||||||
@@ -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'
|
||||||
@@ -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'
|
||||||
+42
-8
@@ -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
|
|
||||||
Reference in New Issue
Block a user