Ручной перенос сайтов с сервера на сервер на примере переноса сайта на Drupal

Мне частенько задают вопросы, о том, как быстро перенести сайт с сервера на сервер. Ниже я опишу процесс переноса рабочего сайта с сервера на сервер "для чайников". Исходные данные: Панель на новом сервере - Direct Admin. server1 - старый сервер, с которого переносится сайт. newserver - новый сервер. site.ru - сайт, который переносим. Локально на старом сервере находится /home/site1/public_html/

Подготовка сайта к переносу

Во избежание проблем, переводим сайт в оффлайн режим. Нам необходимо создать дамп базы данных для переноса. Я рекомендую использовать для этих целей Sypex Dumper - отличная разработка от братских украинских программистов. Позволяет делать бекапы баз на лету, работает на порядок быстрее, чем от же phpmyadmin, а главное позволяет избежать проблем с кодировками исходных данных при импорте. Кладём Supex Dumper на старом сервере, в ту же дирректорию, что и сайт, не забываем выставить права 777 на папку с думпером, иначе он не сможет работать. НЕ забудьте потом, после переноса сайта убрать 777 с этой папки, иначе злоумышленники могут воспользоваться этим. Итак дампер у нас доступен по адресу http://site.ru/dumper/dumper.php логинимся к нему, он попросит ввести логин и пароль для пользователя базы данных, если забыли их, можно посмотреть в settings.php от данного сайта (если на сборке всего 1 сайт, в папке /home/site/public_html/sites/default/settings.php иначе в /home/site/public_html/sites/site.ru/settings.php. Выбираем backup, имя базы, которую необходимо сдампить, сжатие для экономии трафика, и жмём применить. Все нужные действия для переноса со старого сервера завершены.

