Назад в блог

Превью-окружения: как проверять ветку, не ломая продакшн

R
relaxdev
01.08.2026 57 просмотров

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

Превью-окружения: как проверять ветку, не ломая продакшн

Есть один сценарий, который повторяется в каждой команде. Разработчик доделал фичу, надо показать её заказчику. Вариантов ровно два: выкатить на боевой сайт и надеяться, либо слать скриншоты и объяснять словами, что там на самом деле происходит при клике.

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

Превью-окружения решают именно это.

Что это такое

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

Выглядит это так: у проекта myapp с боевым доменом myapp.ru появляется адрес вида myapp-git-feature-checkout.preview.relaxdev.ru, где живёт ветка feature/checkout. Обычная ссылка, обычный HTTPS. Её можно отправить кому угодно, доступ в панель для этого не нужен.

Чем это отличается от staging

Staging обычно один. Он общий, за него дерутся, на нём всегда лежит чья-то недоделанная ветка, и «а можно я на пять минут задеплою» — это отдельный жанр переписки в рабочем чате.

Превью создаются на каждую ветку и живут независимо. Две задачи в работе — два адреса, которые друг о друге не знают. Никакой очереди.

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

Главная ловушка: общая база данных

Тут начинается самое интересное, и это та часть, которую в статьях про превью обычно проговаривают вскользь.

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

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

Поэтому в RelaxDev режим базы для превью переключается явно, и мы советуем режим «своя база, только схема». В нём для превью создаётся отдельная база со структурой продакшна, но без единой записи. Приложение при старте накатывает миграции и сиды само — так, как оно это делает на чистой машине разработчика. Боевые данные при этом физически недостижимы.

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

Когда превью удаляется, его база удаляется вместе с ним. Отдельно прибираться не нужно.

Переменные окружения

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

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

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

Отдельная деталь, которая экономит нервы: если в продакшн добавилась переменная, которой нет в превью, панель это показывает и предлагает дописать её одной кнопкой. Иначе списки расходятся незаметно, и превью падает на пустом process.env через две недели после того, как кто-то добавил ключ.

Уборка

Забытые стенды — отдельная беда. Их создают, смотрят один раз и не удаляют, а они продолжают занимать память и диск.

Поэтому превью живёт 72 часа. Отсчёт обновляется при каждой пересборке: пока над веткой работают, окружение не денется никуда. Как только работа остановилась — контейнер, образ и база удаляются автоматически. Удалить раньше можно кнопкой.

Ещё пара мелочей, которые оказались полезными

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

Слияние из панели. Проверили ветку — сливаете её в продакшн, не переходя в интерфейс Git-провайдера. Перед слиянием видно, сколько коммитов впереди и сколько файлов затронуто. Дальше срабатывает обычный автодеплой.

**Закрыто от поиска.** Все превью-адреса отдаются с noindex. Дублей вашего сайта в выдаче не появится — иначе поисковик рано или поздно найдёт стенд и начнёт показывать его вместо основного домена.

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

Чего превью не умеют

Telegram-ботов превью не поднимают, и это осознанно: два экземпляра бота с одним токеном начинают драться за получение обновлений, и работающий бот ломается. Для ботов нужен отдельный токен на каждую среду — пока это делается руками.

Слияние веток из панели работает для GitHub. Сами превью создаются из GitHub, GitLab, GitVerse и GitFlic одинаково, а вот для слияния у остальных провайдеров пока используется их собственный интерфейс.

Как попробовать

Откройте вкладку «Окружения» в любом проекте, развёрнутом из Git, выберите ветку и нажмите «Создать». Через одну-три минуты адрес будет готов.

Превью доступны на всех тарифах, включая бесплатный.

Подробности в документации, вопросы и пожелания — на форуме.

Комментарии (1)

Ответить без регистрации

Изображения, PDF, TXT • Ctrl+V для скриншота • до 5 файлов, 10 MB
Valery7 дней назад

Огонь! А интеграции с СУБД - вообще пушка!

Как маркетолог маркетологу:

  • Вам прямо сейчас, да, вот прямо сейчас и немедленно нужно садиться, да, и начинать писать статью на Хабр! Именно в контексте "Наш ответ ихим верселЯм" и с упоминанием в качестве УТП всех нюансов 152-ФЗ, РКН дает шанс выстрелить!