Files
homelab-docs/scripts/backup-vps-miran.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

83 lines
3.6 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
# Бэкап VPS Миран (telegram-helper-bot): БД, voice_users и контент из S3 (Miran).
# Запускать на хосте Proxmox под root.
# Требуется: SSH без пароля с хоста к deploy@185.147.80.190 -p 15722 (ключ в ~/.ssh).
# Для S3: установить aws cli и задать креды в /root/.vps-miran-s3.env (см. ниже).
# Результат: /mnt/backup/vps/miran/{db,voice_users,s3}.
set -e
VPS_HOST="185.147.80.190"
VPS_USER="deploy"
VPS_PORT="15722"
VPS_SSH="${VPS_USER}@${VPS_HOST}"
SSH_OPTS=(-o ConnectTimeout=15 -o BatchMode=yes -p "$VPS_PORT")
RSYNC_SSH="ssh -p $VPS_PORT"
REMOTE_DB="/home/prod/bots/telegram-helper-bot/database/tg-bot-database.db"
REMOTE_VOICE="/home/prod/bots/telegram-helper-bot/voice_users"
BACKUP_ROOT="/mnt/backup/vps/miran"
RETENTION_DAYS=14
# S3 (опционально): задать в /root/.vps-miran-s3.env:
# S3_ACCESS_KEY=...
# S3_SECRET_KEY=...
# S3_BUCKET_NAME=telegram-helper-bot
S3_ENV="/root/.vps-miran-s3.env"
S3_ENDPOINT="https://api.s3.miran.ru"
if [ "$(id -u)" -ne 0 ]; then
echo "Запускайте под root."
exit 1
fi
mkdir -p "$BACKUP_ROOT/db" "$BACKUP_ROOT/voice_users" "$BACKUP_ROOT/s3"
# ---- 1) Копирование БД с VPS ----
DATE=$(date +%Y%m%d)
DB_DEST="$BACKUP_ROOT/db/tg-bot-database-$DATE.db"
if rsync -az -e "$RSYNC_SSH" --timeout=60 "${VPS_SSH}:${REMOTE_DB}" "$DB_DEST" 2>/dev/null; then
echo "БД скопирована: $DB_DEST ($(du -h "$DB_DEST" | cut -f1))"
else
echo "Предупреждение: не удалось скопировать БД с VPS (проверьте SSH и путь)."
fi
find "$BACKUP_ROOT/db" -name 'tg-bot-database-*.db' -mtime +$RETENTION_DAYS -delete
# ---- 2) Копирование voice_users с VPS ----
if rsync -az -e "$RSYNC_SSH" --timeout=600 "${VPS_SSH}:${REMOTE_VOICE}/" "$BACKUP_ROOT/voice_users/" 2>/dev/null; then
echo "voice_users обновлён: $BACKUP_ROOT/voice_users/"
else
echo "Предупреждение: не удалось скопировать voice_users с VPS."
fi
# ---- 3) Выгрузка S3 (Miran) в локальную копию ----
if [ -f "$S3_ENV" ]; then
# shellcheck source=/dev/null
source "$S3_ENV"
if [ -n "$S3_ACCESS_KEY" ] && [ -n "$S3_SECRET_KEY" ] && [ -n "$S3_BUCKET_NAME" ]; then
if command -v aws >/dev/null 2>&1; then
export AWS_ACCESS_KEY_ID="$S3_ACCESS_KEY"
export AWS_SECRET_ACCESS_KEY="$S3_SECRET_KEY"
if aws s3 sync "s3://${S3_BUCKET_NAME}" "$BACKUP_ROOT/s3/" --endpoint-url "$S3_ENDPOINT" --no-progress 2>/dev/null; then
echo "S3 синхронизирован: $BACKUP_ROOT/s3/"
else
echo "Предупреждение: aws s3 sync завершился с ошибкой."
fi
else
echo "Предупреждение: aws cli не установлен — S3 не бэкапится. Установите: apt install awscli."
fi
else
echo "Предупреждение: в $S3_ENV заданы не все переменные (S3_ACCESS_KEY, S3_SECRET_KEY, S3_BUCKET_NAME)."
fi
else
echo "Подсказка: для бэкапа S3 создайте $S3_ENV с S3_ACCESS_KEY, S3_SECRET_KEY, S3_BUCKET_NAME."
fi
NOTIFY_SCRIPT="${NOTIFY_SCRIPT:-/root/scripts/notify-telegram.sh}"
if [ -x "$NOTIFY_SCRIPT" ]; then
SIZE=$(du -sh "$BACKUP_ROOT" 2>/dev/null | cut -f1) || true
BODY="Резервное копирование завершено.
Объекты: БД, voice_users, S3 (telegram-helper-bot).
Размер копии: ${SIZE:-}."
"$NOTIFY_SCRIPT" "🖥️ VPS Миран" "$BODY" || true
fi