Protects /config, selective labdata, and nightly DB dumps; documents homelab improvement plan briefs.
52 lines
1.4 KiB
Bash
52 lines
1.4 KiB
Bash
#!/bin/sh
|
|
# Dump all homelab databases to /config/backup/dumps (gzip SQL).
|
|
# Runs inside backup_scheduler; needs docker.sock.
|
|
set -eu
|
|
|
|
DUMP_ROOT=/dumps
|
|
STAMP=$(date +%Y%m%d-%H%M%S)
|
|
DIR="${DUMP_ROOT}/${STAMP}"
|
|
mkdir -p "${DIR}"
|
|
|
|
log() { echo "[backup-dump ${STAMP}] $*"; }
|
|
|
|
dump_postgres() {
|
|
name="$1"
|
|
user="$2"
|
|
db="$3"
|
|
if ! docker ps --format '{{.Names}}' | grep -qx "${name}"; then
|
|
log "skip ${name} (not running)"
|
|
return 0
|
|
fi
|
|
log "dump ${name} → ${db}"
|
|
docker exec "${name}" pg_dump -U "${user}" "${db}" | gzip -c > "${DIR}/${name}.sql.gz"
|
|
}
|
|
|
|
dump_mariadb() {
|
|
name="$1"
|
|
db="$2"
|
|
if ! docker ps --format '{{.Names}}' | grep -qx "${name}"; then
|
|
log "skip ${name} (not running)"
|
|
return 0
|
|
fi
|
|
log "dump ${name} → ${db}"
|
|
docker exec "${name}" sh -c "mariadb-dump -u root -p\"\$MYSQL_ROOT_PASSWORD\" \"${db}\"" \
|
|
| gzip -c > "${DIR}/${name}.sql.gz"
|
|
}
|
|
|
|
log "starting database dumps → ${DIR}"
|
|
|
|
dump_postgres postgres_gitea gitea gitea
|
|
dump_postgres postgres_plane plane plane
|
|
dump_postgres postgres_authentik authentik authentik
|
|
dump_postgres postgres_famapp famapp famapp
|
|
dump_postgres postgres_resume postgres postgres
|
|
|
|
dump_mariadb mariadb_bookstack bookstack
|
|
dump_mariadb owncloud_mariadb owncloud
|
|
dump_mariadb romm-db romm
|
|
|
|
find "${DUMP_ROOT}" -mindepth 1 -maxdepth 1 -type d -mtime +14 -exec rm -rf {} + 2>/dev/null || true
|
|
|
|
log "done"
|