39 lines
1014 B
Bash
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" |