Add backup service

This commit is contained in:
Tobias Reisinger 2022-11-29 16:15:37 +01:00
parent ee59f0258b
commit b0db33fb09
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
7 changed files with 114 additions and 0 deletions

7
backup/.env Normal file
View file

@ -0,0 +1,7 @@
HC_UID=
RESTIC_REPOSITORY=
RESTIC_PASSWORD=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=

2
backup/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/mailcheck.mail
/msmtprc

6
backup/Dockerfile Normal file
View file

@ -0,0 +1,6 @@
FROM ubuntu
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update -y \
&& apt install -y curl restic

4
backup/backup.service Normal file
View file

@ -0,0 +1,4 @@
[Service]
Type=oneshot
ExecStart=/opt/services/backup/backup.sh
WorkingDirectory=/opt/services/backup/

60
backup/backup.sh Executable file
View file

@ -0,0 +1,60 @@
#!/usr/bin/env sh
set -e
set -a
. "/opt/services/backup/.env"
. "/opt/services/backup/.secret.env"
set +a
hc_url="https://hc-ping.com/$HC_UID"
curl -fsSL --retry 3 "$hc_url/start" >/dev/null
BACKUP_LOCATION="/tmp/backup-misc"
rm -rf "$BACKUP_LOCATION"
mkdir -p "$BACKUP_LOCATION"
cd "$BACKUP_LOCATION" || exit
_hc_fail () {
curl -fsSL --retry 3 "$hc_url/fail"
exit 1
}
_backup_prepare_postgres () {
mkdir -p "$BACKUP_LOCATION/postgres"
cd "$BACKUP_LOCATION/postgres" || exit
postgres_tables=$(sudo -u postgres psql -Atc "SELECT datname FROM pg_database WHERE datistemplate = false;")
for i in $postgres_tables
do
echo "dumping $i"
sudo -u postgres pg_dump "$i" | gzip >"pg_dump_$i.gz"
echo "done with $i"
echo ""
done
echo "dumping all"
sudo -u postgres pg_dumpall | gzip >"pg_dumpall.gz"
}
_backup_prepare_mailcow () {
export MAILCOW_BACKUP_LOCATION="$BACKUP_LOCATION/mailcow"
mkdir -p "$MAILCOW_BACKUP_LOCATION"
/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh \
backup all --delete-days 3
}
echo ""
echo "preparing postgres"
time _backup_prepare_postgres >/tmp/backup-postgres.log || _hc_fail
echo ""
echo "preparing mailcow"
time _backup_prepare_mailcow >/tmp/backup-mailcow.log || _hc_fail
cd /opt/services/backup/
docker compose run --rm backup || _hc_fail
curl -fsSL --retry 3 "$hc_url"

4
backup/backup.timer Normal file
View file

@ -0,0 +1,4 @@
[Timer]
OnCalendar=*-*-* 04:10:00
[Install]
WantedBy=timers.target

31
backup/docker-compose.yml Normal file
View file

@ -0,0 +1,31 @@
version: "3.7"
services:
backup:
build:
context: .
image: backup
restart: never
env_file:
- .env
- .secret.env
volumes:
- /tmp/backup-misc:/backup/misc
- gitea_data:/backup/volumes/gitea_data
- influxdb_data:/backup/volumes/influxdb_data
- reitanlage_data:/backup/volumes/reitanlage_data
- synapse_media_store:/backup/volumes/synapse_media_store
- tandoor_mediafiles:/backup/volumes/tandoor_mediafiles
command: restic backup /backup
volumes:
gitea_data:
external: true
influxdb_data:
external: true
reitanlage_data:
external: true
synapse_media_store:
external: true
tandoor_mediafiles:
external: true