#!/bin/bash # Логический бэкап PostgreSQL (Nextcloud) из контейнера 101. # Запускать на хосте Proxmox под root. Использует pct exec (SSH не нужен). # Результат: /mnt/backup/databases/ct101-nextcloud/nextcloud-db-YYYYMMDD-HHMM.sql.gz set -e CT_ID=101 BACKUP_DIR="/mnt/backup/databases/ct101-nextcloud" RETENTION_DAYS=14 # Имя контейнера БД в compose-проекте nextcloud (при смене имени в compose — поправить) PG_CONTAINER="nextcloud-db-1" if [ "$(id -u)" -ne 0 ]; then echo "Запускайте под root." exit 1 fi mkdir -p "$BACKUP_DIR" DATE=$(date +%Y%m%d-%H%M) OUTPUT="$BACKUP_DIR/nextcloud-db-$DATE.sql.gz" pct exec $CT_ID -- docker exec "$PG_CONTAINER" pg_dump -U nextcloud nextcloud 2>/dev/null | gzip > "$OUTPUT" if [ -s "$OUTPUT" ]; then echo "Создан: $OUTPUT ($(du -h "$OUTPUT" | cut -f1))" else echo "Ошибка: дамп пустой или контейнер недоступен." rm -f "$OUTPUT" exit 1 fi find "$BACKUP_DIR" -name 'nextcloud-db-*.sql.gz' -mtime +$RETENTION_DAYS -delete