Enhance backup scripts for Nextcloud, Gitea, Paperless, Vaultwarden, Immich, and VPS configurations by adding Telegram notifications upon completion. Include details such as backup size and objects backed up. Update backup documentation to reflect these changes and ensure clarity on backup processes and retention policies.
54 lines
2.1 KiB
Bash
54 lines
2.1 KiB
Bash
#!/bin/bash
|
||
# Логический бэкап PostgreSQL (Immich) с VM 200.
|
||
# Запускать на хосте Proxmox под root. Требуется SSH без пароля: root@host → admin@192.168.1.200
|
||
# (ssh-copy-id или ключ в ~/.ssh).
|
||
#
|
||
# На VM 200 должен быть установлен скрипт /opt/immich/scripts/backup-db.sh (см. immich-pgdump-remote.sh).
|
||
# Результат: /mnt/backup/databases/vm200-immich/immich-db-YYYYMMDD-HHMM.sql.gz
|
||
#
|
||
set -e
|
||
|
||
VM_SSH="admin@192.168.1.200"
|
||
REMOTE_SCRIPT="/opt/immich/scripts/backup-db.sh"
|
||
BACKUP_DIR="/mnt/backup/databases/vm200-immich"
|
||
RETENTION_DAYS=14
|
||
|
||
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/immich-db-$DATE.sql.gz"
|
||
|
||
if ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "$VM_SSH" "test -x $REMOTE_SCRIPT"; then
|
||
ssh -o ConnectTimeout=30 "$VM_SSH" "sudo $REMOTE_SCRIPT" | gzip > "$OUTPUT"
|
||
else
|
||
echo "На VM 200 не найден скрипт $REMOTE_SCRIPT. Скопируйте туда scripts/immich-pgdump-remote.sh и сделайте исполняемым."
|
||
exit 1
|
||
fi
|
||
|
||
if [ -s "$OUTPUT" ]; then
|
||
echo "Создан: $OUTPUT ($(du --apparent-size -h "$OUTPUT" | cut -f1))"
|
||
else
|
||
echo "Ошибка: дамп пустой или не создан."
|
||
rm -f "$OUTPUT"
|
||
exit 1
|
||
fi
|
||
|
||
# Удалить дампы старше RETENTION_DAYS
|
||
find "$BACKUP_DIR" -name 'immich-db-*.sql.gz' -mtime +$RETENTION_DAYS -delete
|
||
|
||
NOTIFY_SCRIPT="${NOTIFY_SCRIPT:-/root/scripts/notify-telegram.sh}"
|
||
if [ -x "$NOTIFY_SCRIPT" ]; then
|
||
SIZE=$(du --apparent-size -h "$OUTPUT" | cut -f1)
|
||
SIZE_BYTES=$(stat -c%s "$OUTPUT" 2>/dev/null || echo 0)
|
||
BODY="Резервное копирование завершено.
|
||
Объекты: дамп БД Immich (PostgreSQL, VM 200).
|
||
Размер копии: ${SIZE}."
|
||
[ "$SIZE_BYTES" -lt 10240 ] 2>/dev/null && BODY="${BODY}
|
||
⚠️ Подозрительно малый размер — проверьте скрипт на VM 200 и наличие данных в БД."
|
||
"$NOTIFY_SCRIPT" "🗄️ Immich (БД)" "$BODY" || true
|
||
fi
|