Files
homelab-docs/scripts/backup-vps-mtproto.sh
Andrey f319133cee Add notification feature to backup scripts for various services
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.
2026-02-27 20:42:30 +03:00

55 lines
2.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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