WordPress

Переезд WordPress начинается до копирования

Перенос файлов — лёгкий день. Миграция — это инвентарь, который вы написали за день до того, как кто-то тронул DNS.

The WordPress move starts before the copy

Копия редко ломает переезд WordPress. Ломает то, что никто не записал: cron, webhook, плагин, который зашил старый hostname в строку, ящик, который всё ещё уходит со старого сервера. Я считаю инвентарь самой миграцией. Перенос файлов — лёгкий день, который приходит после.

Запишите систему, прежде чем её трогать

Прежде чем двинется файл, я пишу страницу, которой мог бы пользоваться посторонний. Версия PHP. Размер базы. Строки cron и запланированные действия внутри WordPress — это не один список. Почта: кто отправляет, через что и называет ли SPF уже этот хост. Каждая интеграция, которая зовёт сайт или которую зовёт сайт. Платёжные webhook и синхронизация с CRM — обычные сюрпризы, потому что живут в настройке плагина, которую никто не выгрузил.

Я также записываю, что для этого магазина значит «работает». Оформление одного физического товара. Оформление одного виртуального. Вход. Сброс пароля. Форма связи, включая письмо, которое должно прийти. Поиск, если каталог от него зависит. Если я не могу назвать путь, я не готов менять DNS.

СтрокаЗачем это здесь
PHP, размер базы, объектный кэшНовый хост может быть «поднят» и всё равно оказаться не тем рантаймом.
Cron и запланированные действияПропущенная ночная задача выглядит нормально, пока утренний отчёт пуст.
Путь почтыСайт может открываться, пока каждое письмо о заказе умирает на новой машине.
Вебхуки и исходящие APIОбычно они нигде не записаны, и имя хоста они замечают первым.
Пять путей, которые приносят деньгиПроверка главной их не проходит.

Снизьте TTL за день

Поставьте TTL DNS на 300 секунд за день до переключения. Если это пропустить и новый хост окажется неверным, часть аудитории ещё часами держит старую запись. Нельзя поторопить кэш, который не укоротили. Я лучше нарочно подожду день, чем обнаружу это ожидание во время сбоя.

Адрес staging — не настоящее имя хоста

Я поднимаю новый сервер и направляю на него только свою машину, записью в файле hosts, пока публичный DNS всё ещё отдаёт старый хост. Потом прохожу пути на настоящем имени. Адрес staging прячет плагины, которые сохранили прод-домен в базе. Они ведут себя, пока настоящего имени нет в запросе, а это ровно тот момент, когда сюрприз уже не нужен.

Если критический путь не пройден на настоящем имени хоста, перенос не проверен.

Держите старый хост тёплым

Я не отключаю старый хостинг в неделю переезда. Он остаётся, только для чтения, минимум две недели. Это дёшево. Это единственный откат, который не зависит от копии, которую мне ещё не приходилось использовать. Если новый хост на третий день ведёт себя плохо, старая запись всё ещё что-то значит.

Почта — проверка, про которую забывают

Сайт может выглядеть готовым, пока каждое письмо о заказе умирает на новой машине. Я записываю адрес From, relay и открыт ли вообще порт 25. На не одном хосте он закрыт, и единственный рабочий путь — аутентифицированный relay на 587. У SPF уже есть одна запись. Вторую я не добавляю. Две записи SPF не сливаются. Обе становятся недействительными, и почта, которая раньше доходила, начинает пропадать на неделе после переезда, который в остальном прошёл хорошо.

Я отправляю одно настоящее письмо о заказе и один сброс пароля с нового хоста на ящик, который контролирую, прежде чем назвать переезд законченным. Строка лога “sent” — это не письмо во входящих. Второе и есть проверка.

HTTPS на apex и на www. Сертификат обновляется сам. Почта всё ещё уходит. Пять путей всё ещё проходятся. Потом я день смотрю журнал ошибок, не главную. Главная — то, с чем монитор вас уже поздравляет. Журнал — место, где webhook начал отдавать 404 платёжному провайдеру.

Переезд, сделанный так, скучный. В этом и смысл. Интересные истории про миграции почти всегда про строку, которой не было в инвентаре.