#!/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