Автоматическое резервное копирование данных 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 (под пользователем
user1
):- Проверьте наличие SSH-ключей:
ls -l ~/.ssh/id_rsa*
- Если ключи отсутствуют, создайте их:
Нажмите Enter, чтобы принять стандартные настройки.ssh-keygen -t rsa -b 4096
- Проверьте наличие SSH-ключей:
- Скопируйте публичный ключ на Сервер 2:
Заменитеssh-copy-id user2@IP_АДРЕС_СЕРВЕРА_2
user2
на имя пользователя на резервном сервере иIP_АДРЕС_СЕРВЕРА_2
на его реальный IP или имя хоста. Введите пароль пользователяuser2
при запросе. - Проверьте подключение:
Если соединение установилось без запроса пароля, настройка завершена. Выйдите с резервного сервера командойssh user2@IP_АДРЕС_СЕРВЕРА_2
exit
.
Шаг 2: Создание скрипта резервного копирования
Создадим скрипт на Сервере 1, который будет архивировать данные Shaarli и отправлять их на Сервер 2.
- На Сервере 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)
- На Сервере 2 (под пользователем
user2
илиroot
):- Создайте директорию для хранения бэкапов:
Убедитесь, что путь соответствует переменнойmkdir -p /home/user2/shaarli_backups
REMOTE_PATH
в скрипте на Сервере 1. - Проверьте права доступа к этой директории. Пользователь
user2
должен иметь право записи.
- Создайте директорию для хранения бэкапов:
Шаг 4: Тестирование скрипта
- На Сервере 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 (под пользователем
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
- Откройте crontab для редактирования:
Заключение
Теперь у вас настроено автоматическое резервное копирование данных Shaarli с основного сервера на отдельный резервный сервер. Скрипт будет выполняться ежедневно, создавая архив папки /var/www/shaarli/data
и передавая его по SSH на удаленный сервер. Это значительно повышает надежность хранения ваших закладок и упрощает процесс восстановления в случае необходимости.
Не забывайте периодически проверять лог-файл /home/user1/shaarli_backup.log
на предмет ошибок и убедиться, что на резервном сервере действительно появляются новые файлы. Также рекомендуется время от времени проверять целостность и возможность восстановления данных из архивов.
© 2025 BigGratz.ru