Мне частенько задают вопросы, о том, как быстро перенести сайт с сервера на сервер. Ниже я опишу процесс переноса рабочего сайта с сервера на сервер "для чайников".
Исходные данные:
Панель на новом сервере - 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, имя базы, которую необходимо сдампить, сжатие для экономии трафика, и жмём применить.
Все нужные действия для переноса со старого сервера завершены.
Создание нового сайта
- Создаём новый аккаунт на newserver, назовём его чтобы не путаться newsite. Локально новый сайт будет расположен /home/newsite/public_html/ и раз уж мы находимся в панели управления, заводим нового пользователя базы данных (для примера newsite_userdb с паролем passwd123) и базу данных для переносимого сайта (newsite_dbsite )
- Логинимся по SSH на newserver. Для работы по SSH на Windows рекомендую клиент PuTTY.
Логиниться проще сразу от имени заведённого нового пользователя (newsite). Крайне не рекомендую выполнять какие-либо действия от пользователя root, это пользователь с максимально возможными разрешениями на сервере, при неопытном использовании можно очень быстро запортить что-либо, и вы окажитесь в патовой ситуации.
Но допустим, рассмотрим вариант что вы залогинились из под root. Это удобно, когда нужно перенести большое количество сайтов.
- Переходим в директорию нашего нового сайта:
cd /home/newsite/public_html/
- Скачиваем необходимые файлы со старого сервера. Для этих целей рекомендую старого доброго помошника - качалку под *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
- После того, как 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 сервера)
- Здесь на данном этапе рекомендую, дабы не забыть, сразу отредактировать конфиг сайта на новом сервере. Для этого воспользуемся популярным в 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 оповестит.
- Итак, файлы на новом сервере подготовлены. НО не совсем, напомню что 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.
- А теперь, поменяем пользователя и группу с root на newsite у всех файлов, находящихся в директории /home/newsite/public_html/
chown -R newsite:newsite *
С переносом файлов окончено, осталось только залить дамп базы данных в новую базу, ну и поменять NS записи в DNS серверах для домена, чтобы домен перенаправлялся на ip адрес нового сервера. Остановлюсь на заливке дампа, ибо настройка NS достойна отдельного рассмотрения.
- Итак, допустим 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');
На этом перенос сайта можно считать завершённым.