Как перенести сайт на WordPress на новый сервер без простоя

Пошаговый план с командами WP-CLI и rsync: копия файлов и базы, проверка нового сервера через hosts, финальная синхронизация и переключение DNS без простоя.

Сайт переезжает по световому мосту со старого сервера на новый

Переезд сайта обычно откладывают до последнего: старый сервер тормозит, тариф дорожает, провайдер закрывает дата-центр. А потом переносят в спешке, с часом простоя и потерянными заказами. Перенос WordPress можно сделать так, что посетители его не заметят.

Коротко

Что получится

  • Переезд без простоя для посетителей
  • Сайт, проверенный до переключения домена
  • Старый сервер как точка отката

Что понадобится

  • Резервная копия вне обоих серверов
  • Новый сервер с PHP и базой не старее текущих
  • WP-CLI, rsync и доступ к DNS домена
  1. Шаг 1Подготовка
  2. Шаг 2Копия базы
  3. Шаг 3Копия файлов
  4. Шаг 4Импорт
  5. Шаг 5Проверка через hosts
  6. Шаг 6Сертификат
  7. Шаг 7Финальная синхронизация
  8. Шаг 8Переключение DNSминуты
  9. Шаг 9Старый сервер в запасе1-2 недели
Содержание
  1. Как устроен перенос
  2. Шаг 1. Подготовка
  3. Шаг 2. Копия базы данных
  4. Шаг 3. Копия файлов
  5. Шаг 4. Импорт и настройка
  6. Шаг 5. Проверка через hosts
  7. Шаг 6. Сертификат
  8. Шаг 7. Финальная синхронизация
  9. Шаг 8. Переключение домена
  10. Шаг 9. Старый сервер в запасе
  11. Частые ошибки
  12. Как это в Kesyio
  13. Вопросы и ответы
  14. Итог

Как устроен перенос без простоя

Сайт на WordPress состоит из двух частей, и перенести нужно обе в согласованном состоянии.

Файлы

Ядро, темы, плагины и загруженные картинки в wp-content/uploads.

База данных

Записи, страницы, настройки и пользователи.

Секрет в порядке действий: новый сервер полностью проверяется до того, как на него переключается домен.

  1. Копируем файлы и базу, пока старый сервер работает.
  2. Проверяем сайт, не трогая DNS.
  3. Синхронизируем изменения за время проверки.
  4. Переключаем домен.
  5. Держим старый сервер неделю-две как страховку.
Перенос без простоя: старый сервер принимает посетителей, пока новый получает копию и проходит проверку; затем финальная синхронизация, переключение DNS и старый сервер в запасе Старый сервер Принимает посетителей пока идут копирование и проверка Режим обслуживания В запасе 1-2 недели Новый сервер Копия файлов и базы Проверка через hosts Изменения второй проход Принимает посетителей rsync и выгрузка только изменения Переключение DNS время
Старый сервер работает, пока новый получает копию и проходит проверку. Режим обслуживания нужен только на финальную синхронизацию.
Откуда берётся простой

Из смешанных шагов: DNS переключают до проверки или копируют базу через час после файлов.

1Подготовка

Сделайте резервную копию файлов и базы на старом сервере и сохраните её вне обоих серверов. Как настроить копии и проверить восстановление, мы разобрали в отдельной статье.

Понизьте TTL DNS-записей до 300 секунд за сутки до переезда, если DNS домена обслуживает регистратор: тогда посетители уйдут на новый сервер за минуты, а не за часы.

С включённым прокси Cloudflare этот шаг не нужен: смена IP в записи применяется почти мгновенно.

Подготовьте новый сервер с той же или более новой версией PHP и базы данных. Из инструкции как развернуть WordPress на своём сервере нужны шаги с подготовкой сервера, веб-сервером и пустой базой данных, сам WordPress ставить заново не нужно.

2Копируем базу данных

Подсвеченные значения замените на свои.

На старом сервере выгрузите базу через WP-CLI:

# на старом сервере
cd /var/www/example.com
wp db export /tmp/site.sql --allow-root

На новом сервере создайте базу и пользователя, как при обычной установке, и заберите выгрузку:

# на новом сервере
rsync -avz root@СТАРЫЙ_IP:/tmp/site.sql /tmp/

Импорт выполним в шаге 4, после копирования файлов: WP-CLI должен видеть wp-config.php.

3Копируем файлы

Копируйте файлы через rsync: он переносит права, продолжает прерванную передачу и при повторном запуске докачивает только изменения.

# на новом сервере
rsync -avz --progress root@СТАРЫЙ_IP:/var/www/example.com/ /var/www/example.com/
chown -R www-data:www-data /var/www/example.com
Косая черта в конце пути важна

Без неё rsync создаст вложенный каталог example.com/example.com.

4Импорт и настройка

Импортируйте базу и укажите новые данные доступа к ней в wp-config.php:

cd /var/www/example.com
sudo -u www-data wp config set DB_NAME wordpress
sudo -u www-data wp config set DB_USER wpuser
sudo -u www-data wp config set DB_PASSWORD 'ПАРОЛЬ_НОВОЙ_БАЗЫ'
sudo -u www-data wp db import /tmp/site.sql

Домен прежний

Адреса в базе менять не нужно.

Домен новый

Замените адреса командой wp search-replace: она корректно обрабатывает сериализованные данные.

