Фронт готов, а форма не работает. Куда деплоить

12 минут чтения

v0, Lovable и Bolt отдают вам фронтенд: то, что рисуется в браузере. Логин, форма заявок, сохранение данных и оплата живут в другом месте, на бэкенде с базой. Статик-хостинг бэкенд держать не умеет. Поэтому фронт уезжает на Vercel или Netlify, а бэкенд и базу везут на Railway, Render или свой сервер.

Разбираю деплой и инфраструктуру в Telegram

Застряли на переезде с Vercel или на первом сервере? Пишите, подскажу.

Написать в Telegram

Почему форма работает на ноутбуке, но молчит на боевом сайте?

Сцена знакомая. Вы собрали сайт в v0 или Lovable, нажали Deploy, открыли ссылку. Кнопки нажимаются, страница красивая. Заполняете форму, жмёте «Отправить». И ничего. Заявка не пришла, в базе пусто, а войти в аккаунт не получается.

Локально всё работало. На проде молчит. Первая мысль: что-то сломалось при деплое. На самом деле не сломалось ничего. Просто уехала только половина приложения, та, которую видно.

То, что отдаёт генератор по умолчанию, это витрина. Файлы, которые браузер показывает: разметка, стили, картинки. Форма на такой витрине нарисована, но за ней пусто. Это как фотография кухни в каталоге: плита есть, а приготовить на ней нельзя.

Что на самом деле отдаёт v0 или Lovable?

Любое приложение это три части, и новичок видит только первую.

Фронт это то, что в браузере: кнопки, формы, текст. Его и генерирует v0.

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

И база. Место, где хранятся данные: заявки, аккаунты, заказы. Отдельная штука со своим адресом. Фронт данные не хранит, он их спрашивает у бэкенда, а бэкенд берёт из базы.

Цепочка простая: браузер просит, сервер думает и достаёт из базы, браузер показывает. Уберите середину и базу, и просить становится некого. Форма «отправилась» в пустоту.

Отсюда два следствия, которые ломают новичку первый деплой. Секрет (ключ от платёжки, пароль к базе) нельзя класть во фронт: всё, что попало в браузер, видно любому, кто откроет в браузере инструменты разработчика (клавиша F12). И запрос формы должен лететь на работающий сервер, а не в статику, которая такого адреса не знает.

Словарь на одну минуту

Статика. Готовые файлы, которые сервер просто отдаёт. Меню, которое уже напечатано. Serverless-функция. Кусочек бэкенда, который просыпается на один запрос и сразу гаснет. Лампочка с датчиком движения. Постоянный сервер. Программа, которая работает круглосуточно. Нужна для чата, бота, живых соединений. Магазин, который не закрывается. База как услуга. Готовая база, где обслуживание берёт на себя провайдер. Квартира с включённым ремонтом.

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

Зачем нужны Vercel и Netlify и чего они не умеют?

Vercel и Netlify это дом для фронта. Запушил код, через минуту он открывается по всему миру, быстро и без возни с сервером. Для лендинга, блога, портфолио или сайта с лёгкими запросами это лучшее место, и часто бесплатное.

Бэкенд они тоже умеют, но только на запрос, через serverless-функции. Это короткий код, который просыпается на одно обращение: принять форму, отправить письмо, сходить к чужому API. Если запрос быстрый, всё хорошо.

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

Ещё одна засада, про которую молчат гайды. На бесплатном тарифе счёт за трафик не ограничен сверху. Был случай, когда обычный статический сайт под внезапным наплывом скачиваний выставил счёт на десятки тысяч долларов. Деньги потом списали по доброй воле, но сам факт стоит знать. Поставьте лимит расходов в настройках: у Vercel это раздел Spend Management, у Netlify похожий потолок на трафик. И ещё одно, важное для нас с вами: карта белорусского или российского банка для платного тарифа этих платформ часто не проходит. Про это ниже.

Где живёт настоящий бэкенд: Railway и Render

Как только нужен постоянно работающий бэкенд и база рядом, начинаются Railway и Render. Тут уже не короткая функция-вспышка. Тут живой процесс, который не гаснет, и база рядом одним кликом, готовая к работе.

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

