Документация по деплою на RelaxDev
Пошаговое руководство по использованию платформы. От создания проекта до настройки базы данных и привязки домена.
Что такое RelaxDev?
RelaxDev — это платформа, которая берёт на себя всю работу по настройке серверов, установке зависимостей и поддержанию работы вашего приложения.
Всё работает «под капотом»: вы просто импортируете код из репозитория, а мы автоматически определяем язык (Node.js, Python, React и т.д.), собираем проект и запускаем его в безопасной изолированной среде.
Мы развиваем платформу для серьёзных систем: разработка и превью — на общих серверах, препрод — на своей изолированной VM команды («+ Admin»), прод — на вашем сервере под управлением панели («Панель Prod»). Подробно — Своя VM и свой сервер.
Новое сначала выходит в бете на relaxnet.pro — сейчас там Bot Lab и MCP-коннектор для ИИ-ассистентов (ниже). Аккаунт, проекты и тариф — общие для обеих панелей.
Быстрый старт
Если у вашего проекта стандартные настройки, развернуть его можно всего в несколько кликов:
- Нажмите кнопку «Добавить проект».
- Выберите нужный репозиторий из подключенного аккаунта GitHub, GitLab, GitFLic или Gitverse.
- Оставьте включенным «Автоопределение стека» — система сама поймет, как собрать приложение.
- Нажмите «Деплой».
Через пару минут платформа завершит сборку, и ваш сайт будет доступен в сети!
Подробная настройка проекта
Для более сложных приложений в окне создания проекта доступно множество ручных настроек.
1Выбор команды
Выберите рабочую область (Team), к которой будет привязан проект. Это полезно для разделения личных проектов и командной работы.
2Репозиторий и Ветка
Укажите нужный репозиторий с исходным кодом и ветку (по умолчанию main или master). Ветку можно изменить в настройках в любой момент.
3Название проекта
Задайте понятное имя. Оно будет использоваться в панели управления и служит основой для системного домена.
4Настройка стека (Сборка)
Автоопределение: платформа сама подберёт команды для запуска (рекомендуется). Свой Dockerfile: выберите эту опцию, если вашему приложению нужна специфическая среда выполнения.
5Переменные окружения (.env)
Безопасное место для ваших секретных ключей, паролей от БД и токенов API. Добавляйте вручную в формате Ключ — Значение.
6Публичный проект и Автодеплой
Публичный проект делает его видимым в общем каталоге платформы. Автодеплой — проект обновляется автоматически при каждом push в выбранную ветку.
Служебные переменные окружения
Часть переменных платформа обрабатывает сама. Задаются в настройках проекта, вкладка «Переменные».
PORT
Контейнеры принимают трафик только на 8080. Платформа проставляет PORT и переменные рантаймов, которые его игнорируют: SERVER_PORT, UVICORN_PORT, FLASK_RUN_PORT, SANIC_PORT. Читайте порт из окружения, а не прибивайте константой — иначе домен вернёт 502.
TG_OPTION=1
Подключает контейнер к сети с глобальным IPv6. Нужен для api.telegram.org, недоступного по IPv4 с наших серверов. Для сервисов без AAAA-записей бесполезен — проверьте командой dig AAAA имя-хоста. Проектам типа «Telegram Bot» не требуется: туннель у них подключается всегда.
WEB_PORT
Публикует HTTP-эндпоинты Telegram-бота наружу. По умолчанию бот работает на long polling и домен отдаёт 404. Значение — порт, который слушает приложение внутри контейнера. Эндпоинты станут доступны из интернета без авторизации, закрывайте их в самом приложении.
RELAXDEV_PROXY_URL
Пускает исходящие запросы через прокси платформы. Нужен, когда внешний API обрывает передачу с наших адресов: соединение принимает часть данных и умирает по таймауту, при том что мелкие запросы к тому же хосту проходят нормально. Платформа проставит контейнеру HTTP_PROXY, HTTPS_PROXY и NO_PROXY в обоих регистрах — Python, Go, axios и curl подхватят их сами. Внутренние адреса (база, Redis, реестр, *.relaxdev.ru) всегда идут напрямую. Адрес прокси — в проекте: «Переменные» → «Webhook / Proxy» → «Получить адрес прокси». Если прокси нужен для одного API, удобнее подключить его точечно — см. «Вебхуки и прокси».
Node с undici читает прокси иначе
Встроенный fetch в Node построен на undici, и переменные окружения прокси он игнорирует. Сюда же относятся серверные запросы Next.js и клиенты вроде @fal-ai/client и openai. Нужен явный диспетчер — установите пакет undici и добавьте в начало приложения:
import { setGlobalDispatcher, EnvHttpProxyAgent } from 'undici';
// Читает HTTP(S)_PROXY и NO_PROXY: база, Redis и *.relaxdev.ru идут напрямую
setGlobalDispatcher(new EnvHttpProxyAgent());В Next.js эти строки помещаются в файл instrumentation.ts в корне проекта. Java переменные тоже не читает — нужен флаг -Djava.net.useSystemProxies=true в JAVA_TOOL_OPTIONS.
Заглушки при сборке
Платформа находит в исходниках обращения вида process.env.ИМЯ и подставляет переменным, которых нет в проекте, строку auto-generated-stub-for-build. Так проект соберётся в любом случае, и это безопаснее, чем держать настоящие ключи в коде. Но заглушка остаётся и в работающем приложении: значение по умолчанию через || не сработает, а числа превратятся в NaN. Не подменяются только NODE_ENV и PORT.
Какие переменные получили заглушку, видно сразу: список с файлом и строкой стоит в начале лога сборки, а на странице проекта появляется баннер «Переменные без значения». Добавьте их во вкладке «Переменные» или уберите лишнее обращение из кода. Серверной переменной хватит обычного редеплоя, а NEXT_PUBLIC_* вшиваются в код браузера и требуют полной пересборки.
Нужен фолбэк — читайте через квадратные скобки: process.env['API_URL'] || 'дефолт'. Такую запись платформа не трогает, и значение по умолчанию сработает. Не подходит для NEXT_PUBLIC_* (Next.js вшивает в браузерный код только запись через точку) и не поможет, если переменные проверяются уже при сборке, например zod или t3-env.
Переезд с Vercel: переменные и база
Переменные — одной вставкой
Выгрузите переменные проекта из Vercel в файл:
npx vercel link npx vercel env pull .env.vercel --environment=production
Вставьте содержимое файла целиком во вкладку «Переменные» — при создании проекта или в готовом — или загрузите сам файл. Кавычки снимаются, служебные VERCEL_* и TURBO_* пропускаются, совпадающие ключи обновляются. Подсказка «Переезжаете с Vercel?» есть прямо в блоке переменных. Значения с пометкой Sensitive Vercel не выгружает — их нужно вписать вручную.
База — по строке подключения
Создайте базу во вкладке «База данных». Если в проекте уже был DATABASE_URL (например, от Neon), он сохраняется как OLD_DATABASE_URL, а на его место встаёт новая база. В блоке «Импорт из другой базы данных» старая строка подставится сама — остаётся нажать «Запустить импорт». Строку можно брать как есть, вместе с пулером: искать DIRECT_URL или адрес без пулера не нужно.
После импорта проверьте данные и удалите из переменных старые строки подключения.
Код под serverless
На Vercel каждая функция живёт отдельно, на RelaxDev приложение работает одним постоянным процессом. Настройки клиента базы под serverless и пулер Neon вроде max: 1 и prepare: false здесь не нужны: с обычным пулом запросы страницы идут параллельно.
Вебхуки и прокси
Во вкладке «Переменные» есть раздел Webhook / Proxy — всё о связи с внешними сервисами. Это два разных направления: вебхук — когда внешний сервис приходит к вам, прокси — когда ваше приложение ходит наружу. Там же карточка TG_OPTION=1 — прямой выход в Telegram по IPv6.
Приёмник вебхуков
Telegram, платёжные системы и другие сервисы из-за границы не всегда стабильно достукиваются до серверов в России. Приёмник даёт постоянный адрес https://hook.relaxweb.ru/r/… на зарубежном сервере: он принимает вебхук и пересылает его в ваш проект по указанному пути, заголовки — без изменений. Пересылать можно только в свой проект.
- Telegram — одной кнопкой. Если в переменных есть токен бота, «Подключить к Telegram» ставит вебхук через приёмник. Видно, куда сейчас смотрит вебхук, сколько обновлений ждёт доставки и последнюю ошибку. Секрет из
TELEGRAM_WEBHOOK_SECRETприходит в заголовкеX-Telegram-Bot-Api-Secret-Token. - У каждого приёмника виден счётчик запросов и ответ проекта на последний из них.
- Адрес утёк — «Сменить адрес»: старый перестанет работать.
Исходящий прокси
Если внешний API не открывается с наших серверов — таймауты, обрыв загрузки файлов, — запросы к нему можно пустить через зарубежный прокси платформы. Адрес — по кнопке «Получить адрес прокси». Прокси принимает соединения только с серверов платформы и работает для HTTPS.
- Точечно (рекомендуем). Добавьте адрес в переменные под своим именем, например
OUTBOUND_PROXY_URL, и используйте его только в нужном запросе. База, Redis и остальной трафик идут напрямую. - На весь проект —
RELAXDEV_PROXY_URL. Платформа выставит контейнеруHTTP_PROXY,HTTPS_PROXYиNO_PROXY(см. раздел о переменных выше).
import { fetch, ProxyAgent } from 'undici';
const proxy = new ProxyAgent(process.env['OUTBOUND_PROXY_URL']);
const res = await fetch('https://api.example.com/...', { dispatcher: proxy });fetch и ProxyAgent берите из одного пакета undici: агент из пакета вместе со встроенным fetch Node может не работать из-за разницы версий. В Python — параметр proxy у клиента httpx.
ИИ-агенты и MCP: Cursor, Claude Code, Codex
Для ИИ-агентов есть готовая инструкция: как подготовить репозиторий к деплою на RelaxDev и как разобрать ошибки сборки — порт 8080, переменные и заглушки, Dockerfile, Telegram-боты, вебхуки и прокси, базы данных, переезд с Vercel. Достаточно дать агенту ссылку.
Что написать агенту
Подготовь проект к деплою на RelaxDev по инструкции https://relaxdev.ru/.well-known/skills/relaxdev-deploy/SKILL.md и перечисли, что мне нужно настроить в панели.
Если сборка упала — вставьте агенту лог из панели и ту же ссылку: в инструкции есть таблица симптомов и причин.
Чтобы агент знал о RelaxDev всегда
- Claude Code — сохраните файл инструкции в проект как
.claude/skills/relaxdev-deploy/SKILL.md: агент подключит его сам, когда речь зайдёт о деплое. - Cursor — сохраните его как правило проекта
.cursor/rules/relaxdev.mdcили добавьте ссылку на инструкцию вAGENTS.md. - Любой агент с доступом в интернет — ссылка в запросе, как в примере выше.
Что агент не сделает за вас
Агент готовит репозиторий: порт, Dockerfile, команды запуска, код под переменные. Переменные окружения, базу, домен и запуск сборки задаёте вы в панели — агент подскажет, что именно добавить. Сборка запускается кнопкой в панели или push в ветку проекта.
Bot Lab и MCP-коннектор — в бете на relaxnet.pro
Bot Lab (Telegram-боты без GitHub: симулятор Telegram, тесты сценариев, деплой в один клик) и MCP-сервер для Claude, Claude Code и Codex — новые возможности, которые мы сначала запускаем в бете платформы — relaxnet.pro. Аккаунт и проекты там общие с relaxdev.ru, тариф один на обе панели. Пока эти функции работают только на relaxnet.pro; позже, скорее всего, появятся и здесь.
Войти нужно на relaxnet.pro — и в браузере, и при подключении коннектора: ассистент откроет вход на relaxnet.pro и попросит разрешить доступ. Через коннектор он создаёт ботов в Bot Lab, пишет код, деплоит, читает логи, прогоняет тесты в симуляторе Telegram, меняет переменные и работает с базой проекта через SQL. Токены не нужны, доступ отзывается в профиле.
- Claude (сайт и приложения) — Настройки → Коннекторы → Добавить пользовательский коннектор, адрес
https://relaxnet.pro/api/mcp. - Claude Code — первая команда ниже, затем в Claude Code введите
/mcpи войдите в браузере. - Codex (терминал и приложение) — две следующие команды: добавить сервер и войти. Затем откройте новый чат — инструменты подгружаются при запуске сессии.
claude mcp add --transport http relaxnet https://relaxnet.pro/api/mcp codex mcp add relaxnet --url https://relaxnet.pro/api/mcp codex mcp login relaxnet
Подробно — Claude, Codex и MCP и Bot Lab на relaxnet.pro.
Для ИИ-ассистентов и поисковых агентов есть и общий контекст о платформе: llms.txt, llms-full.txt и каталог навыков ai-catalog.json.
Git-провайдеры и источники деплоя
Поддерживаемые провайдеры
github.com — подключение, автодеплой по push, приватные репозитории
gitlab.com — покдлючение, автодеплой по push, приватные репозитории
gitverse.ru — российский Git-хостинг, автодеплой, миграция и синхронизация
gitflic.ru — российский Git-хостинг, вход через OAuth, автодеплой, миграция и синхронизация
Смена источника деплоя
Проект может хранить репозитории сразу у нескольких провайдеров (GitHub, GitLab, Gitverse, GitFlic). В настройках проекта — вкладка «Источник деплоя» — можно переключиться на любой привязанный репозиторий без пересоздания проекта. Изменение применяется на следующем деплое.
При смене источника автоматически обновляется активная ветка и иконка провайдера в интерфейсе.
Выбор папки проекта (rootDir)
При создании проекта и в настройках доступен визуальный picker папок репозитория. Поддерживается для GitHub, GitLab, Gitverse и GitFlic.
Удобно для монорепо: деплойте только нужную подпапку (apps/frontend, packages/api и т.п.) без изменения структуры репозитория.
Gitverse — миграция и синхронизация
Платформа поддерживает полный цикл работы с Gitverse — российским git-хостингом. Подключите аккаунт Gitverse в профиле, и в настройках проекта появятся:
Копирует репозиторий из GitHub или GitLab в Gitverse в один клик. Исходный репозиторий остаётся нетронутым.
Обновляет Gitverse-репо последними изменениями из GitHub/GitLab. Запускается вручную кнопкой «Sync» или автоматически при автодеплое.
После миграции можно переключить активный источник деплоя на Gitverse — проект будет деплоиться полностью из российской инфраструктуры.
GitFlic — вход, миграция и синхронизация
GitFlic поддерживается полностью — можно войти на платформу напрямую через аккаунт GitFlic (OAuth), либо привязать его личным токеном в настройках профиля.
В настройках проекта доступен перенос репозитория на GitFlic с GitHub, GitLab или Gitverse — с сохранением истории коммитов и веток. Исходный репозиторий при этом не изменяется.
Автодеплой по push
При создании проекта платформа сама добавляет вебхук в репозиторий — для GitHub, GitLab, GitVerse и GitFlic. Дальше сборку запускает каждый push, нажимать ничего не нужно. Это вебхуки Git-провайдера; приём вебхуков вашим приложением — в разделе «Вебхуки и прокси».
Что происходит после push
- В ветку проекта — сборка и выкат новой версии. В истории деплоев видно автора push и коммит.
- В другую ветку — превью-окружение на отдельном адресе, если превью включены в настройках проекта. Ветку удалили — превью удаляется вместе с ней; если провайдер не прислал событие удаления, превью удалится само через 72 часа.
- Автодеплой выключен — push сборку не запускает, новая версия выкатывается кнопкой «Редеплой».
- Раннеры заняты — сборка встаёт в очередь и стартует, как только освободится место.
Push есть, а сборки нет
- Проверьте, что push был в ветку, выбранную в проекте, и что автодеплой включён.
- В настройках репозитория откройте раздел вебхуков. Там должен быть адрес
https://relaxdev.ru/api/webhook/github(у остальных провайдеров в концеgitlab,gitverseилиgitflic), а последние доставки — без ошибок. - Вебхука нет — значит, у подключённого аккаунта не хватило прав на настройки репозитория или истёк токен. Обновите подключение в профиле или напишите в поддержку.
Сборщики и стеки
Тип сборки определяется при создании проекта по файлам репозитория. Поменять его можно в настройках проекта — изменение применится на следующем деплое.
SSR-приложения: сборка и запуск Node-сервера
фронтенд-приложения: сборка через npm run build
по package.json: команды build и start
FastAPI, Flask, Django, aiohttp — по requirements.txt или pyproject.toml
по go.mod: статический бинарник в маленьком образе
по composer.json, корень сайта — папка public
Maven или Gradle: по pom.xml или build.gradle
статический сайт без сборки, в том числе из AI-конструктора
ваш Dockerfile — для всего остального
Свой Dockerfile
Dockerfile из репозитория используется, только когда тип сборки — Docker. При любом другом типе платформа генерирует Dockerfile сама, а ваш не применяется. Если правки в Dockerfile «не работают», первым делом проверьте тип сборки в настройках проекта.
На время установки зависимостей платформа ставит NODE_ENV=development, чтобы поставились devDependencies. В одностадийной сборке это значение остаётся в образе, и приложение работает в режиме разработки. Делайте multi-stage сборку и задавайте ENV NODE_ENV=production в финальной стадии.
Порт 8080
Трафик приходит в контейнер только на порт 8080. Платформа передаёт его в PORT, а рантаймам, которые PORT не читают, — в SERVER_PORT, UVICORN_PORT, FLASK_RUN_PORT и другие. Слушайте 0.0.0.0 и порт из окружения. После запуска сборщик проверяет, отвечает ли приложение на 8080, и пишет результат в лог сборки: при несовпадении домен отдаст 502.
Telegram-боты
- У проекта типа «Telegram Bot» свой сборщик.
api.telegram.orgс наших серверов доступен только по IPv6, и нужная сеть подключается к боту сама. С переменнойRELAXDEV_PROXY_URLбот вместо этого ходит в Telegram через прокси. - Бот работает на long polling, и запрос к адресу проекта вернёт 404. Чтобы открыть HTTP наружу (вебхук Telegram, мини-приложение), задайте переменную
WEB_PORT— порт, который слушает бот. - Веб-проекту, который сам обращается к Telegram API, добавьте переменную
TG_OPTION=1или пустите запросы к Telegram через прокси.
Prisma
Если в проекте есть Prisma, при сборке выполняется prisma generate, а при сборке с доступом к БД схема применяется командой prisma db push с учётом версии: для Prisma 7 — без флага --skip-generate, которого в ней нет. Если Prisma в проекте нет, сборка её не трогает и не скачивает.
Подсказки после сборки
После неудачной сборки в панели проекта появляется подсказка: что сломалось и как это исправить. Частые ошибки — типы TypeScript, файл не найден в COPY, неверный порт — распознаются сразу, редкие разбирает нейросеть, на это уходит до минуты. После успешной сборки в том же месте показывается список переменных без значения. Полный лог сборки — в истории деплоев.
Параметры сборки
Нажмите стрелку рядом с кнопкой «Редеплой» — откроется панель параметров.
Деплой конкретного коммита или ветки
Вставьте SHA коммита, ссылку на Git commit или имя ветки. Платформа выкатит именно эту версию. Удобно для отката или тестирования фичи-ветки.
abc1234 main / feature/my-branch https://gitverse.com/user/repo/commit/abc1234
Сборка без кэша Docker
Галочка «Без кэша Docker» запускает полную чистую сборку — все слои пересобираются заново. Помогает когда зависимости обновились, а Docker-слои остались старыми.
Rollback
В истории деплоев нажмите «Откатить» рядом с любым успешным деплоем. Платформа запустит тот же Docker-образ без пересборки — занимает секунды.
Собственные раннеры
Сборки идут на наших раннерах — без лимитов и оплаты GitHub Actions.
Сборка начинается сразу после push, если есть свободный раннер.
До 5 сборок одновременно, остальные ждут в очереди. Сборки одного проекта идут по очереди.
Каждая сборка в отдельном Docker-контейнере на том же сервере.
Сборка с доступом к БД
Для Next.js проектов с generateStaticParams которые генерируют страницы из базы данных при сборке.
Когда нужно: если ваш Next.js сайт генерирует статические страницы из БД (например, страницы товаров, статей, специалистов) — без доступа к БД при сборке Next.js выдаст ошибку Can't reach database server.
Как включить
- 1. Создайте PostgreSQL в разделе «База данных» проекта
- 2. В разделе «База данных» или «Настройки» включите тумблер «Сборка с доступом к БД»
- 3. Запустите редеплой — платформа автоматически использует специальный билдер
При включённом режиме Docker-сборка происходит в той же сети что и ваша БД. DATABASE_URL автоматически передаётся в контейнер сборки — generateStaticParams работает корректно.
Превью-окружения
Превью — это отдельная копия проекта, собранная из другой ветки и запущенная в собственном контейнере на собственном адресе. Продакшн при этом продолжает работать на прежнем образе: превью не может его заменить, остановить или изменить его домен.
Зачем это нужно
- →Показать незаконченную работу заказчику по ссылке, не выкатывая её на боевой сайт
- →Проверить рискованное изменение до того, как оно попадёт к пользователям
- →Вести две задачи параллельно: две ветки — две ссылки, они не мешают друг другу
- →Поднять старую версию из истории деплоев и сравнить её с текущей
Как создать
- 1. Откройте вкладку «Окружения» в проекте
- 2. Выберите ветку из списка и нажмите «Создать»
- 3. Через 1–3 минуты превью будет доступно по адресу
проект-git-ветка.preview.relaxdev.ru - 4. Кнопка с круговой стрелкой пересобирает превью из свежего кода ветки
Создавать и удалять превью может любой участник команды с ролью редактора или выше — быть владельцем проекта не требуется.
Адрес и индексация
Каждое превью получает поддомен третьего уровня с автоматическим HTTPS-сертификатом. Все превью-адреса закрыты от поисковых систем заголовком X-Robots-Tag: noindex, поэтому дублей вашего сайта в выдаче не появится.
База данных превью
По умолчанию превью подключается к той же базе, что и продакшн. Это удобно для проверки вёрстки, но опасно для веток с миграциями: изменение схемы затронет боевые данные. Режим переключается во вкладке «Окружения» → «Переменные и БД».
Как в продакшнеПревью работает с боевой базой. Подходит только для изменений, не трогающих данные.Только схемаРекомендуемый режим. Платформа создаёт отдельную базу со структурой продакшна, но без данных. Миграции и сиды приложение накатывает само.Схема и данныеОтдельная база со структурой и копией данных. Создаётся дольше и занимает место на диске.Своя строкаПлатформа ничего не создаёт и не подменяет — впишите свой DATABASE_URL в переменные превью, например от внешнего провайдера.В режимах с созданием базы платформа сама подставляет DATABASE_URLи DIRECT_URL при сборке — значения из редактора переменных на превью не влияют. Готовая строка подключения показывается в панели, её можно скопировать и открыть базу в DBeaver или DataGrip.
База создаётся при сборке превью. Смена режима удаляет старые базы — после этого превью нужно пересобрать, чтобы применилась новая настройка. При удалении превью его база удаляется вместе с ним.
Переменные окружения
Пока для превью ничего не задано, оно наследует переменные продакшна. Кнопка «Скопировать из продакшна» создаёт отдельный набор, который можно править независимо — например, подставить тестовые ключи платёжной системы вместо боевых.
Переменные задаются либо для всех превью сразу, либо для отдельной ветки — значение ветки перекрывает общее. Если в продакшн добавилась переменная, которой нет в превью, панель покажет расхождение и предложит дописать её одной кнопкой.
Блок «Реально применяется» показывает итоговый набор, который уедет в сборку, с пометкой источника каждого значения: из продакшна, общее для превью, переопределение ветки или подставлено платформой.
Слияние веток
Проверенную ветку можно влить в продакшн прямо из панели, не переходя в интерфейс Git-провайдера. Перед слиянием показывается, сколько коммитов впереди и сколько файлов затронуто. После слияния срабатывает обычный автодеплой и продакшн обновляется сам. Конфликты слияния платформа не разрешает — их нужно устранить в репозитории вручную.
Слияние из панели работает для GitHub. Для GitLab, GitVerse и GitFlic используйте интерфейс провайдера — превью при этом работают одинаково для всех четырёх.
Время жизни и лимиты
- Превью живёт 72 часа, отсчёт обновляется при каждой пересборке
- По истечении срока контейнер, образ и база удаляются автоматически
- Одновременно можно держать до 5 превью на проект
- Ресурсы превью вдвое меньше продакшн-лимитов проекта
Ограничения. Превью не создаются для Telegram-ботов: два экземпляра с одним токеном конфликтуют при получении обновлений и ломают работающего бота. Также превью недоступны для статических HTML-проектов, загруженных без Git-репозитория.
Базы данных PostgreSQL
PostgreSQL 17 разворачивается в один клик. Платформа сама создаёт кластер, генерирует доступы, шифрует пароли и прописывает DATABASE_URL в переменные окружения. Ручная настройка не требуется.
📥 Импорт данных
Вставьте строку подключения к существующей PostgreSQL — платформа снимет дамп и развернёт структуру и данные в новой базе. Строку можно брать как есть, вместе с пулером Neon: искать DIRECT_URL не нужно. Если в проекте уже был DATABASE_URL, при создании базы он сохраняется как OLD_DATABASE_URL и сам подставляется в форму импорта. Подходит для переезда с Neon, Supabase, Railway, Vercel Postgres.
🔒 Безопасная изоляция
По умолчанию база спрятана в приватной Docker-сети и недоступна из интернета. Но вы можете сами открыть внешний порт для нужных IP-адресов.
⚡ Авто-подключение
DATABASE_URL автоматически встаёт в переменные окружения при создании БД и обновляется при изменении настроек пула.
🇷🇺 Данные внутри РФ
Вся инфраструктура на серверах в России. Никаких зависимостей от Neon, Supabase или Vercel Postgres.
Прямой доступ (db push, DBeaver)
Во вкладке «Доступ к БД» можно открыть внешний порт для подключения к базе напрямую. В целях безопасности доступ разрешён только с указанных вами IP-адресов (Whitelist).
Как узнать свой IP для белого списка:
- Локальный ПК (DBeaver, DataGrip): Зайдите на 2ip.ru (если включен VPN — IP изменится).
- Облачные IDE (Project IDX, Codespaces) или терминал: Выполните команду
curl ifconfig.me. IP облачной среды всегда отличается от вашего домашнего, поэтому без его добавленияprisma db pushвыдаст ошибку соединения.
Пул соединений — PgBouncer
При росте трафика число соединений с PostgreSQL увеличивается — появляются задержки и ошибки таймаута. PgBouncer работает как диспетчер: принимает все входящие запросы и распределяет их по ограниченному числу реальных соединений к базе.
Одновременных подключений через пул.
Реальных соединений PgBouncer к PostgreSQL.
Секунд запрос ждёт свободное соединение.
DataLens — аналитика данных
Во вкладке DataLens в настройках БД можно подключить базу данных проекта к Yandex DataLens для построения дашбордов и аналитики.
🔗 Прямое подключение
DataLens подключается к PostgreSQL напрямую по хосту, порту и кредам — данные в реальном времени без экспортов.
🔒 Приватная ссылка
Генерируется уникальная ссылка с токеном. Без токена — 401. Токен можно отозвать и пересоздать в любой момент.
⚡ Обновление вручную
Кнопка «Обновить данные вручную» немедленно выполняет SQL-запрос и обновляет файл в хранилище.
🌙 Автообновление
Сохранённый SQL-запрос выполняется автоматически каждую ночь — DataLens всегда получает свежие данные.
Как подключить к DataLens
- Откройте вкладку DataLens в настройках БД проекта
- Нажмите «Создать ссылку для DataLens» — генерируется токен
- Напишите SQL-запрос и нажмите «Обновить данные вручную»
- Скопируйте ссылку с токеном
- В DataLens: Создать подключение → Файлы → вставьте ссылку
https://relaxdev.ru/api/projects/{id}/datalens-export?token={token}
Доступно на тарифах PRO, Pro Team и BUSINESS.
Redis
Управляемый Redis 7 — один контейнер на команду, подключается в один клик прямо из панели проекта.
✅ Доступен на всех тарифах, включая FREE
⚡️ После подключения REDIS_URL автоматически появляется в переменных окружения проекта.
🔒 Каждая команда получает изолированный инстанс с отдельным паролем.
🔄 Поддерживает кэш, сессии, очереди, pub/sub и rate limiting.
📡 Для Socket.io с несколькими репликами: используйте Redis Pub/Sub адаптер — платформа уже обеспечивает подключение.
# Переменная добавляется автоматически
REDIS_URL=●●●●●●●●●●●●●●●●
Socket.io с несколькими репликами:
// Синхронизация реплик через Redis адаптер
import { createAdapter } from "@socket.io/redis-adapter"
import { createClient } from "redis"
const pub = createClient({ url: process.env.REDIS_URL })
const sub = pub.duplicate()
io.adapter(createAdapter(pub, sub))
Домены и SSL
Каждый проект сразу получает адрес {name}.relaxdev.ruс HTTPS. Свой домен подключается двумя A-записями и добавлением во вкладке «Домены» — сертификат Let's Encrypt выпускается и продлевается автоматически. Подробный разбор с примерами — в статье «Домены и DNS на RelaxDev».
Записи у регистратора
| Тип | Имя | Значение |
|---|---|---|
| A | @ | 72.56.37.162 |
| A | www | 72.56.37.162 (или CNAME на основной домен) |
Других A- и AAAA-записей у имени быть не должно. NS — только родные, у регистратора или в Cloudflare. Почтовые записи (MX, SPF, DKIM) не трогайте: к сайту они не относятся. Если у домена есть CAA, в ней должен быть разрешён letsencrypt.org.
Порядок подключения
- Пропишите записи у регистратора или в Cloudflare.
- Проверьте их на dnschecker.org: во всех регионах у A должен быть только
72.56.37.162. Для проекта на VM (своя VM «+ Admin» и другие VM-площадки) —135.136.191.56: вкладка «Домены» такого проекта сама покажет нужный адрес. - Добавьте домен во вкладке «Домены». Панель сама проверит DNS через публичные резолверы: если записи ещё не на нас, она покажет, что не так, и без подтверждения домен не добавит.
- Сертификат выпустится автоматически, обычно за минуту.
Не оставляйте домен с неправильными записями
Домен в проекте сразу получает заказ сертификата. Если записи указывают не на нас, попытки проваливаются, а Let's Encrypt после пяти неудач в час для одного имени временно перестаёт выдавать для него сертификаты. Записи не готовы — удалите домен из проекта, исправьте DNS и добавьте заново. Через час всё ещё нет HTTPS — напишите в поддержку.
↔️ www или без www
Добавьте оба имени и выберите главное: с www на без www, наоборот или оба открывают сайт. Второй вариант отдаёт постоянный редирект 301. Применяется без пересборки.
↩️ Перенаправление доменов
Постоянный редирект всего домена на другой адрес — старое имя на новое, опечатку на основной. Путь и параметры можно сохранять. Снимается в любой момент, домен снова откроет проект.
🔀 Поддомены
app.example.ru добавляется как отдельный домен со своей A-записью. Для поисковиков поддомен — отдельный сайт; если цель — продвигать один сайт, раздел example.ru/app выгоднее.
✳️ Wildcard
Все поддомены *.example.ru разом и один сертификат на них — для сервисов, где у каждого клиента свой поддомен. Тариф PRO Team. Нужные записи (CNAME _acme-challenge и две A) панель покажет при включении и сама проверит DNS.
🌍 Зарубежный вход
Часть зарубежных VPN режет трафик к российским адресам. Для таких посетителей домен можно открыть через сервер за границей: сертификат и маршрут остаются прежними, меняется A-запись — панель покажет, на какую.
🇷🇺 Кириллические домены
пример.рф вводится как есть: хранится в punycode (xn--…), показывается кириллицей, записи те же. Чтобы Google показывал в выдаче название, а не xn--…, добавьте на главную разметку WebSite.
Частые проблемы
- Cloudflare. Записи должны быть в режиме «DNS only» (серое облако). В режиме прокси настройки SSL Cloudflare зацикливают редиректы и мешают выпуску сертификата.
- Переезд с Vercel. Удалите домен в Vercel (Settings → Domains → Remove), уберите записи
76.76.21.21,216.198.79.1иcname.vercel-dns.com, а если NS были у Vercel — верните NS регистратора или перенесите на Cloudflare. - Записи поменяли, а открывается старое. Резолверы помнят прежнее значение до истечения TTL (у Reg.ru минимум час). Кэш можно сбросить у Google и Cloudflare.
- В панели регистратора всё верно, а DNS отдаёт лишний адрес. Бывает, что регистратор отдаёт запись, которой не видно в его интерфейсе. Надёжный выход — перенести NS на Cloudflare.
Мониторинг ресурсов
Ваши проекты работают внутри изолированных виртуальных машин (VM). Доступны прозрачные инструменты контроля:
CPU & RAM
Отслеживайте потребление процессора и памяти. Помогает вовремя заметить утечки памяти в коде.
Сеть (Net I/O)
График входящего и исходящего трафика для анализа активности пользователей.
Runtime Logs
Логи приложения в реальном времени. Незаменимый инструмент для поиска и исправления ошибок.
Авто-перезапуск
Если проект исчерпает доступную память, система автоматически перезапустит контейнер.
Хранилище файлов и Storage API
Файлы лежат в бакете объектного хранилища Yandex Cloud и раздаются через CDN cdn.relaxdev.ru. У платформы есть своя копия хранилища и запасной адрес files.relaxdev.ru: он отдаёт тот же файл по тому же пути — из Yandex Cloud, а при его сбое из своей копии. Ссылки на cdn.relaxdev.ru менять не нужно: добавьте files.relaxdev.ru запасным. Storage API возвращает обе ссылки — url и fallbackUrl.
<!-- Основной адрес — cdn.relaxdev.ru, запасной — тот же путь на files.relaxdev.ru -->
<img src="https://cdn.relaxdev.ru/users/<id>/<имя-проекта>/photo.webp"
onerror="this.onerror=null;this.src=this.src.replace('cdn.relaxdev.ru','files.relaxdev.ru')">У каждого проекта есть собственная папка в объектном хранилище. Загружать, получать список и удалять файлы можно из кода через токен STORAGE_API_KEY(вкладка «API Доступ» в менеджере файлов). Все файлы проекта живут внутри префикса users/<id>/<project>/в общем хранилище, и изолированы от других пользователей. <id> — номер создателя проекта, почты в ссылках нет; у проектов, созданных раньше, на этом месте почта — их ссылки не менялись. Путь к файлу берите из ответа API (path, url), а не собирайте сами.
В менеджере файлов есть чекбокс «Оптимизировать в WebP» (включён по умолчанию): картинки сжимаются прямо в браузере перед отправкой в хранилище.
Где хранить ключ
- Внутри платформы — хранить не нужно. Когда вы нажимаете «Сгенерировать ключ», он автоматически записывается в переменные окружения проекта (
envVars). После «Запустить редеплой» токен прокидывается в контейнер и доступен в коде какprocess.env.STORAGE_API_KEY. - Локально или во внешних сервисах — хранить нужно. Скопируйте ключ и положите в локальный
.env:STORAGE_API_KEY=sk_rd_... - Забыли ключ? Откройте «API Доступ», нажмите 👁️ и скопируйте снова — он всегда лежит в
envVars.
POST — загрузка файла
Растровые изображения (JPEG, PNG, BMP, TIFF) по умолчанию автоматически оптимизируются в WebP — обычно это в 2–4 раза меньше по весу без видимой потери качества. Конвертация выполняется на стороне платформы, у файла меняется расширение на .webp, а в ответе появляется поле webp. Чтобы загрузить файл как есть, передайте -F "webp=false". GIF, SVG и уже-WebP не трогаются.
curl -X POST https://relaxdev.ru/api/v1/storage/upload \
-H "Authorization: Bearer $STORAGE_API_KEY" \
-F "file=@./photo.jpg" \
-F "path=avatars" # необязательная подпапка
# -F "webp=false" # отключить оптимизацию (по умолчанию webp=true)
# Ответ:
# {
# "success": true,
# "url": "https://cdn.relaxdev.ru/users/<id>/<имя-проекта>/avatars/1700000000000-photo.webp",
# "fallbackUrl": "https://files.relaxdev.ru/users/<id>/<имя-проекта>/avatars/1700000000000-photo.webp",
# "path": "users/<id>/<имя-проекта>/avatars/1700000000000-photo.webp",
# "webp": true
# }Тот же запрос из серверного кода Node.js / Next.js:
const form = new FormData();
form.append("file", fileBlob, "photo.jpg");
form.append("path", "avatars");
// form.append("webp", "false"); // по умолчанию оптимизация включена
const res = await fetch("https://relaxdev.ru/api/v1/storage/upload", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.STORAGE_API_KEY}` },
body: form,
});
const { url, fallbackUrl, webp } = await res.json();GET — список файлов
curl "https://relaxdev.ru/api/v1/storage/files?path=avatars" \
-H "Authorization: Bearer $STORAGE_API_KEY"
# Ответ:
# {
# "success": true,
# "files": [
# { "path": "users/<id>/<имя-проекта>/avatars/...jpg",
# "url": "https://cdn.relaxdev.ru/users/<id>/<имя-проекта>/avatars/...jpg",
# "fallbackUrl": "https://files.relaxdev.ru/users/<id>/<имя-проекта>/avatars/...jpg",
# "size": 20413, "lastModified": "..." }
# ]
# }DELETE — удаление файла
Передайте полный path из ответа загрузки или списка. Удалять можно только внутри папки своего проекта.
curl -X DELETE "https://relaxdev.ru/api/v1/storage/files?path=users/<id>/<имя-проекта>/avatars/1700000000000-photo.jpg" \
-H "Authorization: Bearer $STORAGE_API_KEY"
# Ответ: { "success": true, "deleted": "users/<id>/<имя-проекта>/avatars/1700000000000-photo.jpg" }
# Вместо path можно передать ссылку на файл — с cdn.relaxdev.ru или files.relaxdev.ruСвоя VM («+ Admin») и свой сервер («Панель Prod»)
Препрод на платформе и прод на своём сервере — окружения проекта: экземпляры со своей базой и доменами, вкладками в проекте, с выкаткой того же коммита. Всё в одном месте — что выбрать, окружения, перенос, домены и базы: Своя VM и свой сервер.
PRO, PRO Team, Business
тарифПроекты на общих серверах платформы.
Для разработки, тестов и превью.
по тарифу
+ Admin
надбавкаСвоя VM команды на серверах платформы, SSH без root.
Только к тарифу: «PRO + Admin», «PRO Team + Admin», Business.
от 500 до 4 000 ₽/мес
Панель Prod
свой серверВаш сервер под управлением панели — для продакшена с данными ваших пользователей.
Отдельный тариф: вместе с основным или без него. Логи и дампы баз у нас не хранятся.
1000 ₽/мес
+ Admin — своя VM команды
Надбавка к PRO, PRO Team или Business — отдельно не подключается. Отдельная виртуальная машина вашей команды на серверах платформы: её ресурсы только ваши, соседние проекты на неё не влияют.
- Размер
- 1–4 vCPU, 2–8 ГБ памяти, 20–100 ГБ диска — выбираете при заказе.
- Цена
- 250 ₽ за vCPU + 125 ₽ за ГБ памяти + 25 ₽ за ГБ диска сверх 20 ГБ, посуточно с баланса.
- Адреса
- Своего IP у VM нет — она за общим входом платформы 135.136.191.56. Проекты сами получают адрес <имя>.vm.relaxdev.ru, свой домен — A-запись на 135.136.191.56 во вкладке «Домены».
- Доступ
- SSH по вашему ключу, без root. Docker, Traefik, сертификаты и обновления обслуживает платформа.
Как подключить
- Страница VM → «+ Admin · своя VM» или настройки проекта, блок «Своя VM · + Admin». Подключает первый владелец команды — по его тарифу и балансу.
- Выберите размер, вставьте открытый SSH-ключ (
ssh-ed25519 …илиssh-rsa …) и логин. На балансе должна быть сумма за месяц выбранной VM — сразу списываются только первые сутки. - VM создаётся 5–15 минут, затем придёт письмо с командой входа. Если создать не получилось, деньги вернутся на баланс.
Проекты и базы
- Новые проекты команды запускаются на VM. Работающий проект переносится в его настройках: код пересобирается из Git, база копируется, Redis начинается пустым, старый адрес отвечает 301, свои домены переезжают. Если сборка не пройдёт, перенос откатится сам.
- Кластер PostgreSQL команды работает на VM. Подключаться к базе со своего компьютера, из DBeaver или CI можно через внешний доступ по белому списку IP — во вкладке «База данных» проекта.
- Базы на VM бэкапятся каждую ночь, копии хранятся 3 дня. Копию вручную можно снять во вкладке «Бэкапы» базы.
- Свой домен проекта на VM — A-запись на
135.136.191.56, сертификат выпустится сам. Это общий вход всех VM: по голому IP сайт не откроется, вход различает проекты по имени домена. - Пока недоступны на VM: пул PgBouncer, импорт базы по ссылке, DataLens и сборка с доступом к БД.
SSH и консоль
- Команда входа — в карточке своей VM на странице VM, вида
ssh -p 22NN c-логин@135.136.191.56. Ключ один, его можно сменить там же. - По SSH доступно: процессы VM (
top,ps), домашняя папка, git, свои утилиты в~/binиpip --user, обмен файлами поscp, доступ в интернет. - Нет прав root, доступа к Docker и проброса портов: контейнеры, Traefik и сертификаты обслуживает платформа, поэтому их нельзя сломать по неосторожности.
- Логи и управление контейнерами — в консоли на странице VM:
docker ps,stats,logs, перезапуск и остановка (владелец и редактор команды). Логи, метрики, деплои и откаты — во вкладках проекта. - Участники команды видят её VM на странице VM; заказывает и управляет первый владелец команды.
Оплата и отказ
- Не хватает денег — придёт письмо, через 24 часа VM выключится, диск хранится 14 дней. После пополнения VM включится сама.
- Отказаться можно на странице VM в любой момент: VM выключится, списания прекратятся. Диск хранится 14 дней, затем VM удаляется вместе с данными.
Панель Prod — свой сервер
Ваш сервер под управлением панели: сборка, деплой, свои домены и сертификаты — как на наших VM. Логи на платформу не передаются, дампы и бэкапы баз платформа не делает и не хранит. Отдельный тариф — вместе с основным или без него; лимиты тарифа на сервере не действуют.
Что нужно
- Сервер x86_64 с Ubuntu или Debian и публичным IPv4: открыт SSH, свободны порты 80 и 443.
- Данные для входа по SSH — один раз: IP, порт, логин root или отдельного пользователя с sudo (например,
relaxdev), пароль или закрытый ключ. Панель ставит Docker и Traefik, заводит пользователяrelaxсо своим ключом и дальше входит под ним. Ваши данные для входа не сохраняются. - Домен для адресов проектов, например
apps.example.com.
Домены и адреса
- Домен при подключении нужен только для технических адресов: каждый проект получает
<имя>.apps.example.comс сертификатом HTTPS. Для этого две A-записи на IP сервера:apps.example.comи*.apps.example.com. - Свои домены проектов (
example.com,www.example.com) добавляются как обычно во вкладке «Домены» — A-запись на IP вашего сервера, сертификат выпустится сам. - По голому IP сайт не откроется: проектов на сервере несколько, и Traefik различает их по имени домена; сертификаты HTTPS выпускаются на имена доменов.
Проекты и базы
- Новые приложения и HTML-сайты команды запускаются на сервере. Работающий проект переносится из его настроек, блок «Своя VM или свой сервер»: код пересобирается, база копируется.
- Есть и своя VM — «Панель Prod» подключается рядом с ней. Проекты с VM переезжают на сервер все разом (база и Redis у команды общие): страница VM → «Панель Prod» → «Перенести всю VM». Если хоть одна сборка не пройдёт, всё вернётся на VM; после переноса VM можно отключить.
- Кластер PostgreSQL команды работает на вашем сервере; бэкапы баз — на вашей стороне.
- Логи — последние строки прямо с сервера во вкладке проекта.
Как подключить
- Страница VM → «Панель Prod». Подключает первый владелец команды — по нему идут списания.
- На балансе должна быть сумма за месяц; сразу списываются только первые сутки.
- Настройка сервера занимает несколько минут. Не получилось — списанное вернётся на баланс.
Персональные данные
Платформа не предназначена для хранения персональных данных пользователей ваших приложений в продакшене. Если вы размещаете такие данные в базах, хранилище или на VM платформы, вы делаете это по своему решению и сами отвечаете за их размещение.
Для продакшена рекомендуем отдельный сервер под вашим управлением, подключённый через Панель Prod, а платформу — для разработки, тестирования и превью.
Подаёте уведомление в Роскомнадзор и нужны сведения о размещении — напишите на support@relaxdev.ru, мы предоставим актуальную информацию.
Ваши данные как клиента обрабатываются по Политике обработки персональных данных.
Поддержка
В панели управления встроен полноценный чат поддержки.
- История: Вся история переписки сохраняется.
- Файлы: Вы можете прикреплять скриншоты логов или фрагменты кода прямо в чат.
- Мы всегда готовы помочь разобраться с ошибками сборки, базами данных и настройкой окружения.