Документация RelaxDev
Пошаговое руководство по использованию платформы. От создания проекта до настройки базы данных и привязки домена.
Что такое RelaxDev?
RelaxDev — это платформа, которая берёт на себя всю работу по настройке серверов, установке зависимостей и поддержанию работы вашего приложения.
Всё работает «под капотом»: вы просто импортируете код из репозитория, а мы автоматически определяем язык (Node.js, Python, React и т.д.), собираем проект и запускаем его в безопасной изолированной среде.
Быстрый старт
Если у вашего проекта стандартные настройки, развернуть его можно всего в несколько кликов:
- Нажмите кнопку «Добавить проект».
- Выберите нужный репозиторий из подключенного аккаунта GitHub, GitLab или Gitverse.
- Оставьте включенным «Автоопределение стека» — система сама поймет, как собрать приложение.
- Нажмите «Деплой».
Через пару минут платформа завершит сборку, и ваш сайт будет доступен в сети!
Подробная настройка проекта
Для более сложных приложений в окне создания проекта доступно множество ручных настроек.
1Выбор команды
Выберите рабочую область (Team), к которой будет привязан проект. Это полезно для разделения личных проектов и командной работы.
2Репозиторий и Ветка
Укажите нужный репозиторий с исходным кодом и ветку (по умолчанию main или master). Ветку можно изменить в настройках в любой момент.
3Название проекта
Задайте понятное имя. Оно будет использоваться в панели управления и служит основой для системного домена.
4Настройка стека (Сборка)
Автоопределение: платформа сама подберёт команды для запуска (рекомендуется). Свой Dockerfile: выберите эту опцию, если вашему приложению нужна специфическая среда выполнения.
5Переменные окружения (.env)
Безопасное место для ваших секретных ключей, паролей от БД и токенов API. Добавляйте вручную в формате Ключ — Значение.
6Публичный проект и Автодеплой
Публичный проект делает его видимым в общем каталоге платформы. Автодеплой — проект обновляется автоматически при каждом push в выбранную ветку.
Git-провайдеры и источники деплоя
Поддерживаемые провайдеры
github.com — подключение, автодеплой по push, приватные репозитории
gitlab.com — покдлючение, автодеплой по push, приватные репозитории
gitverse.ru — российский Git-хостинг, автодеплой, миграция и синхронизация
Смена источника деплоя
Проект может хранить репозитории сразу у нескольких провайдеров (GitHub, GitLab, Gitverse). В настройках проекта — вкладка «Источник деплоя» — можно переключиться на любой привязанный репозиторий без пересоздания проекта. Изменение применяется на следующем деплое.
При смене источника автоматически обновляется активная ветка и иконка провайдера в интерфейсе.
Выбор папки проекта (rootDir)
При создании проекта и в настройках доступен визуальный picker папок репозитория. Поддерживается для GitHub, GitLab и Gitverse.
Удобно для монорепо: деплойте только нужную подпапку (apps/frontend, packages/api и т.п.) без изменения структуры репозитория.
Gitverse — миграция и синхронизация
Платформа поддерживает полный цикл работы с Gitverse — российским git-хостингом. Подключите аккаунт Gitverse в профиле, и в настройках проекта появятся:
Копирует репозиторий из GitHub или GitLab в Gitverse в один клик. Исходный репозиторий остаётся нетронутым.
Обновляет Gitverse-репо последними изменениями из GitHub/GitLab. Запускается вручную кнопкой «Sync» или автоматически при автодеплое.
После миграции можно переключить активный источник деплоя на Gitverse — проект будет деплоиться полностью из российской инфраструктуры.
Параметры сборки
Нажмите стрелку рядом с кнопкой «Редеплой» — откроется панель параметров.
Деплой конкретного коммита или ветки
Вставьте SHA коммита, ссылку на Git commit или имя ветки. Платформа выкатит именно эту версию. Удобно для отката или тестирования фичи-ветки.
abc1234 main / feature/my-branch https://gitverse.com/user/repo/commit/abc1234
Сборка без кэша Docker
Галочка «Без кэша Docker» запускает полную чистую сборку — все слои пересобираются заново. Помогает когда зависимости обновились, а Docker-слои остались старыми.
Rollback
В истории деплоев нажмите «Откатить» рядом с любым успешным деплоем. Платформа запустит тот же Docker-образ без пересборки — занимает секунды.
Собственные раннеры
Сборки запускаются прямо на нашем сервере — никаких очередей и лимитов Git Actions.
Деплой начинается сразу после push — нет ожидания свободного слота.
До 3 проектов собираются одновременно. Очередь автоматически.
Каждая сборка в отдельном Docker-контейнере на том же сервере.
Сборка с доступом к БД
Для Next.js проектов с generateStaticParams которые генерируют страницы из базы данных при сборке.
Когда нужно: если ваш Next.js сайт генерирует статические страницы из БД (например, страницы товаров, статей, специалистов) — без доступа к БД при сборке Next.js выдаст ошибку Can't reach database server.
Как включить
- 1. Создайте PostgreSQL в разделе «База данных» проекта
- 2. В разделе «База данных» или «Настройки» включите тумблер «Сборка с доступом к БД»
- 3. Запустите редеплой — платформа автоматически использует специальный билдер
При включённом режиме Docker-сборка происходит в той же сети что и ваша БД. DATABASE_URL автоматически передаётся в контейнер сборки — generateStaticParams работает корректно.
Базы данных PostgreSQL
PostgreSQL 17 разворачивается в один клик. Платформа сама создаёт кластер, генерирует доступы, шифрует пароли и прописывает DATABASE_URL в переменные окружения. Ручная настройка не требуется.
📥 Импорт данных
Вставьте URL существующей PostgreSQL-базы — платформа снимет дамп и развернёт структуру и данные в новом кластере. Подходит для переезда с Neon, Supabase, Railway.
🔒 Изоляция по умолчанию
База доступна только внутри Docker-сети вашего проекта. Порт закрыт снаружи на уровне файрвола. Для подключения из DBeaver / DataGrip — обратитесь в поддержку.
⚡ Авто-подключение
DATABASE_URL автоматически встаёт в переменные окружения при создании БД и обновляется при изменении настроек пула.
🇷🇺 Данные внутри РФ
Вся инфраструктура на серверах в России. Никаких зависимостей от Neon, Supabase или Vercel Postgres.
Пул соединений — 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. Доступен сразу после первого успешного деплоя, без каких-либо настроек.
🔗 Кастомный домен
Добавьте домен во вкладке «Домены», пропишите A-запись на IP сервера у регистратора, нажмите «Обновить SSL» — сертификат Let's Encrypt выпустится автоматически.
📋 Несколько доменов
На один проект можно привязать несколько доменов — все маршрутизируются на один контейнер. Количество доменов зависит от тарифа.
🔒 Авто-SSL
SSL-сертификаты генерируются, валидируются и продлеваются автоматически через Let's Encrypt и Traefik. Поддерживаются все привязанные домены.
Поддомены и редиректы
Привяжите поддомен вашего собственного домена — например app.example.com или 1.domen.ru. Настраивается так же, как и основной домен: A-запись + авто-SSL.
В менеджере доменов доступен чекбокс для настройки 301-редиректа с дополнительного домена на основной. Применяется мгновенно без редеплоя.
Мониторинг ресурсов
Ваши проекты работают внутри изолированных виртуальных машин (VM). Доступны прозрачные инструменты контроля:
CPU & RAM
Отслеживайте потребление процессора и памяти. Помогает вовремя заметить утечки памяти в коде.
Сеть (Net I/O)
График входящего и исходящего трафика для анализа активности пользователей.
Runtime Logs
Логи приложения в реальном времени. Незаменимый инструмент для поиска и исправления ошибок.
Авто-перезапуск
Если проект исчерпает доступную память, система автоматически перезапустит контейнер.
Хранилище файлов и Storage API
У каждого проекта есть собственная папка в объектном хранилище. Загружать, получать список и удалять файлы можно из кода через токен STORAGE_API_KEY(вкладка «API Доступ» в менеджере файлов). Все файлы проекта живут внутри префикса users/<email>/<project>/в общем хранилище, и изолированы от других пользователей.
В менеджере файлов есть чекбокс «Оптимизировать в 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/<email>/<имя-проекта>/avatars/1700000000000-photo.webp",
# "path": "users/<email>/<имя-проекта>/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, 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/<email>/<имя-проекта>/avatars/...jpg",
# "url": "https://cdn.relaxdev.ru/users/<email>/<имя-проекта>/avatars/...jpg",
# "size": 20413, "lastModified": "..." }
# ]
# }DELETE — удаление файла
Передайте полный path из ответа загрузки или списка. Удалять можно только внутри папки своего проекта.
curl -X DELETE "https://relaxdev.ru/api/v1/storage/files?path=users/<email>/<имя-проекта>/avatars/1700000000000-photo.jpg" \
-H "Authorization: Bearer $STORAGE_API_KEY"
# Ответ: { "success": true, "deleted": "users/<email>/<имя-проекта>/avatars/1700000000000-photo.jpg" }Поддержка
В панели управления встроен полноценный чат поддержки.
- История: Вся история переписки сохраняется.
- Файлы: Вы можете прикреплять скриншоты логов или фрагменты кода прямо в чат.
- Мы всегда готовы помочь разобраться с ошибками сборки, базами данных и настройкой окружения.