Когда стоит переносить vibe-coded приложение?
Узнайте, когда переносить vibe-coded приложение: сравните аутентификацию, перенос базы, секреты, смену домена, простой, очистку и откат.

Перенести сгенерированное приложение до запуска дешевле и проще. После появления спроса перенос опирается на реальные данные, но ошибок он прощает гораздо меньше. Подходящий момент зависит не столько от того, начали ли вы проект в Lovable, Bolt, v0 или Replit, сколько от того, можете ли вы назвать и отрепетировать все границы с состоянием, которыми управляет текущая платформа.
Я считаю запуск моментом, когда идентичность пользователей, данные и публичный домен становятся обещанием пользователям. До этого неудачная миграция стоит времени разработчиков. После запуска та же ошибка может лишить клиентов доступа, потерять записи, аннулировать сессии или направить трафик на две разные версии продукта. Спрос показывает, что действительно стоит сохранить, но обычный перенос кода превращает в операционное изменение.
Не принимайте решение по размеру исходного дерева. Небольшое приложение с управляемой аутентификацией и работающей базой данных бывает сложнее перенести, чем большой статический сайт. Оцените владение: кто контролирует репозиторий, учётные записи, базу данных, секреты, файлы, задачи по расписанию, домен, развёртывание и путь отката?
До запуска миграция даёт свободу
Перенос до запуска обычно лучше, если текущая платформа не отвечает известному требованию к владению, развёртыванию, размещению данных или сопровождению. Ещё можно менять схемы, заменять аутентификацию, переименовывать переменные окружения и сбрасывать тестовые данные без согласования с пользователями.
Этот этап особенно удобен, когда в приложении есть лишь тестовые аккаунты и одноразовые записи. Можно экспортировать код, собрать его в чистом окружении, создать базу данных из миграций и выяснить, какие части были неявно настроены в исходном рабочем пространстве. Каждая ошибка полезна: она обнаруживает зависимость до того, как в ней появятся данные клиентов.
Низкая цена не делает эту работу необязательной. Сгенерированные проекты часто запускаются потому, что исходная платформа подставляет конфигурацию, выдаёт URL базы данных, размещает функции или понимает соглашение о сборке. Экспорт исходников доказывает, что файлы у вас есть. Он не доказывает, что другой хост соберёт и запустит ту же систему.
До запуска я требую проверки в чистой среде. Коллега, который не создавал проект, получает только репозиторий, письменный список секретов с безопасными значениями для разработки и инструкции по настройке. Если он не может войти, создать запись и пройти основной путь пользователя, проект ещё нельзя назвать переносимым.
Есть и причины отложить перенос. У раннего прототипа модель данных может меняться каждый день, и следующая продуктовая идея сведёт работу по миграции на нет. Если текущая платформа поддерживает планируемый запуск, экспорт исходников, развёртывание, пользовательские домены и реалистичный путь отката, небольшой релиз может дать больше пользы, чем доработка инфраструктуры для продукта, который никому не нужен.
Поэтому до запуска вопрос не в том, «Можем ли мы переехать?». Вопрос такой: «Убирает ли перенос известный риск запуска или мы платим за сохранение предположений?» Переносите приложение из-за конкретного ограничения. Не делайте этого лишь потому, что привычная инфраструктура кажется солиднее.
После появления спроса появляются обязательства
Перенос после появления спроса оправдан, когда реальное использование выявило потребности, которые исходная настройка не закрывает. Но план должен сохранить все публичные обещания, которыми уже пользуются. Теперь вы знаете критические пути, реальный объём данных, фоновые задачи, которые запускают пользователи, и важные интеграции. Эти сведения помогают не потратить деньги на переезд к воображаемой архитектуре.
Обязательства столь же конкретны. Существующие пароли должны продолжать работать либо пользователям нужен контролируемый путь сброса. Идентификаторы в базе должны оставаться стабильными, если они встречаются в URL, счетах, вебхуках или внешних ключах. Нужен план переноса загруженных файлов. Ссылки в письмах и OAuth callbacks должны вести на верный домен. Записи, сделанные во время копирования, должны попасть в новую базу либо быть намеренно приостановлены.
Спрос не измеряется одним порогом. Десять активных клиентов, использующих приложение для расчёта зарплаты, создают больше риска миграции, чем десять тысяч читателей статического каталога. Считайте состояние и последствия, а не аккаунты. Узнайте, сколько данных меняется в минуту, насколько дорого обойдётся повторное действие, как быстро поддержка сможет связаться с каждым затронутым пользователем и выдержит ли бизнес окно обслуживания.
На этом этапе команды также путают наблюдаемый спрос с разрешением на архитектурные перемены. Большее число пользователей само по себе не оправдывает переписывание. Если экспортированное приложение понятно, а текущие сервисы можно отделять по одной границе, постепенная миграция безопаснее замены всего стека.
Перед тем как одобрить перенос после появления спроса, я хочу увидеть письменную карту владения:
- Исходный репозиторий и процесс сборки
- Каталог пользователей и активные сессии
- Основная база данных, файлы и резервные копии
- Секреты, задачи по расписанию и исходящие вебхуки
- Домен, записи отправителя почты, мониторинг и права на откат
Любой пустой пункт - блокер, а не мелочь на ночь переключения. Название платформы важно только тогда, когда оно меняет способ экспорта или перенастройки одного из этих активов.
Аутентификация - это миграция идентичности
К аутентификации нужно относиться как к переносу идентичностей и правил доверия, а не как к экрану входа, который можно потом собрать заново. Видимая форма - лёгкая часть. Хеши паролей, идентификаторы субъектов у провайдеров, статус подтверждённого email, многофакторная аутентификация, способы восстановления, сессии и роли доступа обеспечивают настоящую непрерывность.
Сначала выясните, есть ли у приложения собственная таблица пользователей или идентичность передана управляемому сервису. Если пользователей можно экспортировать, посмотрите, какие поля доступны и можно ли импортировать хеши паролей в целевую систему. Хеши не взаимозаменяемы только потому, что обе системы называют их хешами. Целевая система должна поддерживать точный алгоритм и параметры, иначе всем придётся сбросить пароль.
Социальный вход создаёт ещё одну границу идентичности. OAuth-провайдеры обычно возвращают стабильный идентификатор субъекта, специфичный для провайдера. Если новая реализация сопоставляет аккаунты только по email, она может ошибочно объединить людей, когда адрес меняется или провайдер возвращает другой псевдоним. Сохраните тройку: издатель, субъект у провайдера и локальный ID пользователя. Зарегистрируйте callback URLs до переключения, затем проверьте и новый вход, и существующий аккаунт.
Шпаргалка OWASP по управлению сессиями рекомендует обновлять идентификатор сессии после изменения привилегий. Миграция сама по себе не меняет привилегии, но этот совет показывает важную границу: состояние сессии связано с безопасностью. Пытаться сериализовать непрозрачные cookies из одного стека аутентификации в другой обычно невыгодно. Временно оставьте прежний механизм проверки, если полностью его понимаете, либо завершите сессии и сообщите пользователям, что им нужно войти снова. Никогда молча не принимайте cookie, который новый сервис не может проверить.
Область действия cookie может сломать даже правильно выполненный перенос. Проверьте имя cookie, домен, путь и атрибуты Secure, HttpOnly и SameSite, которые создаёт новый хост. Справочник MDN по Set-Cookie поясняет: cookie с атрибутом Domain доступен этому домену и его поддоменам, а без него ограничен хостом, который его установил. Это важно, если старое приложение использовало один хост для веб-интерфейса, а другой для API. Проверяйте в новом профиле браузера, чтобы старый cookie не создал ложное впечатление, что новый поток исправен.
Авторизацию нужно сравнивать отдельно. Пользователь может успешно войти, но потерять членство в организации, роль администратора, право на подписку или политику на уровне строк. Экспортируйте выборку аккаунтов с разными ролями и до переноса напишите тесты ожидаемого доступа. Страница об успешном входе почти ничего не доказывает.
При миграции до запуска я предпочитаю заменить систему идентичности сразу и удалить тестовых пользователей. При миграции после появления спроса выберите одну явную стратегию непрерывности:
- Импортировать совместимые хеши паролей и сохранить ID провайдеров.
- Оставить старый сервис идентичности, пока приложение переезжает.
- Потребовать сброс с одноразовыми токенами с ограниченным сроком действия.
- Запустить короткий мост двойного чтения с одним источником истины для записей.
Не используйте два каталога пользователей, в которые можно записывать. Конфликтующие изменения email и запросы на удаление аккаунта превратят это удобство в инцидент.
Перенос базы данных должен сохранять смысл
Миграция базы данных успешна, только если целевая среда сохраняет ограничения, идентификаторы, временные метки, связи и каждую запись, принятую во время переноса. Количество строк - слабая проверка. В двух базах может быть одинаковое число строк, но различаться точность денежных сумм, часовые пояса, уникальность, обработка null или внешние ключи.
До запуска создавайте базу из версионных миграций, а не копируйте базу разработки. Добавляйте только записи, нужные приложению. Этот тест доказывает, что история схемы полна и приложение не зависит от таблиц, которые кто-то вручную создал в консоли хостинга.
После появления спроса отделите перенос схемы от переноса живых данных. Зафиксируйте исходный движок и версию, расширения, правила сортировки, вычисляемые столбцы, триггеры, политики на уровне строк, последовательности и большие объекты. Если в целевой среде другой движок базы, считайте это также миграцией приложения. Синтаксис SQL - наименьшая часть изменения; неприятные сюрпризы вызывают поведение транзакций и семантика типов.
Документация PostgreSQL описывает pg_dump как согласованный экспорт, который не блокирует читателей и писателей. Это полезно, но команды часто понимают обещание слишком широко. Согласованный снимок не включает записи, подтверждённые после начала снимка. Чтобы закрыть этот разрыв, всё равно нужен захват изменений, финальная пауза записи или окно обслуживания.
Используйте запрос сверки, результат которого можно сохранить вместе с записью о переключении. Этот фрагмент проверяет количество строк, границы идентификаторов и окна обновления для трёх важных таблиц:
SELECT 'users' AS table_name, count(*) AS rows,
min(id)::text AS min_id, max(id)::text AS max_id,
max(updated_at) AS newest_update
FROM users
UNION ALL
SELECT 'projects', count(*), min(id)::text, max(id)::text, max(updated_at)
FROM projects
UNION ALL
SELECT 'orders', count(*), min(id)::text, max(id)::text, max(updated_at)
FROM orders;
Запустите его с обеих сторон и изучите каждое различие. Затем проверьте инварианты предметной области, которые не видит подсчёт: ни один заказ не ссылается на отсутствующего пользователя, остатки совпадают с журналом проводок, у каждой записи файла есть объект, а правила уникальности отклоняют те же дубликаты.
Резервным копиям нужна проверка восстановления. Успешно созданный экспортный файл лишь подтверждает, что команда завершилась. Восстановите его в пустую целевую среду, запустите на нём приложение и засеките время. Измеренное время восстановления покажет, реалистичен ли откат через восстановление или он лишь успокаивает.
Файловое хранилище часто скрывается за строками базы. Экспортированная таблица uploads может сохранить имена объектов, пока сами объекты остаются в управляемом платформой бакете. Скопируйте байты, контрольные суммы, типы содержимого, правила доступа и метаданные владельца, затем выборочно скачайте файлы через приложение, а не через консоль хранилища. Если URL содержит подписанные токены или имя старого хоста, создайте его заново, а не копируйте устаревший URL. Считайте пользовательские загрузки состоянием в том же окне переключения, особенно если пользователь может заменить файл во время копирования базы.
Переменные окружения раскрывают скрытую архитектуру
Переменные окружения нужно превратить из унаследованного набора строк в именованный контракт для каждого окружения. Отсутствующие переменные вызывают заметные сбои. Опаснее переменные с правдоподобными, но неверными значениями для продакшена, например тестовый ключ оплаты, старый секрет вебхука или origin обратного вызова, который возвращает пользователей на прежний хост.
Составьте список переменных по коду, настройкам платформы, конфигурации сборки, бессерверным функциям, задачам по расписанию и системе развёртывания. Не копируйте всё старое окружение в новый хост. Классифицируйте каждое значение по владельцу, чувствительности, области действия, способу ротации и моменту чтения: при сборке или во время выполнения.
Компактный манифест делает границу доступной для проверки:
DATABASE_URL runtime secret owner=backend rotate=yes
PUBLIC_APP_ORIGIN build public owner=web rotate=no
SESSION_SIGNING_KEY runtime secret owner=security rotate=yes
MAIL_SENDER runtime public owner=ops rotate=no
WEBHOOK_SECRET runtime secret owner=backend rotate=yes
Различие между сборкой и выполнением важно для фронтендов в стиле React. Значение, встроенное при сборке, не изменится, если кто-то отредактирует настройку во время выполнения. Пересоберите клиент и проверьте доставленный bundle на наличие публичной конфигурации. Никогда не помещайте секрет в переменную только потому, что её имя начинается с публичного префикса фреймворка.
При миграции после появления спроса ротируйте секреты, если целевая среда поддерживает период перекрытия. Для проверки вебхуков или подписи сессий кратко принимайте старый и новый секрет, но выдавайте только новый. Удалите старое значение после максимального окна доставки или сессии. Если провайдер поддерживает только один секрет, согласуйте переключение с финальным cutover и явно укажите эту зависимость в регламенте.
До запуска удалите неиспользуемые переменные и останавливайте запуск при отсутствии обязательных значений. После появления спроса добавьте наблюдаемость до очистки, чтобы увидеть, не получает ли вызовы интеграция, кажущаяся устаревшей. Догадки по именам переменных приводят к отключению тихой ежемесячной задачи, которая на самом деле нужна финансам.
Сравнивайте значения по окружениям, но никогда не вставляйте секреты в документ миграции. Записывайте имена секретов и метки версий, а значения храните в хранилище секретов целевой среды. Дайте идентичности приложения право читать только то, что нужно этому развёртыванию. При изменении переменной записывайте, кто её изменил и какой релиз её использовал. Эта простая дисциплина отвечает на знакомый ночной вопрос: «Какой URL базы данных мы на самом деле развернули?»
Переключение домена меняет управление трафиком
Переключение домена нужно спланировать так, чтобы старое и новое развёртывания могли безопасно принимать трафик во время распространения DNS. DNS не меняется одновременно повсюду, а снижение TTL незадолго до изменения не влияет на резолверы, которые уже закешировали старое значение.
За несколько дней до планируемого переноса снизьте TTL нужной записи и подтвердите авторитетный ответ. Поддерживайте старое развёртывание работоспособным как минимум в течение прежнего TTL с консервативным запасом для резолверов. Выпустите сертификат на новом хосте до направления туда трафика и отдельно проверьте корневой домен, хост www, поддомен API, редиректы и IPv6-записи.
Домен - лишь входная дверь. Обновите callbacks аутентификации, разрешённые origins, домены cookies, канонические URL, конечные точки вебхуков, ссылки в письмах и настройки мобильных deep links. Найдите старое имя хоста в репозитории и настройках платформы. Редирект помогает браузерам, но не исправляет строгое несовпадение OAuth callback или вебхук, подписанный для неверной конечной точки.
Нулевой простой возможен, только если обе версии работают с совместимым состоянием. Если новый релиз меняет базу так, что старый код не может её читать, перекрытие DNS вызовет сбои. Используйте изменения схемы по принципу расширения и сокращения: сначала добавьте столбец или таблицу, разверните код, который понимает обе формы, перенесите данные и удалите старую форму после того, как весь трафик покинет старый релиз.
Для продуктов с небольшим трафиком короткое окно обслуживания может быть безопаснее сложной настройки живой репликации. Укажите, когда записи остановятся, верните корректный ответ об обслуживании, остановите фоновую работу, сделайте финальную копию, проведите сверку, переключите трафик и снова разрешите записи. Доступ только для чтения можно сохранить, если он не ставит скрытые задачи в очередь.
Для отката нужно правило данных. Вернуть DNS назад легко, пока записи не попали в целевую среду. Когда пользователи уже записывали данные с обеих сторон, обратная смена DNS может потерять или разветвить данные. Определите последний безопасный момент отката, а после него двигайтесь вперёд или сверяйте изменения вместо того, чтобы считать, что возврат трафика восстановит согласованность.
Наблюдайте за приложением извне нового аккаунта хостинга. Разрешите домен через несколько публичных резолверов, запросите цепочку сертификатов, загрузите страницу без тёплого кеша, выполните одну обратимую операцию и подтвердите завершение созданной фоновой работы. Панели хоста могут показывать здоровое развёртывание, пока пользователи получают старый DNS-ответ или региональный edge отдаёт старую сборку. До конца перекрытия держите синтетическую проверку и для публичного домена, и для тестового хоста целевой среды.
Очистка исходников определяет долговечность переноса
Очистка исходников должна убрать зависимость от платформы, не уничтожая полезную сгенерированную структуру и не вызывая несвязанное переписывание. Сгенерированный код бывает повторяющимся или неуклюжим, но эстетическое неприятие - не причина для миграции. Меняйте то, что мешает независимой сборке, тестированию, проверке безопасности или дальнейшему сопровождению.
Начните с происхождения. Экспортируйте полный репозиторий и сохраните файлы лицензий, указания авторства ресурсов, сгенерированные миграции, lockfiles и конфигурацию. Проверьте, не попали ли секреты или токены платформы в историю Git. Удаление их из текущего файла не отзывает их, поэтому ротируйте раскрытые учётные данные и решите, нужно ли переписывать историю.
Затем найдите специфичные для платформы импорты, proxy paths, клиенты базы данных, помощники аутентификации, адаптеры хранилища, файлы развёртывания и сгенерированные конечные точки API. По возможности заменяйте их за узкими интерфейсами приложения. Поиск по всему репозиторию полезен, но только прохождение пользовательских сценариев показывает, какие ссылки ещё важны.
Очисткой зависимостей займитесь после того, как независимая сборка заработает. Удаляйте пакеты по одному, пересоздавайте lockfile существующим менеджером пакетов и запускайте тесты после каждой группы. Не обновляйте фреймворк, не меняйте управление состоянием, не переименовывайте все компоненты и не переносите хостинг одним изменением. Иначе у одного сбоя будет слишком много возможных причин.
Сгенерированный серверный код требует особенно внимательной проверки на границах доверия. Проследите каждый запрос от маршрута до проверки авторизации и запроса к базе, убедитесь, что сервер не полагается на правило видимости на стороне клиента. Проверьте лимиты загрузки, цели исходящих запросов, сообщения об ошибках и административные маршруты. Это не призыв переписывать каждый сгенерированный обработчик. Это точечная проверка, что код по-прежнему применяет правила доступа после исчезновения middleware платформы и управляемых прокси.
Сгенерированному проекту также нужны обычные операционные файлы: пример манифеста окружения с поддельными значениями, команды миграции базы, инструкции по сборке и запуску, проверки работоспособности и описание фоновых воркеров. Пусть эти инструкции можно выполнить. README с фразой «настройте базу данных» лишь фиксирует существование базы.
До запуска очистка может включать сброс схемы и крупный рефакторинг, поскольку нет обещания совместимости. После появления спроса сохраняйте формы публичного API, идентификаторы и видимое пользователям поведение, пока перенос инфраструктуры не стабилизируется. Дайте новому развёртыванию спокойный период до изменения поведения продукта. Когда миграция и редизайн приходят одновременно, поддержка не может понять, вызвана жалоба переносом или новой функцией.
Репетиция превращает простой в решение
Репетиция миграции должна воспроизводить последовательность продакшена на недавней обезличенной копии данных и давать измеренное время, результаты сверки и проверенную точку отмены. Чек-лист, скопированный из другого проекта, не скажет, сколько времени займёт восстановление вашей базы или какая задача продолжает писать после включения режима обслуживания.
Пусть один оператор выполняет действия, а другой наблюдает, фиксирует время и оспаривает пропущенные проверки. В небольшой команде вторым человеком может быть основатель, но он должен понимать достаточно, чтобы заметить изменившийся результат. Человек, вводящий команды, не должен быть единственным, кто решает, что они сработали.
У практичного регламента строгий порядок:
- Заморозьте несвязанные развёртывания и зафиксируйте текущие версии, DNS-значения и версии секретов.
- Переведите записи в режим обслуживания, остановите очереди, задачи по расписанию и запишите финальную метку источника.
- Скопируйте оставшиеся данные, сверяйте таблицы и инварианты предметной области, затем проверьте аутентификацию и основные пользовательские сценарии.
- Переключите трафик, проверьте сертификаты и callbacks, следите за ошибками и глубиной очередей, затем снова разрешите записи.
- В объявленной контрольной точке либо продолжайте работу на новой системе, либо выполните задокументированное правило отката данных.
До запуска репетируйте, уничтожая целевую среду и собирая её заново из репозитория. Цель - воспроизводимость, поэтому пустая база и свежее окружение покажут больше, чем копия, похожая на продакшен.
После появления спроса репетируйте масштаб и параллельность. Копируйте достаточно типичных данных, чтобы обнаружить медленные индексы и долгие миграции. Если возможно, воспроизводите безопасный трафик чтения, создавайте синтетические записи с известными идентификаторами и убедитесь, что фоновые задачи идемпотентны до разрешения повторных попыток. Задача, которая дважды отправляет письмо, не безвредна лишь потому, что база осталась согласованной.
Отдельно измеряйте паузу записи и всё окно обслуживания. Часто основную массу данных можно скопировать, пока источник работает, а остановить записи только для дельты и проверки. Если репетиция показывает, что дельта не укладывается в допустимое окно, добавьте репликацию или захват изменений. Не выясняйте это, пока клиенты ждут.
После переноса сохраните доказательства: версии источника и цели, временные метки, проверки строк, результаты дымовых тестов, DNS-ответы, решения операторов и время отключения старых сервисов. Эта запись ускоряет отладку и не даёт следующему плану миграции зависеть от чьей-то памяти.
Выбирайте этап по обратимости
Лучший этап миграции тот, где ошибка, которую вы реально можете допустить, ещё обратима. До запуска у продукта мало подтверждений, но почти неограниченная свобода. После появления спроса у продукта есть данные, но он несёт состояние, которое должно оставаться согласованным весь перенос.
Я использую шесть проверок для решения:
- Переносите до запуска, если известное ограничение по соответствию требованиям, владению, экспорту, хостингу или архитектуре блокирует намеченный релиз.
- Оставайтесь и запускайтесь, если платформа отвечает текущим нуждам, а команда в противном случае мигрировала бы лишь из тревоги.
- Переносите после появления спроса, если измеренное использование выявило ограничение и вы можете отрепетировать непрерывность идентичности, данных и трафика.
- Отложите перенос, если не можете экспортировать восстанавливаемую базу, контролировать домен, перечислить секреты или определить владельца записи.
- Предпочтите постепенное отделение, если аутентификация или данные могут временно остаться, пока вычисления и хостинг переезжают.
Lovable, Bolt, v0 и Replit могут создавать проекты, переносимость которых зависит от выбранных сервисов, тарифа и кода, сгенерированного в конкретный момент. Изучите реальный репозиторий и элементы управления аккаунтом. Категория поставщика не отвечает, можно ли перенести именно ваши хеши паролей, расширения базы, файлы или настройки развёртывания.
Если вы выбираете новую среду разработки через чат, контроль планирования и отката снижает стоимость разделения переноса на проверяемые изменения. Koder.ai поддерживает экспорт исходников, развёртывание и хостинг, пользовательские домены, снимки и откат. Команда может включить эти проверки владения в план миграции, не привязывая советы статьи к одной платформе.
Заложите бюджет на миграцию до запуска, даже если решите остаться. Держите исходники под своим контролем, версионируйте схему, документируйте контракт окружения и репетируйте восстановление. Пока приложение небольшое, это стоит гораздо меньше и сохраняет возможность переехать, когда спрос даст причину, а не кризис.
Если команда не может выполнить это восстановление сегодня, переносимость остаётся намерением, а не свойством приложения.
FAQ
Стоит ли переносить сгенерированное приложение до запуска?
Переносите приложение до запуска, если текущая среда не отвечает известному требованию к владению, хостингу, расположению данных или сопровождению. Если платформа подходит для релиза, а продукт всё ещё меняется каждый день, ограниченный запуск может дать больше знаний, чем ранний перенос инфраструктуры.
Рискованно ли переносить приложение, у которого уже есть пользователи?
Да. Во время переноса должны оставаться согласованными учётные записи, записи в базе, файлы, обратные вызовы и запланированные задачи. Риск становится управляемым, если провести репетицию на типичных данных, назначить один источник истины для записей и зафиксировать последний безопасный момент для отката.
Можно ли перенести хеши паролей к новому провайдеру аутентификации?
Только если целевая система принимает точно тот алгоритм хеширования и параметры, которые использует источник. Иначе временно сохраните прежний сервис идентификации или организуйте контролируемый сброс паролей. Никогда не преобразуйте хеши так, будто это обычные зашифрованные пароли.
Нужно ли пользователям войти заново после миграции?
Часто да, особенно если новый стек аутентификации не умеет безопасно проверять старые сессионные cookies. Ясная просьба войти снова лучше хрупкого слоя совместимости, который принимает состояние сессии, которое никто не может полностью проверить.
Как перенести рабочую базу данных без потери записей?
Используйте репликацию или захват изменений, либо остановите запись для финального копирования дельты и сверки. Согласованный снимок отражает один момент времени, поэтому всё равно нужно обработать коммиты, сделанные после начала снимка.
Какой должна быть длительность простоя при миграции?
Это должна определить репетиция. Отдельно измерьте остановку очередей, финальную дельту данных, проверку, переключение DNS и дымовые тесты, затем объявите окно с запасом на самый долгий измеренный прогон.
Когда снижать DNS TTL перед переключением?
Снизьте TTL за несколько дней до переключения и подтвердите ответ авторитетного DNS-сервера: резолверы могут хранить старое значение, пока не истечёт прежний TTL. Держите прежнее развёртывание работоспособным в период перекрытия, не рассчитывая на мгновенное переключение во всём мире.
Стоит ли рефакторить сгенерированный код во время миграции?
Меняйте код, который мешает независимой сборке, тестированию, проверке безопасности или эксплуатации. Масштабные обновления фреймворка и косметические переписывания оставьте на потом: вместе с переносом инфраструктуры они затрудняют поиск причины сбоев.
Можно ли откатиться, просто направив домен на старый хост?
Только до того, как целевая система начала принимать записи, либо если есть проверенный способ воспроизвести эти записи в источнике. Когда базы разошлись, одной сменой DNS можно потерять данные, и это не полноценный откат.
Что нужно экспортировать из Lovable, Bolt, v0 или Replit?
Экспортируйте полный исходный код и определите, где находятся база данных, пользователи, файлы, секреты, задачи, настройки домена и конфигурация развёртывания за пределами репозитория. Точные возможности зависят от проекта и тарифа, поэтому проверьте активы в своём аккаунте, а не полагайтесь на общее сравнение платформ.