Создание нового сайта

  1. Создаём новый аккаунт на newserver, назовём его чтобы не путаться newsite. Локально новый сайт будет расположен /home/newsite/public_html/ и раз уж мы находимся в панели управления, заводим нового пользователя базы данных (для примера newsite_userdb с паролем passwd123) и базу данных для переносимого сайта (newsite_dbsite )
  2. Логинимся по SSH на newserver. Для работы по SSH на Windows рекомендую клиент PuTTY. Логиниться проще сразу от имени заведённого нового пользователя (newsite). Крайне не рекомендую выполнять какие-либо действия от пользователя root, это пользователь с максимально возможными разрешениями на сервере, при неопытном использовании можно очень быстро запортить что-либо, и вы окажитесь в патовой ситуации. Но допустим, рассмотрим вариант что вы залогинились из под root. Это удобно, когда нужно перенести большое количество сайтов.
  3. Переходим в директорию нашего нового сайта: cd /home/newsite/public_html/
  4. Скачиваем необходимые файлы со старого сервера. Для этих целей рекомендую старого доброго помошника - качалку под *nix WGET. Разработка новых версий затормозилась, она не умеет закачивать в несколько потоков и т.д. За то, за многие годы использования зарекомендовала себя как стабильный и надёжный клиент. Обладает рядом уникальных функций, такими как например рекурсивное скачиваение, которым мы и воспользуемся: Полный список ключей, как и в любой другой программой под Unix вы можете с помощью команды wget -h Для скачивания сайта со старого сервера, нам потребуются логин и пароль от ftp. Итак: wget -bcxr -l1000 ftp://user:password@site.ru/public_html/* (если вы УЖЕ прикрепили домен site.ru к новому серверу, то вышеуказанный способ работать не будет. Во избежание проблем, рекомендую соединяться к старому серверу по ip (12.23.45.59 - ip старого сервера ) wget -bcxr -l100 ftp://user:password@12.23.45.59/public_html/*
    Описание ключей на русском языке попозже выложу, пока в кратце опишу вышеуказанный набор:
    • -b работа в бекграунде (в фоновом режиме)
    • -с докачивать, в случае разрыва соединения, а также докачивать файл, если найден недокаченный вариант.
    • -r рекурсия, в 2х словах, wget пробегается по ссылкам, и всем папкам, которые сможет найти, и скачает всё то, что укажите. -l100 - это количество уровней, на которых wget будет сканировать диреектории на предмет нахождения файлов. Также можно использовать связку ключей -np - она позволит сканировать только вниз по дереву каталогов, хотя ключ -r на практике запрещает следование вверх.

    Посмотреть логи работы wget'а можно командой tail -f wget-log Если wget-log уже есть, будет создан wget-log.1 и т.д.
    СОВЕТ: при работе по SSH, в интерпретаторе bash (по умолчанию на большинстве современных дистрибутивов) существуют крайне удобная функция автозаполнения, активируется она клавишей Tab. Например, при вышеуказанной операции можно набрать: tail -f пробел. После этого нажимаем : При одном возможном результате, шел сразу дополнит команду до: tail -f wget-log Если например wget уже запускался до этого в этой директории в фоновом режиме, в директории будет 2 файла wget.log и wget-log.1 При нажатии на клавишу Tab, шел дополнит максимально до шаблону команду до: tail -f wget-log И вам останется только дописать ".1". К слову двукратное нажатие выдаст полный список возможных вариантов. Поверьте, эта уникальная функция о-очень сильно экономит время. Чаще всего данную функцию используют при браузинге по файлам. Поэкспериментируйте данную функцию совместно с командой cd
  5. После того, как wget закончит свою работу в логе последние строчки будут что-то типа FINISHED --19:32:07-- Downloaded: 3674 files, 111M in 2m 57s (645 KB/s) Файлы по умолчанию скачиваются в директорию по имени сервера (или его ip), в нашем случае в папку site.ru/public_html (или 2.23.45.59/public_html в зависимости от того, как вы укажите адрес FTP сервера)
  6. Здесь на данном этапе рекомендую, дабы не забыть, сразу отредактировать конфиг сайта на новом сервере. Для этого воспользуемся популярным в Unix текстовым редактором VI vi /site.ru/public_html/sites/site.ru/settings.php у нас откроется конфиг. В VI с непривычки не удобно работать, но поверьте зато он работает очень быстро. Описание работы с ним, можете найти в той же википедии, я в 2х словах опишу работу с ним. Главное, что нужно понять - у VI есть два основных режима работы - режим ввода команд и режим редактирования.. Изначально он работает в режиме ввода. Для переключения между режимами, нужно просто нажать ESC, перед вводом команды нужно нажать ":". Часто используемые команды: :wq - записать изменения в файле и выйти :q - просто выйти :!q - выйти, без сохранения. Для переключения в режим редактирования, нужно нажать i или a. При удачном переходе, в левом нижнем углу будет писаться - - - INSERT - - - Так вот, переводим VI в режим insert нажатием клавиши i, находим в конфиге $db_url = 'mysql://oldsite_user:password@localhost/oldsite_db'; $db_prefix = ''; и меняем на новые: $db_url = 'mysql://newsite_userdb:passwd123@localhost/newsite_dbsite'; $db_prefix = ''; жмём ESC для перехода в командный режим, после этого набираем команду :qw VI сохранит файл и завершится. При возникновении каких либо проблем, VI оповестит.
  7. Итак, файлы на новом сервере подготовлены. НО не совсем, напомню что wget их закачал в дирректорию /home/newsite/public_html/site.ru/public_html Для того, чтобы у нас был полностью работоспособный сайт, необходимо переместить все файлы в /home/newsite/public_html/, а также (что очень важно) поменять "хозяина" файлов на пользователя newsite (этот шаг можно пропустить, если вы были залогинены на сервер УЖЕ под именем newsite). Находясь в любой дирректории, выполним простую команду mv /home/newsite/public_html/site.ru/public_html/* /home/newsite/public_html/ Дословно копировать что и куда, * означает буквально всё, что находится под ней. MV возможно ругнётся, на уже существующую директорию cgi-bin, не пугайтесь всё ok жмите enter.
  8. А теперь, поменяем пользователя и группу с root на newsite у всех файлов, находящихся в директории /home/newsite/public_html/ chown -R newsite:newsite *
  9. С переносом файлов окончено, осталось только залить дамп базы данных в новую базу, ну и поменять NS записи в DNS серверах для домена, чтобы домен перенаправлялся на ip адрес нового сервера. Остановлюсь на заливке дампа, ибо настройка NS достойна отдельного рассмотрения.
  10. Итак, допустим NS записи вы ещё не меняли и домен до сих пор пересылает на старый сервер. Панель управления на сервере, для примера, через которую заводили нового юзера - DirectAdmin. Тогда служебный адрес сайта, на новом сервере у нас будет http://2.23.45.59/~newsite/ Соответственно, Sypex Dumper будет находиться по адресу http://2.23.45.59/~newsite/dumper/dumper.php ( ну или в другой директории, в зависимости от того, как вы её назвали). Итак, логинимся под пользователем newsite_userdb с паролем passwd123. Выбираем в интерфейсе restore - Восстановление базы данных, далее базу newsite_dbsite и в всплывающем списке файл с сегодняшней датой - дампом, который мы собственноручно сделали. После получения сообщения, о благополучном исходе - радуемся, и проверяем работоспособность сайта. Возможные проблемы,- это несоответствие прав доступа на папки. Проверьте какие права стоят на папке с дампером, а также на папке backup внутри дамперовской. Также периодически возникают проблемы, из за того, что не хватает файла .htaccess, если файл не перенёсся - просто скопируйте его в ручную. cd /home/newsite/public_html/ wget -bcxr -l100 ftp://user:password@12.23.45.59/public_html/.htaccess Права доступа можно посмотреть командой ls -l, а выставить нужные права всё той же командой chmod: chmod 777 newsite:newsite ./dumper/* к примеру вышеуказанная команда, изменит на 777 всем файлам внутри директории dumper
Если в результате переноса вы меняете домен сайта и возникли какие-то проблемы с "файловой" частью (например не работает ImageCache созданный для CCK Imagefield), проверьте что у вас указано настройках файловой системы (Путь файловой системы). Если он поменялся, выполните следующий SQL снипет (нагляднее всего это делать в phpmyadmin) и всё заработает корректно: UPDATE files SET filepath = REPLACE(поле, 'oldsite.ru', 'newsite.ru'); На этом перенос сайта можно считать завершённым.