В этом руководстве описывается, как создавать автоматизированные резервные копии корневого каталога документов веб-сервера и файлов конфигурации Nginx с помощью утилит tar
, rsync
и cron
. Пример расписания выполняется ежедневно, а резервные копии сохраняются в течение одного года.
Предпосылки
- Сервер с Ubuntu 24.04 в качестве ОС
- Права пользователя: пользователь root или обычный пользователь с привилегиями sudo
Вы можете адаптировать это руководство для других веб-серверов и дистрибутивов Linux с небольшими изменениями. Используемые команды являются стандартными для большинства дистрибутивов Linux.
Конвенции
|
|
Обновите систему
Свежая установка Ubuntu 24.04 требует обновления пакетов до последних доступных версий.
|
|
Правило 3-2-1
Правило резервного копирования 3-2-1 гласит, что вам нужны три копии ваших данных. В дополнение к основной рабочей копии вам нужны две резервные копии, хранящиеся на разных типах носителей, одна из которых должна быть вне офиса. С этой системой вы вряд ли потеряете свои данные.
1. Подготовка к резервному копированию
Перед созданием резервной копии убедитесь, что на веб-сервере достаточно места на диске.
|
|
Сравните это с размером корневого каталога вашего веб-сайта и файлов конфигурации Nginx, а также любых других каталогов, которые вы хотите создать:
|
|
Убедившись, что для выполнения резервного копирования достаточно места, создайте каталог для локальной резервной копии.
|
|
2. Выполнение резервного копирования
Создайте резервную копию корневого каталога документов веб-сервера и каталога конфигурации Nginx с помощью tar
. Назовите этот файл web-server.tar.gz
.
|
|
Аргументы (-cvpzf -C
) в команде указывают следующее:
c
- Создать архивv
- Подробноz
- Сжать файл с помощьюgzip
p
- Сохранение прав доступа к файламf
- Путь и имя файла архиваC
- Изменить каталог
Обратите внимание на пробел после /var/
и /etc/
в команде перед указанием имени каталога для резервного копирования. Включите любые другие каталоги, которые вы хотите сделать резервными, с помощью дополнительных аргументов -C
в команде.
Как исключить файлы
Чтобы исключить файл или каталог из архива, используйте --exclude=path/to/file/
. Например, если вы хотите исключить каталог /var/www/example.com/junk/
, используйте:
|
|
Примечание: не включайте полный путь при указании того, что следует исключить, используйте относительный путь. Например, используйте
www/example.com/junk
вместо/var/www/example.com/junk
. Используйте несколько директив--exclude=path/to/file/
при исключении нескольких файлов и каталогов. Вы также можете использовать файл исключения, если у вас много каталогов для исключения.
3. Тестирование восстановления
Перед автоматизацией процесса убедитесь, что вы можете восстановить файлы. Сначала создайте тестовый каталог для восстановления.
|
|
Восстановите архив в каталог.
|
|
Команда extract имеет несколько новых аргументов:
x
- Извлечь архивz
- Распаковать архив
Проверьте, что восстановление прошло успешно, выведя список содержимого.
|
|
После проверки удалите тестовый каталог:
|
|
4. Автоматизация с помощью Cron
Утилита cron
планирует выполнение команд в определенное время. В этом примере ежедневное резервное копирование будет запланировано на 02:00, и будет сохраняться по одной резервной копии на каждый день недели, а также будет использоваться команда date
для присвоения архиву имени в соответствии с днем недели, когда он был создан.
|
|
Переменная +\%a
указывает, что дата должна быть возвращена как сокращенный день недели. Например, «Пн», «Вт» и т.д. Команда tar
перезапишет ежедневный архив предыдущей недели.
Добавьте задание в crontab
Расписания cron
хранятся в файле с именем crontab. Типичная запись crontab начинается с пяти значений (или звездочек), за которыми следует команда. Значения сообщают cron
, когда выполнять команду, а звездочка означает «все».
|
|
Чтобы отредактировать crontab, выполните:
|
|
Добавьте команду tar
в конец файла, включая расписание в начале:
|
|
Это запланирует cron
для запуска команды в 02:00, каждый день любого месяца.
12-месячное хранение
Чтобы сохранять ежемесячные резервные копии, используйте другое расписание, которое добавляет к имени файла сокращенное название месяца с помощью параметра +\%b
к команде. Чтобы проверить команды date
перед тем, как вставлять их в имя файла, используйте echo
для их вывода:
|
|
Добавьте это в новую строку в crontab
:
|
|
Это запланирует cron
для запуска ежемесячного резервного копирования в 00:00, в первый день месяца. Через год старые архивы будут перезаписаны.
5. Резервное копирование вне сайта
Чтобы выполнить правило резервного копирования 3-2-1, внешний сервер будет использовать rsync
для загрузки резервных копий с веб-сервера. Убедитесь, что и на веб-сервере, и на внешнем сервере установлен rsync
. Он установлен по умолчанию в системах Ubuntu и может быть установлен вручную с помощью:
|
|
Войдите на внешний сервер и создайте каталог для хранения резервных копий:
|
|
Запустите rsync
, чтобы загрузить резервные копии с веб-сервера. Добавьте завершающий слеш после удаленного каталога, чтобы перенести только содержимое каталога.
|
|
rsync
принимает ряд аргументов:
a
- Архивировать, рекурсивно синхронизировать, сохраняя символические ссылки, разрешения файлов и т.д.z
- Сжимать данные файлов во время передачиP
- Сокращение от--partial
и--progress
, сохранять частично переданные файлы при прерывании и отображать ход передачи--delete
- Удалять посторонние файлы из целевого каталога
Будьте осторожны с
--delete
. Сначала протестируйте свою команду с опцией--dry-run
, чтобы предотвратить потерю данных.
Исключение файлов
Вы можете исключить файлы из rsync
. Чтобы исключить файл из передачи, используйте аргумент --exclude=relative/path/to/file/
в своей команде. Например, если вы хотите исключить резервную копию среды из передачи:
|
|
Повторите --exclude=relative/path/to/file/
для каждого файла или каталога, которые вы хотите исключить.
Примечание: не включайте полный путь при указании того, что следует исключить, исключаемые пути должны быть относительными к исходному пути. Например, чтобы исключить резервную копию среды, хранящуюся в
/var/web_backup/daily/
, используйтеdaily/web-server.Wed.tar.gz
, а не/var/web_backup/daily/web-server.Wed.tar.gz
.
6. Вход в систему Rsync без пароля
Чтобы автоматизировать процесс, настройте rsync
для подключения к веб-серверу с внешнего сервера без пароля.
На внешнем сервере создайте пару ключей для rsync
:
|
|
Назовите ключ id_rsa_rsync
и не вводите парольную фразу.
Добавьте новый открытый ключ на веб-сервер.
|
|
Внешний сервер должен иметь возможность загружать файлы с веб-сервера без пароля. На внешнем сервере проверьте команду.
|
|
Если кто-то получит доступ к внешнему серверу, пара ключей предоставит ему доступ для входа на веб-сервер. Можно ограничить ключ и запретить удаленный вход.
Найдите точную команду, выполняемую на веб-сервере, с помощью grep
, включив подробный флаг -v
в ssh
.
|
|
Подключитесь к веб-серверу по SSH и отредактируйте файл authorized_keys
:
|
|
Найдите открытый ключ, который вы добавили ранее. Например:
|
|
Вставьте директиву команды перед ssh-rsa
, используя команду из шага 1. Строка будет выглядеть так, например:
|
|
Эта директива ограничивает ключ одной командой, снижая риск того, что злоумышленник может получить доступ к веб-серверу.
Проверьте команду rsync
с помощью ключа:
|
|
Попробуйте войти с помощью ключа и убедитесь, что доступ для интерактивного входа запрещен.
|
|
7. Автоматизируйте процесс
Откройте crontab
на сервере вне сайта.
|
|
Добавьте команду rsync в конец файла.
|
|
Это запланирует cron
для запуска команды rsync
в 03:00 каждый день.
Завершение
У вас есть рабочая стратегия резервного копирования 3-2-1! Автоматические резервные копии вашего веб-сайта создаются ежедневно и отправляются на удаленное местоположение с сохранением в течение одного года.
Вы также можете поделиться статьей со своими друзьями в социальных сетях, которым может быть интересна эта статья, или просто оставить комментарий ниже. Спасибо.