Скрипт для удаленного резервного копирования сайтов при помощи WinSCP
Делаем резервное копирование сайтов на локальный компьютер по протоколу SCP (Secure Copy Protocol). Решил поделиться небольшим, но тем не менее очень полезным скриптом, с помощью которого можно делать резервные копии своих сайтов прямо на свой локальный компьютер.
Это может быть полезным при отладке и тестировании сайтов на локальном веб-сервере под Windows, а также в случае необходимости создания текущей резервной копии сайта прямо сейчас, не ожидая запуска удаленного запланированного резервного копирования(которое у вас уже настроено и работает, я так полагаю). Для создания данного инструмента используем WinSCP и самописный скрипт на языке bat-файлов.
Содержание:
- Предисловие
- Принцип работы скрипта резервного копирования
- Интерфейс и меню резервного копирования
- Пример конфигурационного файла для скрипта
- Подготовка к работе и использование скрипта
- О безопасности данных
- Заключение
Предисловие
Идея создания скрипта, который способен в несколько кликов сделать резервную копию сайта(все файлы + дамп базы данных), появилась в то время когда я работал над несколькими проектами, а разработку и тестирование вел на локальном веб-сервере. Еще тогда у меня стоял Денвер, который со временем сменил на более стремительно развивающийся локальный комбайн из веб-служб - OpenServer.
Проекты были посещаемые, поэтому сначала делалась локальная копия всего сайта, а уже после с ней можно было работать и экспериментировать, не допуская перебоев в работе живого проекта. Резервную копию делал так: логинился по SSH и паковал папку проекта архиватором 7Zip или TGZ, делал дамп при помощи mysqldump и скачивал все это добро через веб или SCP/WinSCP.
Сразу же лень дала о себе знать и возникла мысль о автоматизации: "было бы круто если бы все что я вбиваю в консоль делалось автоматом для каждого сайта, а от меня требовалось лишь несколько кликов". Первый поиск решения автоматизации SSH под Windows сразу ще привел меня к утилите, которую я уже давно использую для работы с файлами на серверах - WinSCP.
Принцип работы скрипта резервного копирования
Итак, суть работы скрипта автоматизированного резервного копирования заключается в следующем:
- Читаем данные из ini-файла, где храним настройки для сайта (название, логин, пароль, аккаунт mysql...);
- Исходя из данных генерируем скрипт для WinSCP, который будет делать все нужные операции в консоли на сервере;
- Запускаем программу WinSCP, которая логинится на сервер и делаем резервную копию сайта+БД, а также архивирует все данные используя архиватор с высокой степенью сжатия - 7Zip или TAR+GZip;
- Скачиваем архив;
- Закрываем WinSCP и чистим логи + удаляем временно сгенерированный скрипт для WinSCP с командами;
- Готово! Нужна копия еще одного сайта? - GOTO 1!
Сайтов может быть не один, а несколько, поэтому предусмотрено использование множества ini-файлов с отдельными настройками для каждого сайта.
Все операции по обработке и управлению WinSCP будет производить скрипт. написанный на скриптовом языке bat-файлов под Windows. С помощью него также реализован простой консольный интерфейс, который позволяет производить все нужные операции.
Для данной задачи, исходя из ее простоты, вполне достаточно скриптового языка bat-файлов, но все же никто не мешает осуществить реализацию данной системы на Autoit или же на одном из языков программирования высокого уровня, таких как C#, Delphi и т.п.
Внимание! Скрипт актуален только в том случае, если у вас есть доступ к консоли сервера по SSH.
Интерфейс и меню резервного копирования
После запуска скрипта нам доступно простое меню:
Первый пункт (жмем 1 и ентер) - отвечает за процесс резервного копирования и отображает список доступных конфигурационных файлов-шаблонов для сайтов.
Второй пункт - генерация шаблона конфигурационного файла и открытие его для правки.
Третий пункт - краткая справка по написанию файлов-шаблонов.
На рисунке ниже открыто меню с выбором доступных к резервированию сайтов:
Здесь подпункт "0. All sites listed below" отвечает за запуск резервного копирования всех сайтов с нижеуказанными конфигурационными файлами. Так что можно сделать резервную копию для одного сайта или же для всех сразу.
Пример конфигурационного файла для скрипта
Вот пример конфигурационного файла somesite.com.ini для резервного копирования сайта somesite.com:
sitename_string=somesite_com
store_path=D:\Backup\
archive_method=7z
archive_password=StrOngp@sswOrd
hostname=000.111.222.333
ssh_user=root
ssh_password=p@ssmetotheserver
mysql_user=site1_user
mysql_password=PZBkOyjMmxWgQHhd185g
mysql_db_name=site1_db
dirs_to_backup=/var/www/somesite.com/www/* /var/www/somesite.com/www/.htaccess
Как видите, все просто и ничего лишнего. Расскажу подробно про каждую строку настроек:
sitename_string - присваиваем внятное название сайта (только латиница и символ _).
store_path - путь на локальном компьютере, куда будет загружен архив с резервной копией.
archive_method - метод архивации файлов сайта.
- 7z - будет использован одноименный архиватор, на выходе получим архив с расширением "zip".
- gz - архивация при помощи TAR+GZip, на выходе получится архив с расширением "tgz".
archive_password - пароль на архив, работает только когда archive_method=7z.
hostname - внешний IP адрес или домен сервера, на котором хостится сайт и БД.
ssh_user - имя пользователя для подключения по SSH. В большинстве случаев для выполнения всех операций нужен root, хотя можно попробовать настроить для другого непривилегированного пользователя.
ssh_password !! - пароль для вышеуказанного пользователя.
mysql_user * - имя пользователя для подключения к БД сайта на MySQL сервере.
mysql_password - пароль для вышеуказанного MySQL пользователя. Должен быть установлен обязательно!
mysql_db_name - название базы данных сайта, для которой будем делать полный дамп.
dirs_to_backup ** - пишем через пробел список полных путей, директорий и файлов, которые нужно архивировать.
Примечания:
!! Если оставить значение пустым то пароль будет запрошен потом в интерактивном режиме (рекомендую не хранить пароль).
* Предполагается что скрипты и база данных MySQL размещены на одном и том же сервере. То есть адрес MySQL-сервера - 127.0.0.1 (localhost).
** По умолчанию архиваторы не пакуют файлы .htaccess, поэтому нужно дополнительно указывать к ним полный путь!
** Указывать обязательно полные, а не относительные пути к папкам или файлам.
Создавать конфигурационных файлов можно сколько угодно, при запуске скрипта название каждого будет выведено с присвоенным номером, для начала работы нужно ввести номер(число) конфигурации и все (если не указали пароль - то введете еще пароль).
Подготовка к работе и использование скрипта
Все очень просто!
Первым делом нужно определиться где мы будем хранить скрипт со всеми его конфигурациями. Рекомендую не хранить подобные программы и данные на локальной машине в открытом виде, потому что это не безопасно, тем более если в конфигурациях будут сохранены пароли для root доступа к серверам. Комплекс можно хранить где-нибудь на зашифрованном носителе или там, куда не получат доступ вирусы или посторонние люди. В плане безопасности - выбор за вами, идем дальше.
Пусть весь комплекс будет располагаться по пути:
- D:\Backup\ - сюда будут загружаться архивы с резервными копиями.
- D:\Backup\script\ - здесь будет лежать наш скрипт и программа WinSCP.
1) Скачиваем последнюю настроенную и портабельную версию программы WinSCP с сайта PortableApps - WinSCP Portable. Устанавливаем программу в папку D:\Backup\script\ - там создастся папка WinSCPPortable, а в ней будет файл WinSCPPortable.exe.
2) Скачиваем архив со скриптом и шаблонами вот тут - backup_sites_v1.2 и распаковываем его в папку D:\Backup\script\.
3) Открываем файл backup_sites_v1.2.bat для редактирования и правим в секции "WinSCP configuration" пути:
- "D:\Backup\script\WinSCPPortable\WinSCPPortable.exe" - путь к программе WinSCP Portable;
- "D:\Backup\script\WinSCPPortable\Data\settings\winscp.log" - путь по которому создается лог-файл программы WinSCP Portable.
Смотрим чтобы пути, прописанные в скрипте соответствовали тем, по которым находится программа WinSCP, иначе она просто не запустится.
4) Создаем файлы-шаблоны настроек для резервного копирования сайтов. В архиве их несколько - переименуйте их соответственно названиям доменов ваших сайтов, а лишние удалить.
Создать новый шаблон сайта для скрипта можно ткими способами:
- Просто копируем INI-файл, переименовав его под нужным названием, а потом правим в нем настройки;
- Генерируем шаблон скриптом. Запускаем скрипт, жмем 2 и вводим имя домена или название сайта (только латиница и символ _). Откроется блокнот с ново созданным файлом, после внесенных изменений сохраните его и закройте.
Какой вариант удобнее - выбирайте сами.
5) Все готово, можно запускать скрипт и пробовать делать резервную копию одного из своих сайтов.
После подтверждения выбора сайта для бекапа может быть запрошен пароль пользователя SSH, в случае если он не был указан в конфигурационном файле. Сразу же запустится окно с логом работы программы WinSCP, в котором будет отображен ход действий на сервере, а также прогресс скачивания готового архива с сервера.
Когда WinSCP завершит скачивание архива то окно закроется, чтобы завершить работу скрипта достаточно нажать в окне любую клавишу.
О безопасности данных
Скрипт в процессе своей работы генерирует временный файл ".tmp" с набором команд для WinSCP. В этом файле присутствует логин и пароль для доступа к серверу по SSH.
В INI-шаблонах с настройками сайтов также содержится важная информация - это параметры доступа к БД.
Настоятельно НЕ рекомендую хранить данный скрипт и файлы настроек на дисках, к которым можно получить прямой доступ в любой момент после запуска и несложных манипуляций с компьютером. Для хранения можно сделать шифрованный диск или же купить отдельный носитель.
Данный скрипт - это лишь инструмент, который экономит время на выполнении рутинных и похожих действий. Выделите время и побеспокойтесь о сохранности и безопасности своих данных!
Вся ответственность за использование данного скрипта возлагается на вас, будьте предельно внимательны!
Заключение
Скрипт можно откорректировать и доработать чтобы он стал более функционален и проделывал те действия, которые вам нужны на ваших сайтах.
Также данный способ автоматизации WinSCP можно использовать для построения других скриптов, которые будут выполнять разные задачи на вашем VPS или Dedicated сервере через консоль.