Render ближе к фиксированной цене: понятно, сколько платишь в месяц, плюс есть отдельные фоновые задачи и расписания. У бесплатного тарифа есть минус. Сервис засыпает после пятнадцати минут тишины и потом просыпается секунд тридцать-шестьдесят. Для боевого сайта так нельзя, для демо терпимо. И бесплатная база у Render через месяц удаляется вместе с данными, держать на ней что-то важное не стоит.

А вот случай пострашнее. AI-агент в чужом проекте однажды за девять секунд снёс боевую базу вместе с бэкапами, потому что бэкапы лежали в том же месте, что и сама база. Урок тут простой, и платформа ни при чём. Бэкап рядом с боевой базой это не бэкап. Где бы вы ни держали данные, копия должна лежать отдельно.

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

Не уверены, где у вас фронт, а где бэк?

Сядем на час, посмотрим ваш проект, разложим на части и решим, что куда деплоить.

Менторская сессия

Когда стоит брать свой сервер вместо платформы?

Свой сервер (VPS) это арендованный компьютер в дата-центре, где вы ставите всё сами. Больше свободы, ниже цена в долгую, но настройка и бэкапы теперь ваша забота.

У меня самого десятки проектов живут именно так: фронт на Vercel, а бэкенд в стороне. Где бэкенд на своём сервере (у меня он в минском hoster.by), где на Hetzner, где на Railway, под задачу по-разному. А часто бэкенда нет вовсе: фронт ходит напрямую в готовые интеграции, и этого хватает. Свой сервер беру, когда проект растёт и хочется контроля и предсказуемого счёта: лишний сервис на нём по сути ничего не добавляет, а на платформе каждый отдельный кусок капает в копилку.

Для белорусов и россиян есть отдельная причина. Карты наших банков на Vercel и Netlify часто не проходят, а сайт на их адресах у части провайдеров может не открываться без VPN. Свой сервер у местного провайдера эту возню снимает сразу. Подробнее про связку с местным хостингом я писал в разборе нейросети из России и Беларуси.

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

Куда деплоить именно ваш случай?

Короткая развилка, по которой можно решить за минуту.

Только лендинг или статика

Сайт-визитка, портфолио, страница из v0 без своего сервера. Деплой на Vercel, Netlify или Cloudflare Pages. Бесплатно, за пару минут.

Фронт плюс лёгкие запросы

Форма, письмо, обращение к чужому API, короткий запрос к базе. Vercel или Netlify плюс база на стороне (Supabase, Neon).

Постоянный бэкенд и база

Бот, живой чат, фоновые задачи, очереди, обработка медиа. Railway, Render или свой сервер, база рядом.

Контроль и экономия в долгую

Много проектов, своя база под нагрузкой, нестандартная сборка. Свой VPS. Готовьтесь администрировать и делать бэкапы.

Самый частый случай у новичка это второй. Лендинг или приложение из Lovable, где есть форма или вход. Фронт уезжает на Vercel, а данные форме нужно куда-то писать. Эту роль берёт база-как-услуга: Supabase или Neon. Готовая база, которую подключаешь к проекту, не поднимая свой сервер. Lovable, кстати, умеет связать вас с Supabase прямо из себя, отдельно сервер настраивать не нужно. А если нужен не разовый запрос, а что-то, что работает между запросами и не выключается (бот, живой чат), это уже третий случай. Тогда вместо функций берут Railway, Render или свой сервер.

Что где живёт: пять платформ на один экран

Если свести всё в одну картинку, разница вот такая.

Vercel, Netlify
Railway, Render, свой сервер

Что хостят

Vercel, Netlify

Фронт и короткие функции

Railway, Render, свой сервер

Живой бэкенд и базу

Постоянный процесс (бот, чат)

Vercel, Netlify

Нет

Railway, Render, свой сервер

Да

Своя база рядом

Vercel, Netlify

Нет, берут на стороне

Railway, Render, свой сервер

Да, одним кликом или ставишь сам

Холодный старт

Vercel, Netlify

У функций есть

Railway, Render, свой сервер

Нет, на платных тарифах

Кто делает бэкапы

Vercel, Netlify

Платформа сама

Railway, Render, свой сервер

