BusyBox/docker_postgres_backup.sh

39 lines
1014 B
Bash

#!/bin/bash
# /opt/backup/docker_postgres_backup.sh
BACKUP_DIR="/opt/backup"
RETENTION_DAYS=3 # Backups 3 Tage behalten
DATE=$(date +'%Y-%m-%d')
DATABASES=(
"keycloak-db:keycloak:keycloak" # Keycloak DB
"odoo-db:odoo:busybox-demo" # Odoo DB
"wikijs-db:wikijs:wikijs" # WikiJS DB
)
RESULTS=()
mkdir -p "$BACKUP_DIR"
for DB_ENTRY in "${DATABASES[@]}"; do
IFS=":" read -r CONTAINER DB_USER DB_NAME <<< "$DB_ENTRY"
FILENAME="${BACKUP_DIR}/${DATE}_db_${DB_NAME}.sql.gz"
echo "Sichere Datenbank '${DB_NAME}' aus Container '${CONTAINER}'..."
if docker exec "$CONTAINER" pg_dump -U "$DB_USER" "$DB_NAME" | gzip > "$FILENAME"; then
RESULTS+=("\"$DB_NAME\":\"ok\"")
else
RESULTS+=("\"$DB_NAME\":\"error\"")
fi
done
# Alte Backups löschen
find "$BACKUP_DIR" -name "*.sql.gz" -type f -mtime +$RETENTION_DAYS -exec rm {} \;
# JSON-Ausgabe formatieren
JSON_OUTPUT="{"
JSON_OUTPUT+=$(IFS=, ; echo "${RESULTS[*]}")
JSON_OUTPUT+="}"
echo "$JSON_OUTPUT"