Как опубликовать сайт, созданный ИИ: хостинг, домен и деплой в 2026
Вы собрали сайт в Codex, Claude Code, Cursor, Lovable или другом AI-инструменте. На компьютере он работает, но как дать ссылку другому человеку? Локальный предпросмотр ещё не означает, что проект доступен в интернете.
Чтобы выложить сайт в интернет, нужно определить его тип, выбрать хостинг, загрузить исходники или сборку, получить публичный адрес и проверить работу. Для приложения с сервером и базой данных потребуется дополнительная настройка.
Самый короткий путь выглядит так:
Готовый проект → GitHub → хостинг → публичная ссылка → свой домен (по желанию) → проверка у других пользователей.
Разберём два маршрута: React/Vite → Cloudflare Pages и сервер с PostgreSQL → Railway. Также — цены, домен, HTTPS, безопасность и ошибки. Проверено по официальной документации 11 октября 2026 года. Тарифы и интерфейсы могут меняться. Иллюстрации — поясняющие схемы, а не скриншоты сервисов.
Почему сайт работает у вас, но не открывается у других
У сайта, созданного с помощью нейросети, может быть сразу три разных адреса. Они не равнозначны.
http://localhost:3000 или http://127.0.0.1:5173
Локальный сервер работает на вашем компьютере. Можно ли отправить пользователям? Нет: чужой браузер не подключится к вашему localhost.
Ссылка предпросмотра внутри AI-сервиса
Среда разработки показывает результат; иногда предлагает отдельную общедоступную ссылку. Можно ли отправить пользователям? Только после проверки доступа, срока жизни ссылки и того, где хранятся данные.
https://my-project.pages.dev или домен вашего проекта
Сайт опубликован на интернет-хостинге. Можно ли отправить пользователям? Да, если адрес публичный и все необходимые сервисы работают.
Деплой — публикация версии приложения на хостинге. Хостинг хранит файлы или запускает сервер, а домен (example.com) помогает найти его в интернете.
Что именно вы создали: три типа проектов
Способ размещения зависит от устройства проекта, а не от того, какой нейросетью вы его сделали.
1. Статический сайт без собственного сервера
Портфолио, лендинг или страница мероприятия: index.html, CSS, JavaScript, изображения. Хостинг отдаёт посетителям готовые файлы, не запуская ваше серверное приложение.
Подойдут: GitHub Pages, Cloudflare Pages, Netlify. Если форма отправляет данные во внешний сервис, этот сервис нужно отдельно настроить.
2. Frontend-приложение со сборкой
React, Vue или Svelte со сборкой через Vite: в проекте есть package.json, а npm run build обычно создаёт папку dist/.
Статический хостинг подойдёт, если собственный постоянно работающий backend не нужен. Внешний API возможен, но он должен быть опубликован отдельно.
Next.js — особый случай. Статический экспорт можно разместить на Pages. А серверный рендеринг, API-маршруты и серверные действия требуют совместимого runtime или адаптера. Уточните режим проекта до выбора хостинга.
3. Полноценное приложение с backend и данными
AI-сервис с личными кабинетами, генератор документов или SaaS может состоять из интерфейса, Node.js/Python-сервера, PostgreSQL, авторизации, фоновых задач и внешних API.
Подойдут: Railway, Render либо настроенный VPS. Часто интерфейс, сервер и база размещаются отдельными сервисами. GitHub Pages не запускает Express или FastAPI.
Как определить тип: index.html — признак статики; vite.config.* и package.json — возможный frontend; server.js, app.py, API-маршруты, Prisma и SQL-миграции — признаки серверной части. В монорепозитории могут присутствовать все компоненты.
Где разместить сайт: сравнение хостингов в 2026 году
«Бесплатно» может означать статический хостинг без оплаты, лимит кредитов либо короткий пробный период. Сравнивайте не только цену, но и ограничения.
GitHub Pages
Для чего: Простые статические сайты, документация, портфолио.
Условия: Бесплатно для публичных репозиториев на GitHub Free; собственного серверного кода нет.
Сложность: Низкая.
Cloudflare Pages
Для чего: HTML, React/Vite и другие статические сборки; небольшие функции при отдельной настройке.
Условия: Free: до 500 сборок в месяц; ограничения функций и файлов следует проверять отдельно.
Сложность: Низкая.
Netlify
Для чего: Статические сайты, frontend и функции.
Условия: Free за $0 с лимитом 300 кредитов в месяц; учитываются публикации, трафик и вычисления.
Сложность: Низкая.
Vercel
Для чего: Frontend, React/Next.js и поддерживаемые серверные функции.
Условия: Hobby бесплатен, только для личного некоммерческого использования; лимиты ресурсов.
Сложность: Низкая–средняя.
Render
Для чего: Статика, серверы Node.js/Python, тестовые базы.
Условия: Free web service засыпает после 15 минут без активности; бесплатная PostgreSQL истекает через 30 дней.
Сложность: Средняя.
Railway
Для чего: Backend, приложения с PostgreSQL, несколько сервисов.
Условия: Trial: до 30 дней или $5; затем Free с $1 кредита в месяц. На Free после trial собственные домены не включены.
Сложность: Средняя.
VPS у выбранного провайдера
Для чего: Нестандартный backend, сложные процессы, полный контроль.
Условия: Обычно оплачивается отдельно; ОС, безопасность, обновления, HTTPS и резервные копии — ваша ответственность.
Сложность: Высокая.
Примечание: Cloudflare рекомендует начинать новые проекты с Workers. Ниже разобран конкретный маршрут публикации статической React/Vite-сборки через Pages, который по-прежнему поддерживается. Для full-stack сначала проверьте требования к среде выполнения.
Как выбрать без лишней теории:
HTML-лендинг: GitHub Pages или Cloudflare Pages.
React/Vite без сервера: Cloudflare Pages.
Next.js с серверными функциями: совместимый хостинг; проверьте условия Vercel.
API, PostgreSQL, регистрация: Railway или Render.
Сложная архитектура и полный доступ: VPS при наличии опыта администрирования.
Дополнительные расходы: домен, база, хранение файлов, трафик и вызовы внешних API, включая AI-модели. Бесплатная публикация интерфейса не делает бесплатной генерацию ответов нейросетью.
Регистрация, оплата и доступность зависят от страны и аккаунта. Перед запуском проверьте возможность регистрации и оплаты для своего региона.
Пошагово: публикуем React/Vite через GitHub и Cloudflare Pages
Пример: созданное AI React/Vite-приложение запускается через npm run dev. Оно не использует собственный backend; нужен публичный URL. Ниже — путь через GitHub и Cloudflare Pages.
Шаг 1. Проверьте, что проект вообще собирается
В корне проекта найдите package.json и раздел scripts: у Vite обычно есть команда build.
В терминале в корне проекта выполните:
npm install
npm run buildПри наличии package-lock.json для воспроизводимой установки обычно подходит npm ci. Для pnpm и yarn используйте соответствующий менеджер пакетов.
Результат: сборка проходит без ошибок и появляется dist/ с index.html и ресурсами. Это необходимая, но ещё не окончательная проверка.
Если сборка падает, сначала изучите ошибку и попросите агента устранить её. Проверьте версию Node.js, зависимости, импорты и TypeScript.
Шаг 2. Поместите исходники в GitHub
1. Создайте репозиторий на GitHub. Для Cloudflare Pages он может быть приватным; не путайте это с условиями GitHub Pages на GitHub Free.
2. Перед загрузкой исключите из Git файлы с секретами (.env), node_modules/, личные данные и базы; проверьте .gitignore.
3. Загрузите исходники через GitHub Desktop, Git или Add file → Upload files.
4. Убедитесь, что в репозитории есть package.json, исходники и файл блокировки зависимостей.
Если вы уже используете Git в рабочей папке, команды могут выглядеть так:
git add .
git commit -m "Prepare site for deployment"
git pushКоманды предполагают, что репозиторий уже подключён. Перед git add . проверьте список файлов. Попавший в историю секрет нужно отозвать и заменить, а не просто удалить файл.
Шаг 3. Подключите GitHub к Cloudflare Pages
1. Откройте Cloudflare → Workers & Pages.
2. Выберите Create application → Pages → Connect to Git, как описано в руководстве Cloudflare.
3. Авторизуйте GitHub и выберите репозиторий; ограничьте выдаваемый доступ.
4. Выберите производственную ветку, обычно main.
Теперь самое важное: настройки сборки.
Framework preset: Vite или предложенный совместимый пресет, если он есть.
Build command: npm run build.
Build output directory: dist.
Root directory: Корень репозитория, если проект лежит там.
Production branch: main, если именно она основная.
Для типового Vite эти значения приведены в документации Cloudflare. Если проект лежит в frontend/ или собирается не в dist/, измените настройки.
Укажите необходимые переменные окружения. Не помещайте пароли и API-секреты в frontend: используемые в коде переменные с префиксом VITE_ доступны в клиентской сборке.
Шаг 4. Запустите публикацию и получите ссылку
Нажмите Save and Deploy. В Deployments появятся журнал сборки и статус публикации.
Когда публикация завершится успешно, появится адрес вида:
https://your-project.pages.dev
Это уже интернет-адрес, а не локальный localhost. Название и точный URL выдаёт Cloudflare; пример выше — условный.
Откройте адрес в приватном окне или на другом устройстве. Проверьте стили, изображения и прямой переход на вложенный URL вроде /profile. Cloudflare Pages обрабатывает SPA-маршруты, если в корне сборки нет собственного 404.html.
Шаг 5. Проверьте главное действие пользователя
Пройдите главное действие пользователя: отправьте форму, выполните запрос, сохраните и снова откройте запись. При ошибке изучите браузерные Console и Network. Убедитесь, что API не указывает на localhost.
Шаг 6. Обновляйте сайт через репозиторий
После подключения GitHub изменения в основной ветке обычно вызывают автоматическую сборку и публикацию. Для рискованных правок используйте preview и сохраняйте возможность вернуться к рабочей версии.
Если проект состоит только из HTML/CSS/JS: команду npm run build запускать не нужно. Укажите директорию с index.html; для простого HTML документация Cloudflare предлагает exit 0. Есть и отдельный Direct Upload без Git, но метод нельзя бесшовно переключить после создания проекта.
Если у приложения есть сервер и PostgreSQL: другой маршрут
Если AI создал React-интерфейс, Express API и PostgreSQL, одного dist/ мало: нужны запущенный сервер и подключённая база.
Railway позволяет разместить их внутри одного проекта. Рассмотрим Node.js/Express; у Django, Next.js и других стеков команды отличаются.
1. Подготовьте сервер к запуску вне компьютера
У сервера должна быть production-команда (npm start, если она предусмотрена). На Railway приложение должно слушать порт из переменной PORT:
const port = process.env.PORT || 3000;
app.listen(port, "0.0.0.0");Это пример, а не код для вставки в любой проект. Проверьте, что сервер не привязан только к 127.0.0.1, и не храните секретные API-ключи в frontend.
2. Создайте проект Railway и подключите GitHub
На Railway выберите New Project → Deploy from GitHub repo, подключите репозиторий. Проверьте команды Build и Start, особенно если проект находится в подпапке.
3. Добавьте PostgreSQL и подключите переменную
Добавьте в проект базу через + New / Database → PostgreSQL, затем в разделе Variables серверного сервиса задайте ссылку на её адрес:
DATABASE_URL=${{Postgres.DATABASE_URL}}Это ссылочная переменная Railway, а не настоящий пароль. Имя Postgres зависит от имени вашего сервиса. Значение DATABASE_URL должно оставаться на сервере.
Миграции схемы БД выполняйте по инструкции вашего стека. Не запускайте очистку или сброс схемы на реальных данных; сначала создайте резервную копию и проверьте план восстановления.
4. Настройте публичный адрес и проверьте сервер
После успешного деплоя откройте Settings → Networking → Public Networking → Generate Domain. Проверьте runtime logs и ответы API. Endpoint /health полезен для проверки готовности новой версии, но не заменяет постоянный мониторинг.
Проверьте регистрацию, сохранение данных и права доступа. Если frontend развернут отдельно, укажите действующий адрес API и настройте разрешённые источники запросов.
Railway Free: после пробного периода до 30 дней с $5 разового кредита остаётся $1 ежемесячного кредита; собственный домен на Free после trial недоступен. Для него смотрите Hobby и актуальные тарифы Railway.
Когда лучше использовать Render или VPS
Render размещает backend, но бесплатный web service засыпает после 15 минут без активности, а бесплатная PostgreSQL действует 30 дней. Такой тариф больше подходит для прототипов, чем для постоянно доступного продукта.
VPS требует самостоятельно настроить сервер, HTTPS, обновления и резервное копирование. Начинающему ради лендинга это обычно не нужно.
Как подключить свой домен и HTTPS
Адрес *.pages.dev или *.railway.app подходит для тестов. Собственный домен — удобное имя (example.com), приобретаемое отдельно от хостинга.
DNS указывает, куда обращаться по имени; HTTPS шифрует соединение с сайтом при наличии действительного TLS-сертификата.
Домен для Cloudflare Pages: рабочий порядок
1. Убедитесь, что сайт открывается на *.pages.dev.
2. В Workers & Pages → проект → Custom domains → Set up a domain добавьте нужное имя.
3. Для корневого домена (example.com) подключите зону к Cloudflare и установите назначенные nameservers. Для поддомена (www.example.com) при внешнем DNS создайте CNAME на *.pages.dev вашего проекта; при DNS Cloudflare запись обычно создаётся автоматически.
4. Дождитесь подтверждения домена и TLS-сертификата, затем откройте https://ваш-домен.
5. Для www и адреса без www при необходимости настройте оба имени и перенаправление.
Порядок описан в документации Cloudflare по доменам. При смене nameservers заранее перенесите нужные DNS-записи, включая MX и TXT для почты: иначе можно нарушить работу уже подключённых сервисов.
Сначала добавьте домен в Pages, потом изменяйте DNS. Один CNAME без привязки в панели Cloudflare может давать ошибку 522.
Изменения DNS распространяются не мгновенно. Сверяйте записи с инструкцией хостинга; не пытайтесь обойти проблемы сертификата отключением HTTPS.
На Railway при добавлении Custom Domain следуйте инструкции сервиса: нужны выданные записи CNAME и TXT; TLS-сертификат управляется автоматически. Доступность собственного домена зависит от тарифа.
Что попросить у AI-агента перед деплоем
Вместо просьбы «выложи всё» поручите агенту конкретную проверку. Эти запросы подходят для AI-инструмента с доступом к вашему коду.
Промпт 1. Определить подходящий хостинг
Проверь мой проект без изменения файлов: frontend, backend, база данных, API, фоновые задачи, хранение файлов, команды сборки и запуска. Объясни, возможен ли статический хостинг или нужен сервер. Сошлись на конкретных файлах; не выдумывай результаты проверок.
Промпт 2. Подготовить проект к публикации
Подготовь проект к production: проверь сборку,
.gitignore, секреты, переменные окружения, серверный порт, авторизацию, доступ к данным и ошибки. Сначала покажи план, затем внеси необходимые изменения и проверь их локально. Не публикуй проект и не выполняй миграции реальной базы без моего подтверждения.
Промпт 3. Разобраться с неудачным деплоем
По журналу и описанию ошибки установи вероятные причины, отделяя факты от гипотез. Укажи безопасную проверку и минимальное исправление. Не отключай защиту и не удаляй данные. Если информации мало, уточни, какие журналы нужны. [Вставлю логи без ключей и персональных данных.]
Безопасность: что обязательно проверить до первого пользователя
Успешная сборка не означает безопасный запуск. До первого пользователя проверьте следующее.
Секреты. Не храните пароли, API-ключи, токены платежей и DATABASE_URL в клиентском коде или Git. На Vite переменные VITE_* доступны в собранном frontend. Утёкшие ключи нужно отозвать и заменить.
Доступ к данным. Проверяйте авторизацию на сервере: скрытая кнопка не защищает чужие документы. Ограничьте права базы и сервисных ключей.
Тестовые данные. Уберите стандартные пароли, демонстрационные административные аккаунты, опасные debug-маршруты и тестовые данные.
Бэкапы. Создавайте копии базы и пользовательских файлов, проверяйте восстановление. Не храните единственную копию на временном диске контейнера.
Мониторинг и расходы. Настройте журналы ошибок, проверку доступности, оповещения и лимиты вызовов AI API, чтобы злоупотребления не привели к неожиданному счёту.
Откат. Сохраняйте рабочую версию и резервную копию перед миграцией. Откат приложения сам по себе не отменяет изменений данных.
Если вы обрабатываете персональные данные или платежи, дополнительно проверьте применимые требования и проведите специализированную оценку безопасности.
Частые ошибки при публикации: что делать, если сайт не работает
Симптом — ещё не диагноз. Сначала изучайте build logs, runtime logs и запросы браузера.
При деплое написано Build failed
Возможная причина: Не та версия Node, отсутствует пакет, ошибка TypeScript, неверная команда.
Проверка: Откройте build logs; воспроизведите npm run build локально; сравните менеджер пакетов и версию Node.
На главной странице 404 Not Found
Возможная причина: Неправильная папка публикации или нет index.html.
Проверка: Проверьте build output directory и наличие index.html в итоговой сборке.
Главная открывается, а /profile после обновления даёт 404
Возможная причина: Ошибка маршрутизации SPA либо конфликт с файлом 404.html.
Проверка: Проверьте прямое открытие вложенного URL и правила обработки маршрутов на выбранном хостинге.
Интерфейс есть, но данные не загружаются
Возможная причина: Frontend обращается на localhost, неправильный API URL, CORS или недоступный backend.
Проверка: Откройте DevTools → Network, найдите адрес запроса, код ответа и журналы API.
500 / Application failed to respond
Возможная причина: Ошибка запуска сервера, отсутствующая переменная, неверный порт, сбой приложения.
Проверка: Посмотрите runtime logs, команду запуска, PORT и результат healthcheck.
Ошибка доступа к базе
Возможная причина: Неверный DATABASE_URL, нет схемы после миграции, сетевые ограничения или права.
Проверка: Проверьте серверные переменные, состояние БД и журнал приложения; не публикуйте строку подключения.
Домен не открывается, хотя служебный URL работает
Возможная причина: Ошибка DNS, домен не добавлен в панель, ещё не выдан сертификат.
Проверка: Сверьте записи DNS с инструкцией хостинга, статус Custom domains и HTTPS.
После обновления виден старый интерфейс
Возможная причина: Сбой новой сборки, кэш браузера или CDN, публикация не той ветки.
Проверка: Проверьте активный deployment, commit и поведение в приватном окне.
Не «исправляйте» ошибки отключением HTTPS, авторизации или открытием базы всему интернету. CORS не заменяет авторизацию и не исправляет неправильный адрес API.
Чек-лист: готов ли проект к публичному запуску
До публикации:
Определён тип проекта и выбран хостинг.
Сборка и production-запуск проверены.
Секреты отсутствуют в репозитории и клиентских файлах.
Доступ к данным и миграции проверены, бэкапы готовы.
Тестовые аккаунты и опасная отладка убраны.
Есть план мониторинга, расходов и отката.
После публикации:
Публичный HTTPS-адрес работает с другого устройства.
Главная и внутренние страницы открываются напрямую.
Стили и интерфейс работают на телефоне.
Регистрация, формы и основное действие работают.
Нет запросов на
localhostи критических ошибок.DNS, сертификат, мониторинг и восстановление данных проверены.
Попросите человека, не участвовавшего в разработке, открыть сайт и выполнить одно действие без подсказок. Это полезнее, чем оценивать релиз только в собственном браузере.
Что делать после того, как сайт заработал
Если проект уже работает, покажите его на Vibeus: добавьте публичную ссылку, опишите решаемую задачу и попросите обратную связь. Для публикации нужен аккаунт. О дальнейшем продвижении — в отдельной статье «Где продвигать AI-приложение» (на английском).
Частые вопросы
Можно ли бесплатно выложить сайт, который сделала нейросеть?
Да. Для статического сайта и небольшого frontend есть бесплатные варианты, включая Cloudflare Pages и GitHub Pages. Сервер, база, трафик и AI API могут потребовать оплаты.
Нужен ли GitHub для публикации сайта?
Нет. Некоторые сервисы позволяют загрузить готовые файлы вручную, а AI-конструкторы могут предлагать собственную публикацию. GitHub удобен для истории изменений и автоматического обновления. Приватные репозитории поддерживаются не на всех бесплатных тарифах, поэтому проверьте условия выбранной платформы.
Как опубликовать сайт из Cursor, Codex или Claude Code?
Способ зависит от кода. React/Vite без backend публикуют как статическую сборку. Для Express, FastAPI, серверного Next.js и базы данных нужен совместимый серверный хостинг.
Можно ли опубликовать сайт без покупки домена?
Да. Cloudflare Pages выдаёт *.pages.dev, Railway — служебный адрес. Свой домен необязателен для первого запуска.
Почему сайт на localhost не открывается с другого телефона?
localhost указывает на устройство, где открыт адрес. Другой телефон не подключится к вашему компьютеру по этому адресу. Для постоянного доступа из интернета нужен публичный адрес приложения; доступ внутри одной локальной сети настраивается отдельно.
Если я изменю проект, нужно ли снова покупать хостинг?
Нет. Обычно код обновляется в существующем проекте, а хостинг заново выполняет сборку. Но сборки, трафик и вычисления могут расходовать лимиты, а изменение серверной части иногда требует миграции данных.
Что делать, если AI-агент говорит, что деплой успешен, но сайт не работает?
Попросите ссылку на deployment и журналы; проверьте публичный адрес в другом браузере, работу API и основной сценарий. Слова агента не заменяют проверку.
Итого: определите архитектуру, разместите frontend или backend на подходящем хостинге, настройте домен и проверьте работу из чужого браузера.