Как настроить резервное копирование с основного сервера на удаленный сервер

Автоматическое резервное копирование данных Shaarli на удаленный сервер

Автоматическое резервное копирование данных Shaarli

Как настроить резервное копирование с основного сервера на удаленный сервер

Shaarli — отличный инструмент для управления закладками, но, как и любые важные данные, информация, хранящаяся в нем, нуждается в регулярном резервном копировании. В предыдущей статье мы подробно рассмотрели установку Shaarli на Ubuntu 24.04. Теперь давайте разберем, как настроить автоматическое резервное копирование данных Shaarli с основного сервера на отдельный удаленный сервер для хранения.

Почему важно хранить резервные копии на отдельном сервере?

  • Надежность: Если с основным сервером что-то случится (сбой диска, взлом, удаление данных), у вас будет копия на другом сервере.
  • Изоляция: Резервные копии находятся в отдельном месте, недоступном напрямую Shaarli или потенциальным злоумышленникам, имеющим доступ к основному серверу.
  • Простота восстановления: Иметь копию данных на другом сервере значительно упрощает процесс восстановления на новый или восстановленный основной сервер.

Предварительные условия

  • У вас есть два сервера: Сервер 1 (где установлен и работает Shaarli) и Сервер 2 (резервный сервер для хранения копий).
  • У вас есть SSH-доступ к обоим серверам под соответствующими учетными записями (например, user1 на Сервере 1 и user2 на Сервере 2).
  • На Сервере 1 установлены openssh-client и cron (обычно идут по умолчанию).

Пошаговая инструкция

Шаг 1: Настройка SSH-ключей для автоматического доступа

Нам нужно настроить автоматическую аутентификацию по ключам SSH с Сервера 1 на Сервер 2, чтобы скрипт резервного копирования мог передавать файлы без ввода пароля.

  1. На Сервере 1 (под пользователем user1):
    • Проверьте наличие SSH-ключей:
      ls -l ~/.ssh/id_rsa*
    • Если ключи отсутствуют, создайте их:
      ssh-keygen -t rsa -b 4096
      Нажмите Enter, чтобы принять стандартные настройки.
  2. Скопируйте публичный ключ на Сервер 2:
    ssh-copy-id user2@IP_АДРЕС_СЕРВЕРА_2
    Замените user2 на имя пользователя на резервном сервере и IP_АДРЕС_СЕРВЕРА_2 на его реальный IP или имя хоста. Введите пароль пользователя user2 при запросе.
  3. Проверьте подключение:
    ssh user2@IP_АДРЕС_СЕРВЕРА_2
    Если соединение установилось без запроса пароля, настройка завершена. Выйдите с резервного сервера командой exit.

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

