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.
55 lines
2.2 KiB
Bash
55 lines
2.2 KiB
Bash
#!/bin/bash
|
||
# Бэкап конфигов MTProto + сайт-заглушка с VPS Германия (185.103.253.99).
|
||
# Запускать на хосте Proxmox под root.
|
||
# Требуется: SSH без пароля с хоста к root@185.103.253.99 (ключ в ~/.ssh).
|
||
# Результат: /mnt/backup/vps/mtproto-germany/mtproto-config-YYYYMMDD-HHMM.tar.gz
|
||
set -e
|
||
|
||
VPS_HOST="185.103.253.99"
|
||
VPS_USER="root"
|
||
SSH_OPTS=(-o ConnectTimeout=15 -o BatchMode=yes)
|
||
BACKUP_ROOT="/mnt/backup/vps/mtproto-germany"
|
||
RETENTION_DAYS=14
|
||
|
||
if [ "$(id -u)" -ne 0 ]; then
|
||
echo "Запускайте под root."
|
||
exit 1
|
||
fi
|
||
|
||
mkdir -p "$BACKUP_ROOT"
|
||
DATE=$(date +%Y%m%d-%H%M)
|
||
ARCHIVE="$BACKUP_ROOT/mtproto-config-$DATE.tar.gz"
|
||
|
||
# Проверка доступа к VPS
|
||
if ! ssh "${SSH_OPTS[@]}" "${VPS_USER}@${VPS_HOST}" "echo ok" >/dev/null 2>&1; then
|
||
echo "Ошибка: нет доступа по SSH к ${VPS_USER}@${VPS_HOST}. Настройте ключ: ssh-copy-id ${VPS_USER}@${VPS_HOST}"
|
||
exit 1
|
||
fi
|
||
|
||
# Архив с VPS: mtg, nginx, letsencrypt (katykhin.store), статика сайта
|
||
ssh "${SSH_OPTS[@]}" "${VPS_USER}@${VPS_HOST}" "tar -chzf - -C / \
|
||
etc/systemd/system/mtg.service \
|
||
etc/nginx/sites-available \
|
||
etc/nginx/sites-enabled \
|
||
etc/letsencrypt/live/katykhin.store \
|
||
etc/letsencrypt/archive/katykhin.store \
|
||
etc/letsencrypt/renewal/katykhin.store.conf \
|
||
var/www/katykhin.store" > "$ARCHIVE"
|
||
|
||
chmod 600 "$ARCHIVE"
|
||
echo "Бэкап MTProto (VPS DE): $ARCHIVE ($(du --apparent-size -h "$ARCHIVE" | cut -f1))"
|
||
|
||
find "$BACKUP_ROOT" -name 'mtproto-config-*.tar.gz' -mtime +$RETENTION_DAYS -delete
|
||
|
||
NOTIFY_SCRIPT="${NOTIFY_SCRIPT:-/root/scripts/notify-telegram.sh}"
|
||
if [ -x "$NOTIFY_SCRIPT" ]; then
|
||
SIZE=$(du --apparent-size -h "$ARCHIVE" | cut -f1)
|
||
SIZE_BYTES=$(stat -c%s "$ARCHIVE" 2>/dev/null || echo 0)
|
||
BODY="Резервное копирование завершено.
|
||
Объекты: конфиги MTProto, nginx, Let's Encrypt, сайт (VPS DE).
|
||
Размер копии: ${SIZE}."
|
||
[ "$SIZE_BYTES" -lt 1024 ] 2>/dev/null && BODY="${BODY}
|
||
⚠️ Подозрительно малый размер — проверьте SSH и наличие файлов на VPS."
|
||
"$NOTIFY_SCRIPT" "🌐 VPS MTProto (DE)" "$BODY" || true
|
||
fi
|