Москва · работаем по всей России Пн–Пт, 10:00–19:00 (МСК)
Инфраструктура 6 мин чтения

Переезд сайта на новый сервер без потери заявок и позиций

Переезд ломают не файлы, а забытые мелочи: cron, почта, редиректы, TTL. Порядок действий и чек-лист проверки после переключения.

Сам по себе переезд несложен: скопировать файлы, перенести базу, поменять запись в 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 и фоновые задачи. На новом сервере их включают после переключения, на старом — отключают в тот же момент. Иначе рассылка уйдёт дважды, а обмен с учётной системой запустится с двух машин сразу.

Переключение и откат

В день переезда всё должно идти по списку, а не по вдохновению.

  1. Включить режим обслуживания на старом сервере.
  2. Выполнить финальную синхронизацию файлов и перенос базы.
  3. Проверить сайт на новом сервере в обход DNS.
  4. Изменить DNS-запись.
  5. На старом сервере вместо сайта настроить проксирование запросов на новый — для тех, у кого прежний адрес ещё в кэше.
  6. Включить cron на новом сервере и отключить на старом.
  7. Наблюдать за журналами обеих машин, пока обращения к старой не прекратятся.

План отката пишут до начала работ, а не когда что-то пошло не так. В нём два ответа: по какому признаку принимается решение вернуться и что делать с данными, которые за это время появились на новом сервере. Старую машину не выключают сразу — пусть постоит в резерве ещё неделю-другую. Это самая дешёвая страховка в проекте.

Поисковой системе всё равно, на каком сервере стоит сайт. Ей не всё равно, если страницы начали отвечать ошибками.

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

Чек-лист после переезда

  1. С каждой формы отправлена тестовая заявка, письмо дошло до менеджера и не попало в спам.
  2. Тестовый заказ проходит до конца, включая оплату и уведомления.
  3. Сертификат действует, сайт открывается по HTTPS, версии с www и без www ведут на один адрес.
  4. Редиректы со старых адресов работают, ключевые страницы отвечают кодом 200.
  5. В robots.txt и метатегах нет запрета индексации, карта сайта открывается.
  6. Задания cron выполняются на новом сервере и не выполняются на старом.
  7. Обмены с внешними системами работают с новым IP-адресом.
  8. Счётчики аналитики собирают данные, цели срабатывают.
  9. В панелях вебмастеров поисковых систем нет новых ошибок обхода.
  10. На новом сервере настроены резервное копирование и мониторинг — о них забывают чаще всего, потому что на старом они «просто были».
  11. TTL возвращён к обычному значению.

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

Команда «Бинарность»

Разрабатываем сайты, сервисы и модули, администрируем серверы по SLA. Пишем о том, с чем работаем сами.

Обсудить задачу
Контакт · начать работу

Есть задача для нас?

Мы не только пишем статьи — строим софт и держим инфраструктуру. Расскажите о проекте.

  • Ответ и предварительная оценка — за один рабочий день
  • NDA и фиксация объёма работ до старта
  • Код, домены и доступы оформляются на вас

Оставить заявку

Ответим в течение рабочего дня. Телефон или e-mail — на выбор.

Обсудить проект

Опишите задачу — вернёмся с оценкой и планом в течение рабочего дня.