Руководство
Как развернуть веб-приложение в облаке: план от кода до запуска
Обновлено · 7 мин чтения
Веб-приложение разворачивают в семь действий: привести репозиторий в порядок, подключить GitHub, задать переменные окружения, добавить базу данных, привязать домен, проверить логи и заранее продумать откат. На DADA Cloud все семь делаются в консоли, а после подключения репозитория каждый push в рабочую ветку запускает сборку и выкатку сам.
Шаг 1 - Подготовьте репозиторий
От репозитория нужны три вещи: понятная сборка, один порт и конфигурация снаружи кода.
Если в корне лежит Dockerfile, сборка идёт по нему, а порт платформа берёт из первой директивы EXPOSE. Без Dockerfile платформа определяет фреймворк сама: в документации названы Next.js, FastAPI, Spring Boot, Django и Go. Если определить не удалось, порт по умолчанию будет 8080, а фреймворк придётся выбрать вручную. Для монорепозитория есть поле корневой папки.
Приложение должно слушать порт, который вы укажете при подключении. Остальное берите из 12-factor: адрес базы, ключи и режим работы читайте из переменных окружения, секреты не храните в репозитории, логи пишите в стандартный вывод. Всё, что должно пережить перезапуск, держите в базе данных или на постоянном томе, файлы внутри контейнера постоянными не считайте.
Шаг 2 - Подключите GitHub
В проекте откройте список приложений, нажмите Deploy application и выберите карточку From GitHub (названия кнопок даны по документации, в русском интерфейсе они могут отличаться). При первом подключении разрешите GitHub-приложению DADA Cloud доступ к репозиториям. Приватные репозитории в списке помечены замком.
На странице настройки задайте:
- имя приложения: строчные буквы, цифры, дефисы;
- фреймворк, если автоопределение ошиблось;
- порт и профиль ресурсов: small, medium или large;
- рабочую ветку и корневую папку;
- автодеплой: он включён по умолчанию.
Нажмите Deploy и смотрите лог сборки на этой же странице, он идёт потоком. Если сборка упала, исправьте код и сделайте push или нажмите Deploy на вкладке выкатов: платформа соберёт текущий HEAD ветки. Пересобрать именно упавший коммит нельзя.
Ограничения. Один репозиторий связывается с одним приложением, автодеплой работает для одной рабочей ветки, а окружение в проекте одно. Превью-окружений для pull request нет, поэтому проверку гоняйте в CI до слияния. На окружениях с собственным сервером такой деплой недоступен. Подробности: деплой из GitHub и сборки и выкатки.
Шаг 3 - Задайте переменные окружения
Переменные задаются в настройках приложения. У каждой есть область (сборка, выполнение или обе) и флаг секрета. Значения секретов в таблице маскируются, а через MCP инструмент listEnvVars прочитать их нельзя совсем.
Внесите то, без чего приложение не стартует: ключи внешних API, режим работы, адреса сервисов. Переменную, которая нужна при сборке (например, публичный адрес API для фронтенда), помечайте областью сборки или обеими, иначе в момент сборки её не будет. DATABASE_URL вручную вносить не надо, он появится на следующем шаге. После изменения проверьте по логам, что приложение запущено с новым значением.
Шаг 4 - Добавьте базу данных PostgreSQL
Создайте базу в разделе баз данных: нужны имя ресурса и имя базы. Если в окружении ровно одно приложение, база привяжется к нему сама, и DATABASE_URL запишется в его переменные автоматически. Если приложений несколько, выберите нужное при создании. То же делает MCP-инструмент createDatabase.
Коротко о базе. Это управляемый PostgreSQL 17.5 на общих серверах: версию, размер экземпляра и диска выбрать нельзя, суперпользователя нет, расширения включает платформа. Подключение идёт через PgBouncer, в строке стоит sslmode=require. У каждой базы есть лимит соединений и квота на хранилище: при 80% платформа предупреждает, при 100% база переходит в режим только для чтения. Конкретные значения смотрите в консоли. Резервные копии работают по расписанию (раз в час, в сутки или в неделю) и хранятся 14 дней. Подробнее: облачные базы данных и страница баз.
Миграции удобнее запускать из самого приложения при старте: схема и код выкатываются вместе. Если запускаете их с компьютера, сначала проверьте, что строка подключения доходит из вашей сети: из разных стран мы это не проверяли.
Шаг 5 - Подключите домен и HTTPS
Сначала подтвердите, что домен ваш. В разделе доменов добавьте корневой домен, например example.com, без https:// и без поддомена. Платформа выдаст TXT-запись: добавьте её у регистратора и нажмите Verify. Проверка ручная, при необходимости нажмите через несколько минут ещё раз. После подтверждения доступны корень и все поддомены.
Затем привяжите имя к приложению: в настройках приложения откройте вкладку доменов, введите app.example.com и нажмите Attach. Консоль покажет DNS-подсказку с типом записи и значением, берите значение только из неё. Сертификат Let's Encrypt выпускается автоматически, как только DNS начинает указывать на платформу, и продлевается сам.
Зону DNS можно делегировать платформе по NS-записям и вести записи (A, AAAA, CNAME, MX, TXT, NS, SRV, CAA) в консоли. Привязку домена к приложению агент через MCP сделать не может, это шаг в консоли. Подробности в документации по доменам.
Шаг 6 - Проверьте логи и первые запросы
Откройте адрес по HTTPS и пройдите главный сценарий руками: страница, вход, запись в базу, чтение из неё. Затем:
- На вкладке выкатов убедитесь, что последняя выкатка помечена как текущая, а приложение в статусе Healthy.
- Прочитайте логи за время запуска: ошибки подключения к базе, пропущенные переменные, неверный порт.
- Посмотрите CPU и память на спокойной нагрузке. Новое приложение стартует с минимального размера.
- При необходимости настройте оповещения. Каналы Telegram, Email и Webhook описаны в документации по мониторингу, мы проверили их только по документации.
Платформа сама шлёт письмо, если приложение застряло в цикле перезапусков или том заполнился на 85%.
Шаг 7 - Подготовьте откат
Каждая выкатка хранится как неизменяемый образ. На вкладке выкатов любую прошлую выкатку можно вернуть кнопкой Rollback: платформа развернёт тот же образ, и откат не ждёт новой сборки. Конфигурация приложения лежит в git, так что её история тоже служит копией.
Откат возвращает код, данные он не трогает. Миграции, которые удаляют или переименовывают колонки, делайте в два релиза: сначала добавьте новое, а старое уберите, когда прошлая версия уже не понадобится. Иначе возвращённый код встретит схему, которую не понимает. О копиях баз и томов читайте в руководстве про резервное копирование.
Если git не нужен или образ уже готов
Без git загрузите архив проекта размером до 100 МиБ: платформа определит фреймворк и порт и соберёт образ. Подробности на странице деплоя без git.
Готовый образ из реестра разворачивается карточкой From image: образ, порт, число реплик от 1 до 10 и профиль small, medium или large. Новую версию выкатывают командой Deploy Image с новым тегом. Число реплик задаётся при создании, поэтому перед расчётом на несколько экземпляров прочитайте материал про масштабирование. Из CI доступен запрос POST /api/v1/deploy с токеном и deploy hooks.
Сколько это стоит
Тарифов и подписки нет. Баланс пополняется, минимальное пополнение 100 рублей, а списание идёт раз в сутки только за то, сколько приложение реально проработало. Цены на странице цен указаны за месяц круглосуточной работы. На 10 ноября 2026 там три ориентира: лендинг от 22 рублей в месяц, бот от 22 рублей в месяц, сервис от 77 рублей в месяц. Каждое новое приложение стартует с минимального размера. Вызовы AI-моделей оплачиваются отдельно, по использованию.
Новому аккаунту без пополнения даётся 72 часа пробного периода: одно приложение минимального размера и одна база. Потом приложения останавливаются до пополнения, данные сохраняются. Точные ставки и лимиты на число приложений, баз и доменов показывает консоль: отсутствие лимитов мы не обещаем.
Частые вопросы
Нужен ли Dockerfile?
Для распространённых фреймворков нет, платформа определяет их сама. Если Dockerfile в корне есть, сборка идёт по нему, и порт берётся из EXPOSE.
Можно ли развернуть приложение без GitHub?
Да. Загрузите архив до 100 МиБ или укажите готовый образ из реестра. В первом случае платформа определит фреймворк и порт, во втором вы задаёте порт и профиль сами.
Как откатить неудачный релиз?
На вкладке выкатов приложения выберите прошлую выкатку и нажмите Rollback. Образ уже собран, поэтому пересборки нет. Схему базы откат не меняет.
Есть ли окружения для проверки pull request?
Нет. Превью-окружений платформа не создаёт, окружение в проекте одно. Тесты и проверки запускайте в CI до слияния в рабочую ветку.
Что делать, если сборка падает?
Откройте лог сборки на вкладке выкатов: он идёт потоком. Исправьте причину и сделайте push. Читать логи и пересобирать может и AI-агент, см. руководство про поиск ошибок и релизы с AI-инструментами.