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

Для настройки надо ссылки на быструю загрузку необходимо указать корректную ссылку на сервер nextcloud.
Настройка rclone для Nextcloud
Создание скрипта
Установка программы архиватора:
apt install zip
Создадим скрипт:
nano /root/backup_script.sh
chmod +x /root/backup_script.sh
Скрипт для резервного копирования:
#!/bin/bash
set -euo pipefail
# === НАСТРОЙКИ ===
# Переменные для Telegram
TELEGRAM_BOT_TOKEN=""
TELEGRAM_CHAT_ID=""
TELEGRAM_THREAD_ID=""
NEXTCLOUD_URL="https://nextcloud.<domein>.ru/remote.php/dav/files"
NEXTCLOUD_USER=""
# Папка для архивации (можно менять)
SRC_DIR="/home/docker"
# Данные сервера
SERVER_NAME="SRV1"
# Папка для хранения архива и логов
DEST_DIR="/home/backups"
mkdir -p "$DEST_DIR"
# Настройки rclone
RCLONE_NAME="Nextcloud"
RCLONE_TARGET="$RCLONE_NAME:Backups/SRV1"
# 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 disable_notification=true \
-d text="${MESSAGE}"
}
# === ЛОГИ ===
DATE=$(date +'%Y-%m-%d_%H-%M-%S')
LOG_FILE="$DEST_DIR/backup_$DATE.log"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "=== НАЧАЛО РЕЗЕРВНОГО КОПИРОВАНИЯ $DATE ==="
ARCHIVE_NAME="${SERVER_NAME}_backup_$DATE.zip"
ARCHIVE_PATH="$DEST_DIR/$ARCHIVE_NAME"
# === СОЗДАНИЕ АРХИВА ===
echo "Создание архива $ARCHIVE_PATH"
# Копируем указанную папку напрямую в архив
zip -r "$ARCHIVE_PATH" "$SRC_DIR" || {
echo "❌ Ошибка при создании архива для папки $SRC_DIR!"
send_telegram_message "❌ Ошибка резервного копирования папки $SRC_DIR сервера $SERVER_NAME"
exit 1
}
# Создаём tar.gz для каждого volume и добавляем в архив
for VOL in $(docker volume ls -q); do
VOL_PATH=$(docker volume inspect "$VOL" -f '{{ .Mountpoint }}')
VOL_ARCHIVE="${VOL}.tar.gz"
echo "Архивируем volume $VOL -> $VOL_ARCHIVE"
tar -czf "$VOL_ARCHIVE" -C "$VOL_PATH" .
# Добавляем в общий архив
zip -r "$ARCHIVE_PATH" "$VOL_ARCHIVE" || {
echo "❌ Ошибка при добавлении volume $VOL в архив!"
send_telegram_message "❌ Ошибка при добавлении volume $VOL сервера $SERVER_NAME"
rm -f "$VOL_ARCHIVE"
exit 1
}
rm -f "$VOL_ARCHIVE"
done
echo "✅ Архив создан: $ARCHIVE_PATH"
# === ЗАГРУЗКА В NEXTCLOUD ===
echo "Загрузка архива в Nextcloud..."
if rclone copy "$ARCHIVE_PATH" "$RCLONE_TARGET"; then
echo "✅ Архив успешно загружен в Nextcloud."
send_telegram_message "✅ Создана резервная копия сервера *$SERVER_NAME* в [Nextcloud]($NEXTCLOUD_URL/$NEXTCLOUD_USER/Backups/Selectl_SPB/$ARCHIVE_NAME)"
rm -f "$ARCHIVE_PATH"
else
echo "❌ Ошибка при загрузке архива!"
send_telegram_message "❌ Ошибка при загрузке резервной копии сервера $SERVER_NAME"
fi
# === РОТАЦИЯ СТАРЫХ АРХИВОВ В NEXTCLOUD (старше 7 дней) ===
echo "Удаление архивов старше 7 дней в Nextcloud..."
rclone delete --min-age 7d "$RCLONE_TARGET" || echo "⚠️ Ошибка при очистке старых архивов."
echo "=== ЗАВЕРШЕНО $(date) ==="
Настройка скрипта
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