You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
1.2 KiB
TypeScript
25 lines
1.2 KiB
TypeScript
// apps/hq/scripts/backup.ts — `npm run backup` (D33). Dumps the production Postgres to a
|
|
// timestamped, compressed, restorable file under ./backups (or $HQ_BACKUP_DIR) and rotates to
|
|
// the newest $HQ_BACKUP_KEEP (default 14). Run from the repo root:
|
|
// npm run backup
|
|
// DATABASE_URL=postgres://… npm run backup (explicit target, overrides resolution)
|
|
// The target is resolved through the SAME shared resolver the server and every other
|
|
// maintenance script uses (`requireDbUrlForEnv`, D19) — the old scripts/backup.mjs read
|
|
// DATABASE_URL directly and so could never find the production database, which is resolved
|
|
// rather than exported on that box. The resolved host/db is logged (never the password)
|
|
// before pg_dump runs.
|
|
//
|
|
// Restore a dump with:
|
|
// pg_restore --clean --if-exists --no-owner -d "$DATABASE_URL" backups/hq-<ts>.dump
|
|
//
|
|
// SECURITY (D32): credentials are stored in the CLEAR, so these dumps contain plaintext
|
|
// logins. Keep backups/ access-controlled and off any shared drive (it is gitignored).
|
|
import { runBackup } from '../src/backup'
|
|
|
|
try {
|
|
runBackup()
|
|
} catch (e) {
|
|
console.error(e instanceof Error ? e.message : String(e))
|
|
process.exit(1)
|
|
}
|