#!/bin/bash set -euo pipefail source /opt/backup/metrics.sh now=$(date +"%Y%m%d%H%M") declare -a arr=("mail" "matrix" "monitoring") declare -a monitoring=("monitoring_prometheus-data" "monitoring_grafana-storage" "monitoring_loki-data" "monitoring_alloy-data") declare -a matrix=("matrix_db") declare -a immich=("systemd-immich-pgdata" "systemd-immich-upload") gitea_uid=$(id -u gitea) immich_uid=$(id -u immich) metric_init daily restore() { for i in "${arr[@]}"; do cd /opt/beeserver/${i} podman-compose up -d done for j in "${monitoring[@]}"; do rm -rf /opt/beeserver/monitoring/${j}.tar done for j in "${matrix[@]}"; do rm -rf /opt/beeserver/matrix/${j}.tar done systemctl --user --machine gitea@.host start gitea-db.service gitea-server.service || true systemctl --user --machine immich@.host start immich-db.service immich-redis.service immich-server.service || true systemctl --user --machine vaultwarden@.host start vaultwarden.service || true rm -f /home/immich/systemd-immich-*.tar } finish() { local raw=$? local status status=$(metric_status ${raw}) restore metric_finish ${status} exit ${status} } trap finish EXIT for i in "${arr[@]}" do log "staging ${i}" cd /opt/beeserver/${i} podman-compose down -t 60 if [[ "$i" == "monitoring" ]] then for j in "${monitoring[@]}" do podman volume export ${j} --output ${j}.tar done fi if [[ "$i" == "matrix" ]] then for j in "${matrix[@]}" do podman volume export ${j} --output ${j}.tar done fi rsync -aH /opt/beeserver/${i} /opt/backup/beeserver podman-compose up -d done log "staging gitea" systemctl --user --machine gitea@.host stop gitea-server.service gitea-db.service rsync -aH /home/gitea/data /opt/backup/beeserver/gitea systemctl --user --machine gitea@.host start gitea-db.service gitea-server.service log "staging immich" systemctl --user --machine immich@.host stop immich-server.service immich-db.service immich-redis.service for v in "${immich[@]}" do sudo -u immich XDG_RUNTIME_DIR=/run/user/${immich_uid} podman volume export ${v} --output /home/immich/${v}.tar done systemctl --user --machine immich@.host start immich-db.service immich-redis.service immich-server.service mkdir -p /opt/backup/beeserver/immich/ mv /home/immich/systemd-immich-*.tar /opt/backup/beeserver/immich/ log "staging vaultwarden" systemctl --user --machine vaultwarden@.host stop vaultwarden.service rsync -aH /home/vaultwarden/data /opt/backup/beeserver/vaultwarden systemctl --user --machine vaultwarden@.host start vaultwarden.service archive=/home/beeshare/raid/serverBackup/beeserver_daily_${now}.tar.gz.gpg log "encrypting ${archive}" tar -czf - /opt/backup/beeserver | gpg --batch --passphrase-file /opt/backup/passphrase.txt -c -o ${archive} log "verifying ${archive}" if ! gpg --batch --passphrase-file /opt/backup/passphrase.txt -d ${archive} | tar -tzf - >/dev/null then log "verify failed, discarding ${archive}" rm -f ${archive} exit 1 fi metric_archive ${archive}