sudo -u www-data wp search-replace 'https://старый-домен.ru' 'https://example.com' --skip-columns=guid
Не правьте SQL-файл вручную

Ручная замена ломает настройки виджетов и плагинов: в сериализованных данных хранится длина строки, и после замены она не совпадает.

5Проверяем сайт до переключения DNS

Главный шаг для переезда без простоя. Откройте на своём компьютере файл hosts и направьте домен на новый сервер только для себя.

СистемаФайл hosts
WindowsC:\Windows\System32\drivers\etc\hosts
macOS и Linux/etc/hosts

Добавьте строку:

IP_НОВОГО_СЕРВЕРА example.com www.example.com

Теперь ваш браузер открывает сайт с нового сервера, а остальные посетители продолжают видеть старый.

Проверка через hosts: ваш браузер идёт напрямую на новый сервер, а остальные посетители через DNS попадают на старый Ваш браузер строка в hosts Новый сервер видите только вы напрямую, в обход DNS Посетители все остальные DNS домена A-запись: старый IP Старый сервер видят посетители example.com старый IP
Строка в hosts действует только на вашем компьютере, DNS для посетителей не меняется.

Проверьте на новом сервере:

Cloudflare и HTTPS

С прокси Cloudflare строка в hosts ведёт браузер напрямую на сервер, минуя Cloudflare. Для проверки по HTTPS на новом сервере уже нужен сертификат, варианты в следующем шаге.

6Сертификат на новом сервере

Обычный выпуск Let's Encrypt требует, чтобы домен уже указывал на сервер. Чтобы HTTPS работал сразу после переключения, есть три варианта.

Копия действующего сертификата

Перенесите его со старого сервера вместе с ключом, а после переключения DNS выпустите новый.

Origin CA от Cloudflare

Если домен работает через прокси Cloudflare в режиме Full (strict). О режимах - в статье Cloudflare для новичка.

Выпуск через DNS-проверку

Она не зависит от того, куда сейчас указывает домен.

7Финальная синхронизация

Пока вы проверяли сайт, на старом сервере могли появиться записи, комментарии или заказы. Перед переключением включите там режим обслуживания, чтобы данные перестали меняться:

# на старом сервере
wp maintenance-mode activate --allow-root

Повторите выгрузку базы и rsync файлов: второй проход займёт секунды, потому что копируются только изменения. Затем снова импортируйте базу на новом сервере.

Когда шаг можно пропустить

Сайт-визитка или блог без комментариев, если за время проверки на сайте ничего не публиковали.

8Переключаем доменминуты

Измените A-записи домена и www на IP нового сервера. Уберите строку из hosts, чтобы видеть сайт как посетители.

9Не выключайте старый сервер сразу1-2 недели

Кэш DNS

Часть посетителей и роботов может обращаться к старому IP.

Точка отката

Пригодится, если на новом сервере всплывёт проблема.

Проверка

Отключайте старый сервер, только когда в его журналах не осталось обращений.

Частые ошибки при переносе

Белый экран или 500

Не хватает расширения PHP или стоит другая версия PHP.

Сравните вывод php -m на обоих серверах

Ошибка соединения с базой

В wp-config.php остались данные старой базы.

Укажите новые, как в шаге 4

Картинки не загружаются

Файлы в wp-content/uploads принадлежат не пользователю веб-сервера.

Верните права командой chown из шага 3

404 на постоянных ссылках

В Nginx не настроен try_files или в Apache не включён mod_rewrite.

Настройте try_files или включите mod_rewrite

Редирект на старый домен

При смене домена не выполнили wp search-replace или адрес закэширован плагином кэша.

Замените адреса из шага 4, проверьте плагин кэша

Как это устроено в Kesyio

Kesyio

Проверка сервера перед переездом

Если новый сервер подключён к Kesyio, перед переносом удобно проверить его состояние прямо в кабинете. Проверка покажет:

  • работают ли веб-сервер и база данных;
  • насколько заполнен диск;
  • сколько доменов уже размещено на сервере.

Это помогает не переехать на сервер, где через месяц закончится место. Автоматического переноса существующего сайта между серверами в Kesyio нет: перенос выполняется по шагам из этой статьи.

Вопросы и ответы

Сколько времени занимает перенос сайта?

Для блога или сайта-визитки размером до нескольких гигабайт перенос с проверкой занимает час-два. Больше всего времени уходит на копирование загруженных файлов и проверку, а само переключение DNS - минуты.

Можно ли перенести сайт плагином?

Да, плагины миграции упаковывают файлы и базу в архив и распаковывают на новом сервере. Для небольших сайтов это удобно, но на крупных такие архивы упираются в лимиты загрузки и памяти, и перенос через rsync и WP-CLI надёжнее.

Потеряются ли позиции в поиске после переноса?

Если домен и адреса страниц не меняются, нет: для поисковиков это тот же сайт. Риск появляется, только если сайт долго недоступен или отвечает ошибками во время переезда.

Нужно ли менять что-то в Search Console?

При переносе на новый сервер без смены домена - нет. При смене домена используйте инструмент смены адреса в Search Console и настройте 301-редиректы со всех старых адресов.

Итог

  • Сначала полная копия и проверка на новом сервере, потом переключение домена.
  • Перед началом: резервная копия вне обоих серверов и низкий TTL.
  • Проверка через hosts показывает новый сервер только вам.
  • Финальная синхронизация и старый сервер в запасе делают переезд рутиной на пару часов.