В этом руководстве описывается, как создавать автоматизированные резервные копии корневого каталога документов веб-сервера и файлов конфигурации 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- Сжать файл с помощьюgzipp- Сохранение прав доступа к файлам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! Автоматические резервные копии вашего веб-сайта создаются ежедневно и отправляются на удаленное местоположение с сохранением в течение одного года.
Вы также можете поделиться статьей со своими друзьями в социальных сетях, которым может быть интересна эта статья, или просто оставить комментарий ниже. Спасибо.