52 lines
1.9 KiB
Bash
Executable File
52 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Load environment variables from .env.docker if it exists
|
|
if [ -f "/opt/memento/.env.docker" ]; then
|
|
set -a
|
|
source "/opt/memento/.env.docker"
|
|
set +a
|
|
fi
|
|
|
|
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"
|
|
|
|
log "Configuring PostgreSQL WAL parameters..."
|
|
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 "Restarting PostgreSQL container to apply WAL parameters (required for wal_level)..."
|
|
docker restart "$PG_CONTAINER"
|
|
|
|
# Wait for PostgreSQL to be ready
|
|
log "Waiting for PostgreSQL to be ready..."
|
|
until docker exec "$PG_CONTAINER" pg_isready -U "$PG_USER" -d "$PG_DB" >/dev/null 2>&1; do
|
|
sleep 1
|
|
done
|
|
|
|
log "PostgreSQL is ready. Reloading config..."
|
|
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"
|