Railway и Render сами, на своём сервере вы сами

Карта банка РБ или РФ

Vercel, Netlify

Для платного тарифа часто не проходит

Railway, Render, свой сервер

У местного сервера проходит обычным способом

Порог входа

Vercel, Netlify

Минимальный, нажал и поехал

Railway, Render, свой сервер

Средний у Railway и Render, высокий у своего сервера

Задеплоил, а форма всё равно молчит. Почему?

Если бэкенд вроде есть, а форма всё равно не работает, обычно дело в одном из пяти.

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

Адрес остался локальным. В коде зашит localhost, который работает у вас на машине и мёртв на боевом сайте. Нейросети грешат этим постоянно. Поищите в коде слово localhost и поменяйте на боевой адрес бэкенда.

Браузер заблокировал запрос. Фронт на одном адресе, бэкенд на другом, и браузер не пускает запрос между ними без разрешения с той стороны. Это про CORS. В консоли (та же F12, вкладка Console) будет красная строка со словом CORS, лечится разрешением вашего адреса на бэкенде.

Не прописаны переменные окружения. На платформе забыли завести те же настройки, что были локально: адреса, ключи. Функция стартует, но не знает, куда ходить. Загляните в настройки проекта на Vercel, раздел Environment Variables, и сверьте с локальным файлом.

База открыта всем. У Supabase и похожих есть режим, когда данные доступны без проверки. Удобно для разработки, опасно на проде. Защита называется RLS: в панели Supabase включите Row Level Security и проверьте, что таблицы не открыты публично. Недавнее сканирование сотен тысяч таких приложений нашло тысячи без всякой защиты, часть утекала чужими данными.

Длинный ночной коридор старого здания, тёплые плафоны, в конце приоткрытая дверь со светом
Путь от «работает у меня на ноутбуке» до живого сайта в конце коридора.

С чего начать сегодня

Откройте свой проект и ответьте на один вопрос: есть ли в нём логин, форма с сохранением или оплата. Нет значит это чистый фронт, ему хватит Vercel или Netlify бесплатно, прямо сегодня. Да значит у вас две части, и вторую селите по дереву выше.

И сразу одно защитное действие, пока не забыли: зайдите в настройки проекта на платформе и поставьте лимит расходов. Тридцать секунд, а спасают от того самого счёта-сюрприза. Дальше не стройте «как у больших», возьмите вариант под сегодняшнюю задачу. Остальное подключите, когда упрётесь.

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

Можно ли задеплоить приложение целиком, с фронтом и бэкендом, на Vercel?

Фронт и лёгкие запросы да. Постоянный бэкенд, живые соединения и свою базу под нагрузкой нет: для этого Railway, Render или свой сервер. Часто фронт оставляют на Vercel, а бэкенд с базой выносят отдельно.

Где хостить телеграм-бота?

Боту нужен постоянно работающий процесс, поэтому serverless-платформы вроде Vercel не подойдут. Берите Railway, Render или свой VPS, где процесс живёт круглосуточно.

Нужна ли база данных для сайта?

Если на сайте есть логин, форма с сохранением, заказы или личный кабинет, нужна. Если это лендинг или блог без аккаунтов, можно обойтись без неё.

Почему карта не проходит при оплате Vercel из Беларуси или России?

Эти платформы часто не принимают карты местных банков. Варианты: оплачивать зарубежной картой, либо держать проект на местном хостинге, где оплата проходит обычным способом.

Vercel или Railway, что выбрать?

Зависит от проекта. Чистый фронт и лёгкие запросы Vercel. Постоянный бэкенд с базой Railway. Нередко берут оба сразу: фронт на одном, бэкенд на другом.

Готовая среда вместо сборки руками

AI Workspace: настроенное окружение, где фронт, бэкенд и база уже стоят на своих местах. Не нужно решать, что куда деплоить.

Посмотреть AI Workspace

Деплой пугает, пока кажется, что приложение это одна штука. Как только видишь три части (что в браузере, что на сервере, где данные), вопрос «куда деплоить» отвечается сам. Посмотрите на свой проект и найдите эти три части. Дальше всё встанет на места.

Новые посты на почту

Без спама. Отписка в один клик в любом письме.