#!/bin/bash set -euo pipefail BACKUP_DIR="/opt/memento/backups" WAL_DIR="$BACKUP_DIR/wal" PG_CONTAINER="memento-postgres" PG_USER="${POSTGRES_USER:-memento}" PG_DB="${POSTGRES_DB:-memento}" PG_PASSWORD="${POSTGRES_PASSWORD:-}" LOG_FILE="$BACKUP_DIR/backup.log" mkdir -p "$WAL_DIR" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } log "=== Setting up WAL archiving ===" docker exec "$PG_CONTAINER" bash -c "mkdir -p /var/lib/postgresql/backups/wal" docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET wal_level = replica;" docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET archive_mode = on;" docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET archive_command = 'cp %p /var/lib/postgresql/backups/wal/%f';" docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET max_wal_senders = 3;" docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET wal_keep_size = '1GB';" log "Reloading PostgreSQL configuration..." docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "SELECT pg_reload_conf();" log "WAL archiving enabled. Archives stored in /var/lib/postgresql/backups/wal/" WAL_COUNT=$(docker exec "$PG_CONTAINER" ls /var/lib/postgresql/backups/wal/ 2>/dev/null | wc -l) log "Existing WAL segments: $WAL_COUNT"