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.
83 lines
3.6 KiB
Bash
83 lines
3.6 KiB
Bash
#!/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
|