Создадим скрипт на Сервере 1, который будет архивировать данные Shaarli и отправлять их на Сервер 2.

  1. На Сервере 1 (под пользователем user1):
    • Создайте файл скрипта, например:
      nano ~/backup_shaarli_to_remote.sh
    • Скопируйте и вставьте следующий код в редактор. Обязательно измените переменные REMOTE_USER, REMOTE_HOST, REMOTE_PATH и LOG_FILE под вашу конфигурацию:
      #!/bin/bash
      
      # --- НАСТРОЙКИ ---
      # Пользователь на резервном сервере
      REMOTE_USER="user2"
      # IP-адрес или имя хоста резервного сервера
      REMOTE_HOST="IP_АДРЕС_СЕРВЕРА_2"
      # Путь на резервном сервере для хранения бэкапов
      # Убедитесь, что этот путь существует на резервном сервере и доступен для записи пользователю user2
      REMOTE_PATH="/home/user2/shaarli_backups"
      # Путь к установленному Shaarli на исходном сервере
      LOCAL_SHAARLI_PATH="/var/www/shaarli"
      # Формат даты и времени для имени файла архива
      DATE=$(date +"%Y-%m-%d_%H-%M-%S")
      # Имя архива
      ARCHIVE_NAME="shaarli-backup-$DATE.tar.gz"
      # Лог-файл
      LOG_FILE="/home/user1/shaarli_backup.log"
      # --- КОНЕЦ НАСТРОЕК ---
      
      # --- ЛОГИКА СКРИПТА ---
      echo "[$(date)] Начало резервного копирования Shaarli..." | tee -a "$LOG_FILE"
      
      # 1. Создание архива данных локально во временной директории /tmp
      echo "[$(date)] Создание архива /tmp/$ARCHIVE_NAME из $LOCAL_SHAARLI_PATH/data..." | tee -a "$LOG_FILE"
      sudo tar -czf "/tmp/$ARCHIVE_NAME" -C "$LOCAL_SHAARLI_PATH" data 2>> "$LOG_FILE"
      
      # Проверка успешности создания архива
      if [ $? -ne 0 ]; then
          echo "[$(date)] ОШИБКА: Не удалось создать архив /tmp/$ARCHIVE_NAME!" | tee -a "$LOG_FILE"
          # Попытка удалить частично созданный архив, если он существует
          rm -f "/tmp/$ARCHIVE_NAME"
          exit 1
      fi
      
      # 2. Передача архива на удаленный сервер
      echo "[$(date)] Передача архива на $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/..." | tee -a "$LOG_FILE"
      scp "/tmp/$ARCHIVE_NAME" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/" 2>> "$LOG_FILE"
      
      # Проверка успешности передачи
      if [ $? -ne 0 ]; then
          echo "[$(date)] ОШИБКА: Не удалось передать архив на удаленный сервер!" | tee -a "$LOG_FILE"
          # Удаляем локальный архив в случае ошибки передачи
          rm -f "/tmp/$ARCHIVE_NAME"
          exit 1
      fi
      
      # 3. Удаление локального архива после успешной передачи
      echo "[$(date)] Удаление локального архива /tmp/$ARCHIVE_NAME..." | tee -a "$LOG_FILE"
      rm -f "/tmp/$ARCHIVE_NAME"
      
      # 4. (Опционально) Удаление старых архивов на удаленном сервере (оставим, например, последние 7)
      # Раскомментируйте следующие строки, если хотите автоматически удалять старые бэкапы
      # echo "[$(date)] Удаление старых архивов на удаленном сервере (оставляем последние 7)..." | tee -a "$LOG_FILE"
      # ssh "$REMOTE_USER@$REMOTE_HOST" "cd '$REMOTE_PATH' && ls -t '$REMOTE_PATH'/shaarli-backup-*.tar.gz | tail -n +8 | xargs -r rm -f" 2>> "$LOG_FILE"
      
      echo "[$(date)] Резервное копирование Shaarli завершено успешно." | tee -a "$LOG_FILE"
      # --- КОНЕЦ ЛОГИКИ СКРИПТА ---
      
    • Сохраните файл (Ctrl+O, Enter) и закройте редактор (Ctrl+X в nano).
    • Сделайте скрипт исполняемым:
      chmod +x ~/backup_shaarli_to_remote.sh

Шаг 3: Подготовка резервного сервера (Сервер 2)

  1. На Сервере 2 (под пользователем user2 или root):
    • Создайте директорию для хранения бэкапов:
      mkdir -p /home/user2/shaarli_backups
      Убедитесь, что путь соответствует переменной REMOTE_PATH в скрипте на Сервере 1.
    • Проверьте права доступа к этой директории. Пользователь user2 должен иметь право записи.

Шаг 4: Тестирование скрипта

  1. На Сервере 1 (под пользователем user1):
    • Запустите скрипт вручную:
      ~/backup_shaarli_to_remote.sh
    • Наблюдайте за выводом в терминале и проверьте лог-файл:
      tail -n 20 /home/user1/shaarli_backup.log
    • Проверьте Сервер 2: зайдите на него и убедитесь, что в директории /home/user2/shaarli_backups появился новый файл shaarli-backup-YYYY-MM-DD_HH-MM-SS.tar.gz.

Шаг 5: Настройка автоматического запуска через Cron

  1. На Сервере 1 (под пользователем user1):
    • Откройте crontab для редактирования:
      crontab -e
    • Добавьте строку для запуска скрипта, например, ежедневно в 02:15 ночи:
      15 2 * * * /home/user1/backup_shaarli_to_remote.sh
      • 15 2 * * * означает “в 15 минут 2 часа каждый день”.
      • /home/user1/backup_shaarli_to_remote.sh – полный путь к вашему скрипту.
    • Сохраните изменения и закройте файл.
    • Проверьте, что задание добавлено:
      crontab -l

Заключение

Теперь у вас настроено автоматическое резервное копирование данных Shaarli с основного сервера на отдельный резервный сервер. Скрипт будет выполняться ежедневно, создавая архив папки /var/www/shaarli/data и передавая его по SSH на удаленный сервер. Это значительно повышает надежность хранения ваших закладок и упрощает процесс восстановления в случае необходимости.

Не забывайте периодически проверять лог-файл /home/user1/shaarli_backup.log на предмет ошибок и убедиться, что на резервном сервере действительно появляются новые файлы. Также рекомендуется время от времени проверять целостность и возможность восстановления данных из архивов.

© 2025 BigGratz.ru