Сам по себе переезд несложен: скопировать файлы, перенести базу, поменять запись в DNS. Заявки и позиции теряются не на этих шагах, а на том, о чём забыли. Задание cron осталось на старой машине, почта уходит с адреса, которого нет в SPF, тестовый запрет индексации уехал в продакшн. Поэтому хороший переезд почти целиком состоит из подготовки.
Ниже порядок, в котором мы планируем такие работы в рамках администрирования серверов, и чек-лист, по которому удобно проверять результат.
Инвентаризация: что на самом деле живёт на сервере
Старый сервер почти всегда делает больше, чем о нём помнят. До начала работ нужен полный список:
- сайты и поддомены, включая забытые тестовые и служебные;
- базы данных, их размер и версия сервера баз данных;
- версия PHP, набор расширений, лимиты памяти и времени выполнения;
- задания cron и фоновые процессы — обработчики очередей, обмены, рассылки;
- почта: принимает ли сервер письма и с какого адреса сайт их отправляет;
- DNS-записи домена и место, где ими управляют;
- редиректы и правила в конфигурации веб-сервера — в коде сайта их нет;
- интеграции, которые знают сервер по IP-адресу: платёжные системы, обмен с 1С, внешние API с белыми списками;
- сертификаты и файлы за пределами каталога сайта.
Пункт про IP-адрес подводит чаще остальных. У нового сервера адрес другой, и всё, что было настроено на старый, перестанет работать молча: оплаты не подтверждаются, остатки не обновляются, а на самом сайте ошибок не видно.
Подготовка: TTL, тестовый контур, сертификат
Снизить TTL заранее
TTL — время, на которое DNS-серверы провайдеров запоминают запись. Если там сутки, то после смены адреса часть посетителей ещё сутки будет попадать на старый сервер. Поэтому TTL заранее снижают до пяти минут. Заранее — значит не позже чем за прежний срок жизни записи: если там стояли сутки, то минимум за сутки до переезда, иначе старое значение не успеет уйти из кэшей.
# текущая A-запись; второе поле ответа — TTL в секундах
dig +noall +answer example.ru A
# открыть сайт с нового сервера, не меняя DNS
curl -I --resolve example.ru:443:203.0.113.10 https://example.ru/
Собрать сайт на новом сервере
Копию разворачивают на новой машине и проверяют до переключения — через запись в файле hosts или командой выше. Смотрят то, что зависит от окружения: версию PHP, расширения, права на каталоги, отправку писем, работу форм, оплату в тестовом режиме. Если на время проверки сайт закрыт от индексации, запишите это отдельной строкой в плане: забытый запрет в robots.txt или метатеге — самый надёжный способ потерять позиции при переезде.
Подготовить сертификат
Бесплатный сертификат с проверкой по HTTP на новом сервере не выпустить, пока домен указывает на старый. Вариантов два: выпустить его с проверкой через DNS или временно перенести действующий сертификат вместе с ключом, а после переключения выпустить новый. Главное — чтобы в момент переключения сайт не встретил посетителей предупреждением браузера.
Перенос данных: база, файлы, почта, cron
Файлы копируют дважды. Первый раз — заранее и целиком, это может занять часы. Второй раз — в момент переключения, когда переносится только то, что изменилось.
rsync -aH --delete /var/www/site/ deploy@203.0.113.10:/var/www/site/
С базой так не получится: пока старый сервер принимает заказы, любой дамп устаревает в момент создания. Поэтому на время финального переноса запись на старом сайте останавливают — включают режим обслуживания, снимают дамп, загружают его на новый сервер и только потом переключают трафик. Для небольшой базы это минуты в часы наименьшей посещаемости. Всё, что пришло на старый сервер после финального дампа, на новом не появится — именно так и теряются заявки.
Два пункта требуют отдельного внимания.
- Почта. Если ящики живут на старом сервере, это отдельный проект со своим планом. Если сервер только отправляет письма, проверьте SPF и DKIM: новый адрес должен иметь право отправлять почту от имени домена, иначе уведомления о заказах уйдут в спам.
- Cron и фоновые задачи. На новом сервере их включают после переключения, на старом — отключают в тот же момент. Иначе рассылка уйдёт дважды, а обмен с учётной системой запустится с двух машин сразу.
Переключение и откат
В день переезда всё должно идти по списку, а не по вдохновению.
- Включить режим обслуживания на старом сервере.
- Выполнить финальную синхронизацию файлов и перенос базы.
- Проверить сайт на новом сервере в обход DNS.
- Изменить DNS-запись.
- На старом сервере вместо сайта настроить проксирование запросов на новый — для тех, у кого прежний адрес ещё в кэше.
- Включить cron на новом сервере и отключить на старом.
- Наблюдать за журналами обеих машин, пока обращения к старой не прекратятся.
План отката пишут до начала работ, а не когда что-то пошло не так. В нём два ответа: по какому признаку принимается решение вернуться и что делать с данными, которые за это время появились на новом сервере. Старую машину не выключают сразу — пусть постоит в резерве ещё неделю-другую. Это самая дешёвая страховка в проекте.
Поисковой системе всё равно, на каком сервере стоит сайт. Ей не всё равно, если страницы начали отвечать ошибками.
Позиции при переезде страдают не от смены сервера, а от побочных эффектов: изменившихся адресов страниц, пропавших редиректов, закрытой индексации, долгого простоя, упавшей скорости загрузки. Если адреса, ответы и содержимое остались прежними, поисковик разницы не увидит.
Чек-лист после переезда
- С каждой формы отправлена тестовая заявка, письмо дошло до менеджера и не попало в спам.
- Тестовый заказ проходит до конца, включая оплату и уведомления.
- Сертификат действует, сайт открывается по HTTPS, версии с www и без www ведут на один адрес.
- Редиректы со старых адресов работают, ключевые страницы отвечают кодом 200.
- В robots.txt и метатегах нет запрета индексации, карта сайта открывается.
- Задания cron выполняются на новом сервере и не выполняются на старом.
- Обмены с внешними системами работают с новым IP-адресом.
- Счётчики аналитики собирают данные, цели срабатывают.
- В панелях вебмастеров поисковых систем нет новых ошибок обхода.
- На новом сервере настроены резервное копирование и мониторинг — о них забывают чаще всего, потому что на старом они «просто были».
- TTL возвращён к обычному значению.
Переезд — удобный повод навести порядок: обновить версии, убрать забытые поддомены, записать, что и где работает. Тогда следующий перенос начнётся не с раскопок, а с готового списка.