Никто не застрахован от ошибок. Теперь представьте, что может случиться с вашими данными и скриптами сайта, если на сервере провайдера откажет винчестер? и не будет копии данных, а вы провели довольно значительные изменения программного обеспечения? Вы храните данные у провайдера и полностью ему доверяете? Тогда представьте себе, что вас с завтрашнего дня будет обслуживать незнакомый администратор.
В таких случаях не помешает иметь под рукой копию данных и скриптов вашего сайта, если вы хотите иметь возможность оперативно возобновить работоспособность сайта из резервной копии в случае возникновения проблем с хостинг-провайдером*.
Какой способ архивации веб-сайта выбрать? В зависимости от возможностей и ваших прав доступа к серверу, на котором расположен веб-сайт, подлежащий архивации, существуют следующие способы сохранения контента и программ вашего сайта:
- применение CMS*, имеющих встроенные функции архивации и восстановления контента;
- архивация средствами сервера хостинг-провайдера*;
- архивация данных, запускаемая на сервере провайдера с удаленного компьютера.
Применение встроенных средств CMS В ведущие CMS — например, в CMS Mambo Studio — встроены механизмы архивации контента. Как правило, использование таких функций специализированных систем управления контентом носит интерактивный характер.
Архивация, запускаемая с сервера Подавляющее большинство хостинг-провайдеров представляют доступ по протоколу SSH* к веб-каталогу вашего сайта. Если вы имеете необходимые права доступа к планировщику сервера и необходимым для архивации программам, задача значительно упрощается. В случае с UNIX-сервером достаточно написать шелл-скрипт* для архивации данных сайта. Его можно сделать доступным планировщику cron* с помощью соответствующих команд. Можно также поместить его в специальную директорию либо же указать ссылку на него в конфигурационном файле планировщика.
Архивация с помощью tar Оптимальным способом для архивации данных на UNIX является использование программы tar с соответствующими ключами. Эта утилита существует во всех UNIX-совместимых операционных системах.
Скрипты для архивации контента Если скрипты вашего веб-сайта находятся в каталоге /home/www, то команда архивации будет выглядеть следующим образом:
# tar -czf /home/arh.tar.gz /home/www/*
Также желательно называть файл архива с учетом текущей даты, чтобы впоследствии было легче ориентироваться. Для этого можно использовать такой шелл-скрипт:
#!/bin/sh
date_time=`date +"%Y-%m-%d_%H-%M-%S"`
/bin/tar -czf /home/arh/arh_$date_time.tar.gz /home/www/*
Если разместить такой шелл-скрипт (назовем его arh_www) на сервере в каталоге /etc/cron.daily, задать ему права доступа 750 (команда chmod 750 /etc/cron.daily/arh_www) и создать каталог /home/arh, то архив скриптов вашего сайта будет создаваться раз в день.
Архивируем как скрипты, так и базу данных В случае если часть контента вашего веб-сайта находится в базе данных MySQL, достаточно немного усложнить скрипт для архивации также и самой базы:
#!/bin/sh
to_cat=/home/arh/
web_cat=/home/www/*
date_time=`date +"%Y-%m-%d_%H-%M-%S"`
/usr/bin/mysqldump -h mysql_host -u mysql_user -pmysql_pass -d base >$to_cat/mysql_$date_time.sql
/bin/tar -czf ${to_cat}arh_$date_time.tar.gz $web_cat $to_cat/mysql_$date_time.sql
rm $to_cat/mysql_$date.sql
В вызове /usr/bin/mysqldump следует указать ваши реквизиты подключения к базе данных, хост (если база расположена локально — в качестве имени хоста следует указать localhost), имя пользователя, пароль и наименование вашей базы.
Управление cron'ом для пользователя Операционные системы, совместимые с UNIX, предоставляют возможность выполнять периодические задания также и непривилегированному пользователю системы. Для указания времени запуска и программы, которая будет запускаться, используется команда crontab. Она имеет следующие режимы работы:
- редактирование конфигурации: crontab -e;
- вывод всех заданий: crontab -l;
- удаление всех заданий: crontab -l.
Использование утилиты crontab
После запуска из командной строки crontab -e вызывается текущий редактор (скорее всего, это будет текстовый редактор vim*). Для того чтобы задать периодический запуск, необходимо указать в полях текстового файла числа или символ "*" — если планируется периодическое выполнение задачи. К примеру, если первыми двумя полями файла задать числа 10 15, то задача будет выполняться в 15-10 по системному времени на сервере. Для того чтобы войти в режим редактирования vim, следует нажать insert. После внесения изменений переход в режим команд осуществляется через нажатие escape. Для того чтобы записать внесенные изменения в файл, нужно дать команду :wq!, что означает запись без дополнительных условий. В случае применения утилиты crontab необходимо запускать команды архивации с правами пользователя, который имеет права на чтение скриптов веб-сайта. Архивацию данных можно выполнять, не имея прав на доступ к файлам веб-сайта, поскольку утилита mysqldump имеет свой собственный механизм авторизации доступа к базе данных.
Как восстанавливать сайт из архива?
Для восстановления скриптов сайта из архива вам достаточно распаковать архив в каталог, в котором расположен корень веб-сайта (в нашем примере это /home/www). Удобнее всего это выполнить с помощью Midnight Commander'а*. Восстановление базы данных выполняется с помощью утилиты mysql, которой передается файл дампа базы данных* mysql_xxx.sql, который заносится в общий архив:
#mysql -h mysql_host -u mysql_user -pmysql_pass -d base
Передача данных на удаленный терминал Созданный архив необходимо передать на удаленный компьютер. Для клиентской станции на Microsoft Windows идеально подходит утилита pscp.exe из состава проекта Putty*. Вы можете указать планировщику вашей операционной системы выполнять операцию копирования автоматически. В UNIX-совместимых операционных системах для таких целей можно применять команду scp (secure copy).
Оптимизация процесса архивации Если исходные материалы сайта подготавливаются клиентом, и их объем довольно существенен, можно отказаться от архивирования всех таблиц базы данных сайта. Утилита mysqldump позволяет выборочно указывать список таблиц базы данных, которые необходимо архивировать. К примеру, команда:
mysqldump -u root -p123 mysql host > /home/arh/mysql_host.txt
выводит таблицу host из базы данных под названием mysql в текстовый файл.
Что делать, если прав доступа не хватает? Даже если у вас нет административных прав на системе хостинг-провайдера, вполне возможно управлять всей схемой архивации данных с удаленного компьютера. Достаточно запускать процесс архивации с помощью скрипта, запускаемого на удаленном компьютере, или применив программу wget* следующим образом:
wget.exe /redir.php?url=site.com.ru%2Frun_arh.php.%3Cbr%3E
Также можно применить следующий PHP-скрипт:
<?
@file("/redir.php?url=site.com.ru%2Frun_arh.php");
?>
Безвыходных ситуаций не бывает В скрипте run_arh.php задается запуск скрипта архивации сайта. Этот вариант возможен, если у вашего провайдера есть интерпретатор скриптов PHP*, и он работает не в защищенном режиме. Тогда возможно воспользоваться одной из команд для запуска внешних команд из PHP. В случае если PHP работает в защищенном режиме, вам следует воспользоваться утилитой, предназначенной для запуска команд на удаленном сервере через SSH-доступ. В этом случае следует учитывать, что время работы скриптов PHP ограничено 30 секундами (по умолчанию), и разрабатывать такой механизм, который бы выполнял архивацию сайта по частям.
Использование специализированных классов PHP Существуют несколько функций, встроенных в PHP, которые позволяют выполнить архивацию на сервере. Одна из них — pack. Эффективное использование этой функции можно посмотреть на примере PHP-класса zipfile
Использование plink.exe Если клиент, запускающий архивацию, расположен на компьютере с установленной операционной системой Windows, вы также можете воспользоваться plink.exe из состава проекта Putty для запуска скриптов на удаленном сервере. Вот пример запуска этой утилиты:
Не забывайте про права доступа и безопасность Конечно же, необходимым условием является присутствие скрипта архивации контента сайта в веб-директории и его доступность через Веб. При этом обостряются вопросы обеспечения безопасности веб-сайта. Но особой сложности здесь нет. Достаточно дать разрешение на запуск скриптов только для определенных IP-адресов или же просто указать длинное имя скрипта.
Профилактика — лучшее средство Процесс сохранения данных и скриптов сайта и архивация сайта носят скорее профилактический характер. Но в случае возникновения сложностей только умело построенная копия программного обеспечения позволяет быстро восстановить работоспособность сайта. Часто кажется, что при разработке веб-сайта нет времени на такие рутинные операции. Но если вы хотите быть полностью уверены в том, что время и средства, вложенные в разработку и поддержание вашего сайта, не пропадут, наличие архивации — необходимое условие вашего спокойствия.
>plink.exe -ssh test@192.168.2.1 /home/www/arh_site
Ссылки по теме
Статья получена: hostinfo.ru