-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdb-backup.sh
More file actions
50 lines (41 loc) · 1.87 KB
/
Copy pathdb-backup.sh
File metadata and controls
50 lines (41 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env bash
# Chateando - PostgreSQL backup helper
#
# Creates a compressed pg_dump of the chateando database from the running
# `postgres` service in docker compose and stores it in a host-side directory.
# Old backups beyond CHATEANDO_BACKUP_KEEP days are pruned.
#
# Usage:
# ./ops/db-backup.sh
#
# Environment overrides:
# CHATEANDO_BACKUP_DIR Backup output directory (default: ./backups)
# CHATEANDO_BACKUP_KEEP Retain backups newer than N days (default: 14)
# CHATEANDO_COMPOSE_FILE Docker compose file (default: docker-compose.yml)
# CHATEANDO_DB_SERVICE Compose service name running Postgres (default: postgres)
# CHATEANDO_DB_NAME Database name (default: chateando)
# CHATEANDO_DB_USER Postgres role (default: chateando)
set -euo pipefail
backup_dir="${CHATEANDO_BACKUP_DIR:-./backups}"
retain_days="${CHATEANDO_BACKUP_KEEP:-14}"
compose_file="${CHATEANDO_COMPOSE_FILE:-docker-compose.yml}"
db_service="${CHATEANDO_DB_SERVICE:-postgres}"
db_name="${CHATEANDO_DB_NAME:-chateando}"
db_user="${CHATEANDO_DB_USER:-chateando}"
mkdir -p "$backup_dir"
timestamp="$(date -u +%Y%m%dT%H%M%SZ)"
target="$backup_dir/chateando_${timestamp}.dump"
echo "[backup] dumping ${db_name} via service '${db_service}' -> ${target}"
docker compose -f "$compose_file" exec -T "$db_service" \
pg_dump --format=custom --no-owner --no-privileges --username="$db_user" "$db_name" \
> "$target"
size=$(stat -c%s "$target" 2>/dev/null || wc -c < "$target")
if [[ "$size" -lt 1024 ]]; then
echo "[backup] ERROR: dump file is suspiciously small (${size} bytes); aborting." >&2
rm -f "$target"
exit 1
fi
echo "[backup] wrote ${size} bytes."
echo "[backup] pruning files older than ${retain_days} day(s) from ${backup_dir}."
find "$backup_dir" -maxdepth 1 -name 'chateando_*.dump' -type f -mtime "+${retain_days}" -print -delete || true
echo "[backup] done."