По разным причинам вам может понадобиться перенести свой сайт на другой хостинг или VPS сервер. Это может быть вызвано тем, что ваш проект развивается и для него уже недостаточно ресурсов сервера, а может просто вас не устраивает уровень обслуживания. За все время развития Losst я менял хостинг провайдера много раз, то, что описано в истории сайта далеко не все. Возможно, позже у меня дойдут руки дописать, но не сейчас.
В этой статье я расскажу как выполняется перенос сайта wordpress, как это лучше сделать, что вам необходимо знать для того чтобы переезд прошел гладко и незаметно для пользователей. Ведь это главное.
Содержание статьи
Что мы будем использовать?
Несмотря на то что WordPress - это популярный движок и для него существует не только встроенная возможность переноса базы данных на другой сервер, но и огромное количество плагинов для этого, я не рекомендую их использовать. На своем опыте я убедился, что при использовании стандартного экспорта-импорта почему-то теряется множество картинок и потом нужно их восстанавливать. На losst еще до сих пор остались статьи с битыми картинками с тех времен. Мы будем делать все вручную с помощью таких инструментов:
- ssh;
- mysql;
- rsync;
Этого будет вполне достаточно, если вы менее опытный пользователь, то сюда можно добавить еще два инструмента:
- phpmyadmin;
- клиент ftp;
Упор я делаю на VPS, рассчитывая на то, что у вас есть доступ к серверу по SSH. Но эта инструкция может быть использована чтобы выполнить перенос сайта на Wordpres на другой хостинг. Большинство современных хостингов дают доступ к ssh консоли хотя бы в html интерфейсе.
Подготовка к переносу WordPress
Первое на что нужно обратить внимание, и желательно, при регистрации хостинга, это DNS. Нам нужно чтобы пользователи ничего не заметили. А поэтому сервера имен не должны меняться. Лучше всего, если ваши сервера имен будут у регистратора доменных имен и он же будет управлять доменной зоной.
Если же вы используете сервера имен вашего хостинга, то при передаче управления на другой хостинг сайт будет недоступен несколько часов. Поэтому сервера имен передайте регистратору, даже если сейчас они у вашего хостинга, а пользователей направляйте на ip сервера с помощью A записи.
Перенос сайта WordPress
Сначала нам нужно перенести все файлы сайта на другой сервер. Конечно, вы можете использовать для этого FTP клиент, сначала скачать все файлы по одному с одного сервера, а потом загрузить по одному на другой. Но это сработает, только если у вас немного файлов. С сайтом в несколько гигабайт это может занять дни. Поэтому будем использовать более простой способ через SSH. Подключитесь к вашему серверу по SSH:
ssh root@address1
Обычно для переноса сайтов рекомендуется использовать tar, но это тоже не вариант, если на вашем хостинге недостаточно места для создания архива, поэтому оптимальный ответ на вопрос как скопировать сайт wordpress - использовать rsync:
rsync -avz -e ssh /папка/с/файлами/сайта root@address2:/папка/для/файлов/сайта/
Естественно, что папка для файлов сайта должна уже существовать. Дальше, на этом сервере нам нужно создать резервную копию базы данных, для наших целей этой команды будет вполне достаточно:
mysqldump -u root -p имя_базы > dump.sql
Если у вас большая база данных, то выполнение может занять несколько минут. Осталось передать базу на другой сервер, кладем ее в домашний каталог:
rsync -avz -e ssh dump.sql root@address2:~/
Если ваш сайт использует https, то нужно передать на новый сервер сертификаты, пока вы не подключите домен и не создадите новые:
rsync -avz -e ssh /путь/к/сертификату/site.pem root@address2:~/
rsync -avz -e ssh /путь/к/сертификату/site.key root@address2:~/
Дальше нам останется выполнить еще несколько настроек на этом сервере, но сначала нужно развернуть все на другом. Я предполагаю, что сервер уже настроен, веб-сервер и система управления базами данных установлены и работают. Подключаемся к нему по SSH:
ssh root@address2
Сначала файлы. Утилита rsync сохранит владельца файла из предыдущего сервера или сделает им root. А нам нужно чтобы файлы сайта принадлежали тому пользователю, от имени которого запущен Nginx и php-fpm или Apache. Посмотрите группу и пользователя, от которых они запущены:
Затем поменяйте текущего пользователя и группу всех файлов сайта на нужные с помощью утилиты chown:
chown -R losst:losst /путь/к/файлам/сайта/
Флаг -R включает рекурсивную обработку всех файлов, первый параметр - пользователь, второй, через двоеточие - группа. Дальше мы готовы перейти к базе данных. Сначала нужно создать нашу базу и создать пользователя, с помощью которого WordPress будет к ней подключаться. Для этого войдите в интерфейс mysql:
mysql
С помощью этих команд мы создаем новую базу, затем пользователя, даем ему права делать с ней все что он захочет, если он подключен с localhost или сервера с ip address1, а последней командой обновляем таблицу привилегий. Нам осталось только загрузить информацию в базу:
mysql -u root имя_базы_данных < dump.sql
В принципе, для создания базы, пользователя и ее разворачивания можно было использовать Phpmyadmin, но в консоли все проще. Дальше нам осталось отредактировать файл wp-config и указать новые параметры доступа к базе:
vi /путь/к/файлам/сайта/wp-config.php
Если хотите использовать HTTPS, то укажите путь к переданным сертификатам в конфигурации Nginx или Apache. Вы уже знаете как перенести wordpress, осталось только протестировать. Теперь возвращаемся на ваш локальный компьютер и добавляем в файл /etc/hosts псевдоним вашего домена, который будет указывать на новый адрес. В Windows тоже есть этот файл, но только находится он по другому адресу:
vi /etc/hosts
Дальше открываем сайт в браузере, убеждаемся, что это именно новая версия и кэш DNS обновился, затем проверяем как все работает, если все хорошо, то можно перенаправлять A запись регистратора на этот, новый ip адрес:
Доменная зона обновится не мгновенно, на это потребуется довольно много времени, до нескольких дней. Все это время некоторые пользователи будут обращаться к старому серверу чтобы он выдавал новые страницы нужно подключить сюда базу данных. Помните, мы разрешили подключаться к нашей базе от этого сервера, теперь просто укажите на старом сервере address1 в wp-config.php данные доступа и адрес сервера address2 вместо localhost. Готово. Теперь ваш сайт перенесен. Осталось дождаться полного обновления доменной зоны и можно выключать первый сервер. Не забудьте обновить SSL сертификаты, если их использовали.
Выводы
В этой статье мы рассмотрели как выполняется перенос сайта WordPress. Как видите, это довольно трудоемкий процесс, но если подойти к нему грамотно, то можно сделать все достаточно просто и без лишних проблем для пользователей и для себя. Надеюсь, эта информация была полезной для вас.
Перенос на другой хостинг это фигня, а вот смена домена когда у тебя 100500 плагинов работающих извне.. Вот это приключение..
Да, согласен с предыдущим комментом, яб добавил как менять в бд все старые ссылки на новые при переходе на другое имя (смене домена третьего уровня на второй или если wordpress был не в корневой папке). Да и вообще у некоторых плагинов жесткая привязка к ОС и если wp был на FreeBSD то после переноса на linux может не заработать тут еще приходится менять пути не только в плагинах но и в теме которую юзает wp.
Korror? Это ты?
Согласен с 2мя комментариями выше, в дополнение еще скажу, что при смене домена, надо учитывать сериализованные данные в бд. Есть спец утилиты, для внятной смены домена. (поиск и замена в БД домена - ни в коем случае так делать нельзя, не всегда это работоспособно). На край можно использовать бесплатный плагин типа Duplicator
А настроить apache? Куда он будет глядеть?