Перейти к содержимому

Стенд из копии боевого - подъём, обезличивание, отрезанные связи

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

Решение

Поднимаем копию файлов и базы:

Окно терминала
rsync -a --exclude='/bitrix/cache/' --exclude='/bitrix/managed_cache/' \
--exclude='/upload/resize_cache/' boevoy:/home/site/ /home/stend/
gunzip < /backup/base.sql.gz | mysql -u stend -p stend_base
# кэш и уменьшенные копии не переносят: они соберутся заново и сэкономят часы

Копия должна быть похожей на боевой сайт по данным, а не по объёму кэша. Всё пересобираемое пропускают, и перенос из многочасового превращается в получасовой.

Отрезаем связи наружу:

// /bitrix/.settings_extra.php стенда: свои значения поверх общих
return [
'vendor' => ['value' => ['exchange_enabled' => false, 'pay_test' => true]],
];
// плюс: снять расписание cron, выключить точку обмена и агенты рассылок

Копия не должна разговаривать с внешним миром. Обмен, платежи, рассылки и уведомления отключают сразу после подъёма, а не после первого письма настоящему покупателю.

Обезличиваем данные покупателей:

UPDATE b_user SET EMAIL = CONCAT('user', ID, '@example.invalid'),
PERSONAL_PHONE = NULL, LAST_NAME = CONCAT('Тестов', ID)
WHERE ID > 1;
UPDATE b_sale_order_props_value SET VALUE = 'скрыто'
WHERE ORDER_PROPS_ID IN (SELECT ID FROM b_sale_order_props WHERE IS_EMAIL = 'Y');

Обезличивание делают сразу после переноса, до первого запуска сайта. Данные покупателей на ноутбуке разработчика не нужны никому, а объяснять их утечку придётся долго.

Перехватываем письма:

- отправка почты в файл или в локальную ловушку писем
- почтовые события остаются включёнными: их поведение нужно видеть
- адрес отправителя на стенде отличается от боевого явно

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

Копию обновляют по расписанию, а не раз в год. Стенд годовалой давности перестаёт воспроизводить ошибки боевого сайта, и время уходит на разбор различий между ними, а не на саму задачу.

Порядок подъёма стоит записать один раз и держать рядом с проектом. Стенд поднимают чаще, чем кажется, и каждый раз вспоминать порядок отключений - способ однажды забыть про обмен.

Отличия стенда от боевого держат в настройках, а не в коде. Условие вида «если это стенд» внутри решения однажды уезжает на боевой сайт и ведёт себя там ровно так, как написано.

Стенд у каждого разработчика свой, а порядок его подъёма - общий на команду. Разные стенды с разными отключениями дают тот самый спор о том, у кого что работает, и разрешается он всегда одинаково: сверкой настроек.

Типичные проблемы

Покупателю пришло письмо со стенда.

Отправка почты на копии осталась настроенной так же, как на боевом сайте. Её перенаправляют в локальную ловушку писем сразу после подъёма самой копии сайта.

В учётной системе появились странные заказы.

На стенде остался включённым обмен с боевой базой учётной системы. Точку обмена с учётной системой отключают в тот же час, что и подняли.

Ошибка на боевом не воспроизводится на стенде.

Копия слишком старая или данные на ней демонстрационные. Стенд обновляют из свежей копии боевого сайта по заранее принятому командой расписанию.

Стенд провёл настоящий платёж.

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

Перенос копии занимает полдня.

Вместе с сайтом едут кэш и уменьшенные копии картинок. Всё пересобираемое из переноса исключают, и тогда копия поднимается за один час.

Частые вопросы

Нужен ли на стенде полный каталог товаров?

Для задач каталога и обмена - да. Для правки шаблона хватит и части данных.

Как быть с большим каталогом загрузок?

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

Можно ли работать на копии без обезличивания?

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

Как часто обновлять стенд?

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

Смежное

Первоисточник