#!/usr/bin/env bash set -euo pipefail # Creates a consistent SQLite backup through the running web container, then archives Hub uploads. root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$root_dir" stamp="$(date +%Y%m%d-%H%M%S)" backup_dir="data/backups/$stamp" mkdir -p "$backup_dir" docker compose exec -T -e BACKUP_PATH="/app/data/backups/$stamp/hub.db" web node -e ' const Database = require("better-sqlite3"); const db = new Database(process.env.DATABASE_PATH); db.backup(process.env.BACKUP_PATH).then(() => db.close()).catch((error) => { console.error(error); process.exit(1); }); ' tar -czf "$backup_dir/uploads.tar.gz" -C public uploads printf 'Created backup: %s\n' "$backup_dir"