32 lines
1.2 KiB
Django/Jinja
32 lines
1.2 KiB
Django/Jinja
#!/bin/bash
|
|
# {{ ansible_managed }}
|
|
# Dump application databases to {{ backup_dump_dir }}
|
|
# for pickup by the backup host
|
|
set -euo pipefail
|
|
umask 077
|
|
DEST={{ backup_dump_dir }}
|
|
mkdir -p "$DEST"
|
|
|
|
# MariaDB stacks: dump via the stack's `db` service using its own env creds.
|
|
dump_mariadb() { # <stack dir under /opt> <output file>
|
|
docker compose -f "/opt/$1/docker-compose.yml" exec -T db sh -c \
|
|
'exec mariadb-dump --single-transaction --quick --routines --events \
|
|
-u"$MARIADB_USER" -p"$MARIADB_PASSWORD" "$MARIADB_DATABASE"' \
|
|
| gzip > "$DEST/$2.tmp"
|
|
mv "$DEST/$2.tmp" "$DEST/$2"
|
|
}
|
|
dump_mariadb nextcloud nextcloud.sql.gz
|
|
dump_mariadb gitea gitea.sql.gz
|
|
dump_mariadb hdwiki mediawikidb.sql.gz
|
|
|
|
# Authentik PostgreSQL (docker compose)
|
|
docker compose -f /opt/authentik/docker-compose.yml exec -T postgresql \
|
|
pg_dump -U authentik -d authentik | gzip > "$DEST/authentik.sql.gz.tmp"
|
|
mv "$DEST/authentik.sql.gz.tmp" "$DEST/authentik.sql.gz"
|
|
|
|
# Drone CI sqlite (online-safe consistent copy)
|
|
sqlite3 /opt/drone/drone/database.sqlite ".backup '$DEST/drone.sqlite.tmp'"
|
|
mv "$DEST/drone.sqlite.tmp" "$DEST/drone.sqlite"
|
|
|
|
date --iso-8601=seconds > "$DEST/LAST_DUMP"
|