Add consistent Borg database dumps

This commit is contained in:
2026-05-16 11:49:36 +02:00
parent fa177155e6
commit 18df2d155d
5 changed files with 77 additions and 36 deletions
+40
View File
@@ -68,6 +68,28 @@ dump_pg_globals() {
atomic_write "$output" "$tmp"
}
dump_sqlite_file() {
source="$1"
output="$2"
label="$3"
if [ ! -f "$source" ]; then
warn "Skipping missing SQLite database for $label: $source"
return 0
fi
tmp="$TMP_DIR/$(basename "$output").tmp"
log "Dumping SQLite database '$label' from $source"
rm -f "$tmp"
sqlite3 "$source" ".backup $tmp"
if [ "$(sqlite3 "$tmp" 'PRAGMA quick_check;')" != "ok" ]; then
warn "SQLite quick_check failed for $label"
rm -f "$tmp"
return 1
fi
atomic_write "$output" "$tmp"
}
dump_optional_pg_db() {
container="$1"
password="$2"
@@ -131,6 +153,7 @@ dump_mongo_container() {
main() {
need_cmd docker
need_cmd sqlite3
ensure_dirs
# Shared PostgreSQL 17
@@ -162,6 +185,23 @@ main() {
warn "Skipping missing container: immich_postgres"
fi
if need_container "nextcloud-postgres"; then
nextcloud_password="$(cat /mnt/user/appdata/secrets/nextcloud_postgres_password.txt)"
dump_pg_db "nextcloud-postgres" "$nextcloud_password" "nextcloud" "nextcloud" "$LATEST_DIR/nextcloud.dump"
else
warn "Skipping missing container: nextcloud-postgres"
fi
# SQLite databases. Use host-side sqlite3 so the dump does not depend on
# utility packages inside application images.
dump_sqlite_file "/mnt/user/services/gitea/data/gitea/gitea.db" "$LATEST_DIR/gitea.sqlite" "gitea"
dump_sqlite_file "/mnt/user/appdata/vaultwarden/db.sqlite3" "$LATEST_DIR/vaultwarden.sqlite" "vaultwarden"
dump_sqlite_file "/mnt/user/appdata/uptime-kuma/kuma.db" "$LATEST_DIR/uptime-kuma.sqlite" "uptime-kuma"
dump_sqlite_file "/mnt/user/appdata/speedtest-tracker/config/database.sqlite" "$LATEST_DIR/speedtest-tracker.sqlite" "speedtest-tracker"
dump_sqlite_file "/mnt/user/appdata/filebrowser/database/filebrowser.db" "$LATEST_DIR/filebrowser.sqlite" "filebrowser"
dump_sqlite_file "/mnt/user/appdata/borg-ui/data/borg.db" "$LATEST_DIR/borg-ui.sqlite" "borg-ui"
dump_sqlite_file "/mnt/user/appdata/grafana/grafana.db" "$LATEST_DIR/grafana.sqlite" "grafana"
# MongoDB
dump_mongo_container "komodo-mongo" "$LATEST_DIR/komodo-mongo.archive.gz"