diff --git a/common/borgbackup/tasks/main.yml b/common/borgbackup/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..ff7735c2bd9eb31b23037aa1565d7477a83be043 --- /dev/null +++ b/common/borgbackup/tasks/main.yml @@ -0,0 +1,48 @@ +--- +# Pakete installieren +- name: pakete installieren + apt: + pkg: "{{ item }}" + update_cache: yes + state: installed + with_items: + - borgbackup + - logrotate + - moreutils + +- name: get secrets from server 1 + slurp: src={{ item }} + with_items: + - /srv/borgbackup/repo_passphrase + - /srv/borgbackup/repo_url + register: borgbackup_secrets + +- name: get secrets from server 2 + set_fact: + repo_passphrase: "{{ borgbackup_secrets.results | selectattr('item', 'equalto', '/srv/borgbackup/repo_passphrase') | map(attribute='content') | list | first | b64decode | regex_replace('\\s', '') }}" + repo_url: "{{ borgbackup_secrets.results | selectattr('item', 'equalto', '/srv/borgbackup/repo_url') | map(attribute='content') | list | first | b64decode | regex_replace('\\s', '') }}" + + +# BorgBackup Scripte erstellen + +- name: BorgBackup Script erstellen + template: src={{ item }} dest=/opt/{{ item }} mode=o+x + with_items: + - "borgbackup-check.sh" + - "borgbackup-create.sh" + - "borgbackup-delete.sh" + - "borgbackup-info.sh" + - "borgbackup-init.sh" + - "borgbackup-list.sh" + - "borgbackup-mount.sh" + +- name: BorgBackup log folder erstellen + file: + path: "/var/log/borgbackup" + state: "directory" + +- name: BorgBackup LogRotate config erstellen + template: src=logrotate dest=/etc/logrotate.d/borgbackup + +- name: Cronjob für BorgBackup + cron: name="borgbackup" weekday="{{borgbackup_weekday}}" hour="{{borgbackup_hour}}" minute="{{borgbackup_minute}}" job="/opt/borgbackup-create.sh 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' >> /var/log/borgbackup/borgbackup.log" \ No newline at end of file diff --git a/common/borgbackup/templates/borgbackup-check.sh b/common/borgbackup/templates/borgbackup-check.sh new file mode 100644 index 0000000000000000000000000000000000000000..dbdfd2f0f1837bbb3f98e79838d5d6f928ec810f --- /dev/null +++ b/common/borgbackup/templates/borgbackup-check.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +export BORG_PASSPHRASE="{{repo_passphrase}}" + +# Überprüfung des Archives +borg check $1 $2 $3 --info --show-rc {{repo_url}} diff --git a/common/borgbackup/templates/borgbackup-create.sh b/common/borgbackup/templates/borgbackup-create.sh new file mode 100644 index 0000000000000000000000000000000000000000..9185d6decb0e5688139511393ec972a8da3385bd --- /dev/null +++ b/common/borgbackup/templates/borgbackup-create.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +export BORG_PASSPHRASE="{{repo_passphrase}}" + +# Ausführung des Backups +# anschließend Bereinigung +# abschließend Integritätscheck + +borg create $1 $2 $3 --info --show-rc --stats --compression lzma,2 {{repo_url}}::`date +%Y-%m-%d_%H_%M` \ +{% for directory in borgbackup_directories %} +{{ directory }} \ +{% endfor %} +&& \ +borg prune $1 $2 $3 --info --show-rc --list {{repo_url}} \ +{% for prune in borgbackup_prune %} +{{ prune }} \ +{% endfor %} +&& \ +borg check $1 $2 $3 --info --show-rc {{repo_url}} diff --git a/common/borgbackup/templates/borgbackup-delete.sh b/common/borgbackup/templates/borgbackup-delete.sh new file mode 100644 index 0000000000000000000000000000000000000000..12d0e11f87abd265ead9e048b0305a83ad01fcdd --- /dev/null +++ b/common/borgbackup/templates/borgbackup-delete.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +export BORG_PASSPHRASE="{{repo_passphrase}}" + +# Löschen eines Backups + +borg list $1 $2 $3 --info --show-rc {{repo_url}} + +echo "BackupName, followed by [ENTER]:" +read target + +borg delete $1 $2 $3 --info --show-rc {{repo_url}}::$target diff --git a/common/borgbackup/templates/borgbackup-info.sh b/common/borgbackup/templates/borgbackup-info.sh new file mode 100644 index 0000000000000000000000000000000000000000..a311726275efcc8edca20e0d32da11057c0f3447 --- /dev/null +++ b/common/borgbackup/templates/borgbackup-info.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +export BORG_PASSPHRASE="{{repo_passphrase}}" + +# Anzeige des Inhaltes im Borg Backup Archiv + +borg list $1 $2 $3 --info --show-rc {{repo_url}} + +echo "BackupName, followed by [ENTER]:" +read target + +borg info $1 $2 $3 --info --show-rc {{repo_url}}::$target diff --git a/common/borgbackup/templates/borgbackup-init.sh b/common/borgbackup/templates/borgbackup-init.sh new file mode 100644 index 0000000000000000000000000000000000000000..8e97c70ce30ff94f43354423c50c5d3a31ce4e24 --- /dev/null +++ b/common/borgbackup/templates/borgbackup-init.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Initialisierung des Borg Backup Archives + +export BORG_PASSPHRASE="{{repo_passphrase}}" + +borg init $1 $2 $3 --info --show-rc --encryption=repokey {{repo_url}} diff --git a/common/borgbackup/templates/borgbackup-list.sh b/common/borgbackup/templates/borgbackup-list.sh new file mode 100644 index 0000000000000000000000000000000000000000..07bd9086ce2f8169532fd9c2d59c3ec68524544f --- /dev/null +++ b/common/borgbackup/templates/borgbackup-list.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +export BORG_PASSPHRASE="{{repo_passphrase}}" + +# Anzeige des Inhaltes im Borg Backup Archiv + +borg list $1 $2 $3 --info --show-rc {{repo_url}} diff --git a/common/borgbackup/templates/borgbackup-mount.sh b/common/borgbackup/templates/borgbackup-mount.sh new file mode 100644 index 0000000000000000000000000000000000000000..7b79b686c1594d9c1013c599a797bce7c3f62a38 --- /dev/null +++ b/common/borgbackup/templates/borgbackup-mount.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +export BORG_PASSPHRASE="{{repo_passphrase}}" + +# Einhängen eines Backups nach /mnt/ + +echo -n 'Mounting to: /mnt/borbbackupmount' +borg mount $1 $2 $3 --info --show-rc {{repo_url}} /mnt/borbbackupmount diff --git a/common/borgbackup/templates/logrotate b/common/borgbackup/templates/logrotate new file mode 100644 index 0000000000000000000000000000000000000000..b17a8fe9713f6db8be1fc310a76ead124887ce27 --- /dev/null +++ b/common/borgbackup/templates/logrotate @@ -0,0 +1,7 @@ +/var/log/borgbackup/borgbackup.log { + rotate 12 + monthly + compress + missingok + notifempty +} diff --git a/host_vars/webserver b/host_vars/webserver index 972483407f015544dfb8181580e45635571accc9..efba09cd7354902495a2b4e1a2c7c2fb0736ba55 100644 --- a/host_vars/webserver +++ b/host_vars/webserver @@ -12,6 +12,20 @@ debian_sources: - "deb http://ftp.halifax.rwth-aachen.de/debian/ jessie-updates main contrib non-free" - "deb http://apt.dockerproject.org/repo debian-jessie main" +borgbackup_weekday: "*" +borgbackup_hour: "4" +borgbackup_minute: "0" + +borgbackup_directories: + - "/etc/" + - "/srv/" + +borgbackup_prune: + - "--keep-within=2d" + - "--keep-daily=7" + - "--keep-weekly=4" + - "--keep-monthly=6" + letsencrypt_tos_sha256: 6373439b9f29d67a5cd4d18cbc7f264809342dbf21cb2ba2fc7588df987a6221 letsencrypt_mail: verwaltung@warpzone.ms diff --git a/webserver/main.yml b/webserver/main.yml index 67fccb04bab6ec3425e1291bea68e4d281b3d00a..7514f84e96c9975578bc3ccf93d52e2f964a0d26 100644 --- a/webserver/main.yml +++ b/webserver/main.yml @@ -3,6 +3,7 @@ - hosts: webserver remote_user: root roles: + - { role: ../common/borgbackup, tags: borgbackup } - { role: nginx, tags: nginx } - { role: openvpn, tags: openvpn } - { role: docker, tags: docker }