Резервное копирование файлов серверов

Для резервного копирования файлов с удаленного сервера на сервер Nextcloud можно использовать программу rclone и простой скрипт резервного копирования.

В скрипте также предусмотрено прикрепление ссылки для быстрой загрузки
Резервное копирование файлов серверов.png
Для настройки надо ссылки на быструю загрузку необходимо указать корректную ссылку на сервер nextcloud.

Настройка rclone для Nextcloud

Программа rclone позволяет удобно взаимодействовать с сервером Nextcloud используя протокол webdav.

Установка:

curl https://rclone.org/install.sh | sudo bash

Запуск настройки:

rclone config 

Параметры настройки:
url должна иметь вид https://nextcloud.domein.ru/remote.php/dav/files/user где user имя пользователя nextcloud в каталоге (обычно имя пользователя с маленькой буквы).
Пароль - это пароль приложения созданный в настройках раздел безопасность.

Мастер настройки:

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n

Enter name for new remote.
name> nextcloud

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
Storage> 58

Option url.
URL of http host to connect to.
E.g. https://example.com.
Enter a value.
url> https://nextcloud.domein.ru/remote.php/dav/files/user

Option vendor.
Name of the WebDAV site/service/software you are using.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
vendor> 2

Option user.
User name.
In case NTLM authentication is used, the username should be in the format 'Domain\User'.
Enter a value. Press Enter to leave empty.
user> Username

Option pass.
Password.
Choose an alternative below. Press Enter for the default (n).
y) Yes, type in my own password
g) Generate random password
n) No, leave this optional password blank (default)
y/g/n> y
Enter the password:
password:

Option bearer_token.
Bearer token instead of user/pass (e.g. a Macaroon).
Enter a value. Press Enter to leave empty.
bearer_token> 

Edit advanced config?
y) Yes
n) No (default)
y/n> n

Configuration complete.
Options:
- type: webdav
- url: https://nextcloud.domein.ru/remote.php/dav/files/user
- vendor: nextcloud
- user: Username
- pass: *** ENCRYPTED ***
Keep this "nextcloud" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d>y 

Создание скрипта

Установка программы архиватора:

apt install zip

Создадим скрипт:

nano /root/backup_script.sh

Скрипт для резервного копирования:

#!/bin/bash

# Переменные для Telegram
TELEGRAM_BOT_TOKEN=""
TELEGRAM_CHAT_ID=""
TELEGRAM_THREAD_ID=""

# Настройки rclone
TARGET_DIR="Backups/Selectl_SPB"
RCLONE_NAME="Nextcloud"

#Базовая ссылка Nextcloud
NEXTCLOUD_URL="https://nextcloud.domein.ru/remote.php/dav/files"
NEXTCLOUD_USER="user"

# Папки для архивации
SRC_DIRS=("/home/deniom/docker")

# Данные сервера
SERVER_NAME="ServerName"

# Папка для хранения архива
DEST_DIR="/root"

# Имя архива с датой и временем
DATE=$(date +'%Y-%m-%d_%H-%M-%S')
ARCHIVE_NAME="${SERVER_NAME}_backup_$DATE.zip"
ARCHIVE_PATH="$DEST_DIR/$ARCHIVE_NAME"

# Создание архива
zip -r "$ARCHIVE_PATH" "${SRC_DIRS[@]}"

RCLONE_TARGET="$RCLONE_NAME:$TARGET_DIR"

# Функция для отправки уведомления в Telegram
send_telegram_message() {
    MESSAGE=$1
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
        -d chat_id="${TELEGRAM_CHAT_ID}" -d parse_mode="Markdown" \
        -d message_thread_id="${TELEGRAM_THREAD_ID}" -d text="${MESSAGE}"
}

# Загрузка архива и отправка уведомления
if rclone copy "$ARCHIVE_PATH" "$RCLONE_TARGET"; then
    send_telegram_message  "✅ Создана [резервная копия]($NEXTCLOUD_URL/$NEXTCLOUD_USER/$TARGET_DIR/$ARCHIVE_NAME) сервера $SERVER_NAME"
    # Удаление локального архива после копирования
    rm "$ARCHIVE_PATH"
else
    send_telegram_message "❌ Ошибка резервного копирования сервера $SERVER_NAME"
fi

# Ротация архивов (оставить только за последние 7 дней)
rclone delete --min-age 7d "$RCLONE_TARGET"

Настройка скрипта

TELEGRAM_BOT_TOKEN - токен телеграмм бота для уведомлений
TELEGRAM_CHAT_ID - id чата для отправки сообщений
TELEGRAM_THREAD_ID - тема супер группы

Модификация отправки телеграмм

Если не надо использовать темы для отправки сообщений то необходимо удалить -d message_thread_id="${TELEGRAM_THREAD_ID}"

TARGET_DIR - папка хранения файлов в Nextcloud
RCLONE_NAME - имя задания rclone указанное на первом шаге мастера настройки

NEXTCLOUD_URL - адрес nextcloud
NEXTCLOUD_USER - имя пользователя с маленькой буквы

Модификация ссылки на загрузку

Параметры NEXTCLOUD_URL и NEXTCLOUD_USER являются необязательными и используются для формирования ссылки загрузки в сообщении телеграмм. Если данная ссылка не нужна надо заменить [резервная копия]($NEXTCLOUD_URL/$NEXTCLOUD_USER/$TARGET_DIR/$ARCHIVE_NAME) на резервная копия

SRC_DIRS - папки для резервного копирования, может быть задано как несколько папок. Пример: ("/opt/test" "/var/lib/test")
SERVER_NAME - имя сервера, используется в названии архива и в сообщении
DEST_DIR - временная папка хранения архива, после отправки архив удаляется

Автоматический запуск

Для автоматического запуска необходимо добавить запись в crontab

crontab -e
0 5 * * * /root/backup_script.sh >/dev/null 2>&1