61 lines
1.8 KiB
Bash
61 lines
1.8 KiB
Bash
#!/bin/bash
|
|
# PostgreSQL Backup Script for Proxmox LXC Container
|
|
|
|
# Load environment variables
|
|
if [ -f ../.env ]; then
|
|
source ../.env
|
|
else
|
|
echo "Error: .env file not found!"
|
|
exit 1
|
|
fi
|
|
|
|
# Set default values if not provided in .env
|
|
BACKUP_DIR=${BACKUP_DIR:-"../backups"}
|
|
POSTGRES_USER=${POSTGRES_USER:-"postgres"}
|
|
POSTGRES_DB=${POSTGRES_DB:-"postgres"}
|
|
BACKUP_RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-7}
|
|
|
|
# Create backup directory if it doesn't exist
|
|
mkdir -p ${BACKUP_DIR}
|
|
|
|
# Generate timestamp for backup file
|
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
BACKUP_FILE="${BACKUP_DIR}/postgres_backup_${TIMESTAMP}.sql.gz"
|
|
|
|
echo "Starting PostgreSQL backup..."
|
|
echo "Database: ${POSTGRES_DB}"
|
|
echo "Backup file: ${BACKUP_FILE}"
|
|
|
|
# Perform the backup
|
|
docker exec -t postgres pg_dump -U ${POSTGRES_USER} -d ${POSTGRES_DB} | gzip > ${BACKUP_FILE}
|
|
|
|
# Check if backup was successful
|
|
if [ $? -eq 0 ]; then
|
|
echo "Backup completed successfully: ${BACKUP_FILE}"
|
|
|
|
# Remove backups older than retention period
|
|
find ${BACKUP_DIR} -name "postgres_backup_*.sql.gz" -type f -mtime +${BACKUP_RETENTION_DAYS} -delete
|
|
echo "Cleaned up old backups (older than ${BACKUP_RETENTION_DAYS} days)"
|
|
else
|
|
echo "Error: Backup failed!"
|
|
exit 1
|
|
fi
|
|
|
|
# Print backup information
|
|
echo "Backup size: $(du -h ${BACKUP_FILE} | cut -f1)"
|
|
echo "Available backups:"
|
|
ls -lh ${BACKUP_DIR}
|
|
|
|
# Create a full volume backup as well (for disaster recovery)
|
|
echo "Creating volume backup..."
|
|
VOLUME_BACKUP_FILE="${BACKUP_DIR}/postgres_volume_backup_${TIMESTAMP}.tar.gz"
|
|
docker run --rm -v postgres_data:/data -v $(pwd)/${BACKUP_DIR}:/backup alpine tar -czf /backup/$(basename ${VOLUME_BACKUP_FILE}) /data
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "Volume backup completed successfully: ${VOLUME_BACKUP_FILE}"
|
|
else
|
|
echo "Warning: Volume backup failed!"
|
|
fi
|
|
|
|
exit 0
|