Стенд из копии боевого - подъём, обезличивание, отрезанные связи
Поднимаем стенд из копии боевого сайта так, чтобы ошибки на нём воспроизводились, а письма и платежи наружу - нет.
Решение
Поднимаем копию файлов и базы:
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');Обезличивание делают сразу после переноса, до первого запуска сайта. Данные покупателей на ноутбуке разработчика не нужны никому, а объяснять их утечку придётся долго.
Перехватываем письма:
- отправка почты в файл или в локальную ловушку писем- почтовые события остаются включёнными: их поведение нужно видеть- адрес отправителя на стенде отличается от боевого явноПисьмо со стенда должно быть видно разработчику и невидимо покупателю. Ловушка показывает и текст, и получателя, и это нужнее, чем просто выключенная отправка.
Копию обновляют по расписанию, а не раз в год. Стенд годовалой давности перестаёт воспроизводить ошибки боевого сайта, и время уходит на разбор различий между ними, а не на саму задачу.
Порядок подъёма стоит записать один раз и держать рядом с проектом. Стенд поднимают чаще, чем кажется, и каждый раз вспоминать порядок отключений - способ однажды забыть про обмен.
Отличия стенда от боевого держат в настройках, а не в коде. Условие вида «если это стенд» внутри решения однажды уезжает на боевой сайт и ведёт себя там ровно так, как написано.
Стенд у каждого разработчика свой, а порядок его подъёма - общий на команду. Разные стенды с разными отключениями дают тот самый спор о том, у кого что работает, и разрешается он всегда одинаково: сверкой настроек.
Типичные проблемы
Покупателю пришло письмо со стенда.
Отправка почты на копии осталась настроенной так же, как на боевом сайте. Её перенаправляют в локальную ловушку писем сразу после подъёма самой копии сайта.
В учётной системе появились странные заказы.
На стенде остался включённым обмен с боевой базой учётной системы. Точку обмена с учётной системой отключают в тот же час, что и подняли.
Ошибка на боевом не воспроизводится на стенде.
Копия слишком старая или данные на ней демонстрационные. Стенд обновляют из свежей копии боевого сайта по заранее принятому командой расписанию.
Стенд провёл настоящий платёж.
Платёжная система осталась в боевом режиме с боевыми ключами. Режим работы и ключи платёжной системы задают только настройками этого самого стенда.
Перенос копии занимает полдня.
Вместе с сайтом едут кэш и уменьшенные копии картинок. Всё пересобираемое из переноса исключают, и тогда копия поднимается за один час.
Частые вопросы
Нужен ли на стенде полный каталог товаров?
Для задач каталога и обмена - да. Для правки шаблона хватит и части данных.
Как быть с большим каталогом загрузок?
Переносить выборочно, а недостающие картинки подменять заглушкой. Целиком он нужен редко.
Можно ли работать на копии без обезличивания?
Технически да, но данные покупателей начинают жить на чужих машинах. Один запрос дешевле такого риска.
Как часто обновлять стенд?
Перед каждой крупной задачей и по расписанию раз в неделю-две. Точный срок зависит от того, как быстро меняются данные.
Смежное
-
Стенд разработчика - оглавление подтемы
-
Приёмка чужого проекта: инвентарь, правки ядра, карта рисков - что делать с копией дальше
-
Копия сайта не открывается на стенде: разбор причин - если копия не заработала сразу
-
Три контура проекта: разработка, тест, бой и порядок переноса - место такой копии в схеме проекта
-
Окружение 1С-Битрикс - на чём поднимать стенд
-
Перенос сайта на другой сервер: через восстановление и вручную - механика самого переноса
-
Настройки проекта: файл ядра, опции модуля, разные стенды - чем стенд отличается настройками
-
Выкладка на боевой: порядок, структура, откат - обратная дорога с правками
-
Отладчик на стенде: подключение, точки останова, обмен и cron - чем разбирать чужой код
-
Тесты для своего кода: что покрывать и как запускать - что запускают на этой копии
-
Docker-окружение: сервисы, требования, права на файлы - на чём поднимать стенд
-
Тестовые данные для стенда: генерация, пометка, чистка - стенд без боевых данных вообще