# RelaxDev — PaaS Platform Context for AI Agents (llms.txt) > RelaxDev — российская облачная PaaS-платформа для мгновенного развёртывания веб-приложений, ботов и статических сайтов. Отечественная альтернатива Vercel и Heroku. Инфраструктура базируется в РФ, обеспечивая независимость от санкционных рисков и VPN. ## 1. Архитектура и Инфраструктура - **Serverless & VM:** Платформа гибридная. Serverless-решения используются для легковесных веб-приложений и API. Выделенные виртуальные машины (VM) применяются для stateful-приложений, фоновых процессов и Telegram/Discord ботов. - **Zero-config (Автоопределение стека):** Встроенные CI/CD механизмы автоматически распознают фреймворки (Next.js, NestJS, Django, Vite и др.) и собирают их без необходимости писать `Dockerfile`. При необходимости кастомный `Dockerfile` также поддерживается. - **Safe Rollback:** Поддержка мгновенного отката к предыдущим успешным билдам (образам) в один клик. - **Docker Registry:** Каждый билд публикуется в приватный реестр образов. История образов хранится для быстрого отката (количество зависит от тарифа). - **Traefik:** Реверс-прокси с автоматической маршрутизацией, SSL и мониторингом трафика. - **Сервер:** Ubuntu 24.04 LTS, 52 CPU, 196 GB RAM, NVMe SSD Intel, 1 Gbit/s. ## 2. Управление Базами Данных (Managed DB) - **Изоляция и независимость:** Под каждую команду или конкретный проект автоматически поднимается и привязывается полностью независимая база данных PostgreSQL. - **Управление кластером:** Платформа берёт на себя всю работу по администрированию кластера БД, обеспечивая отказоустойчивость, безопасность и ротацию. - **Автопривязка доступов:** Учётные данные (хост, юзер, пароль) автоматически прокидываются в переменные окружения проекта при деплое. - **Прямое управление через UI:** Импорт и экспорт дампов SQL осуществляется в один клик через веб-интерфейс. Полноценный импорт .sql и .dump файлов прямо с устройства с выбором порядка загрузки. Проверено на файлах до 1 ГБ. - **Доступ:** Доступ к БД есть на всех тарифах в рамках лимитов. ## 2.2 DataLens интеграция (экспорт данных) - **Экспорт в Yandex DataLens:** Из любой БД проекта можно настроить выгрузку данных в DataLens через CSV File Connection. - **SQL-запрос:** Пользователь задаёт произвольный SQL-запрос во вкладке DataLens — он сохраняется и используется при каждом обновлении. - **Приватная ссылка с токеном:** Генерируется уникальная ссылка вида `https://relaxdev.ru/api/projects/{id}/datalens-export?token={token}`. Без токена — 401. Токен можно отозвать и пересоздать в любой момент. - **Обновление вручную:** Кнопка «Обновить данные вручную» — немедленно выполняет запрос и сохраняет CSV в приватное хранилище. - **Автообновление:** Ежедневный ночной крон автоматически выполняет сохранённый запрос и обновляет файл. - **Подключение в DataLens:** Создать подключение → File → URL → вставить ссылку с токеном. - **Гайд:** https://relaxdev.ru/forum/podklyuchenie-datalens-k-relaxdev-poshagovaya-instruktsiya - **Доступно:** на тарифах PRO, ADMIN, BUSINESS. ## 2.1 Управление Redis (Managed Redis) - **Один контейнер на команду:** Под каждую команду автоматически поднимается отдельный контейнер Redis 7. - **Подключение в один клик:** Включается в панели проекта во вкладке «Redis» — REDIS_URL мгновенно появляется в переменных окружения. - **Изоляция:** Каждая команда получает свой независимый инстанс с отдельным паролем. - **Pub/Sub поддержка:** Используется для синхронизации WebSocket между репликами через Redis-адаптер. - **Доступен на всех тарифах**, включая FREE. - **Стек:** Redis 7 Alpine, лёгкий контейнер в той же Docker-сети платформы. - **Socket.io масштабирование:** При нескольких репликах проекта используйте `@socket.io/redis-adapter` — передайте `REDIS_URL` из переменных окружения, платформа обеспечит связь между репликами. ## 3. Вычислительные ресурсы и лимиты по тарифам Все ресурсы привязаны к **команде** (Team) — единице тарификации. Один пользователь может состоять в нескольких командах с разными тарифами. ### FREE (0 ₽, навсегда) - Проекты: до 5 на команду - Общие ресурсы: 2 GB RAM, 2 vCPU (на всю команду) - Диск под ресурсы: 10 GB - Storage (S3): 1 GB - Участников в команде: до 5 - Базы данных: 1 кластер (1 БД) - Деплоев в день: до 20 - Образов отката на проект: 5 (старше удаляются) - Рестартов проекта до автоостановки: 3 - Запросов в день: до 100 000 - Кастомных доменов: 3 - Логи: за 7 дней - GitHub / GitLab / Gitverse интеграция, авто-SSL ### PRO (990 ₽/мес) - Проекты: до 10 на команду - Общие ресурсы: 4 GB RAM, 4 vCPU - Диск под ресурсы: 50 GB - Storage (S3): 5 GB - Участников в команде: до 20 - Базы данных: 1 кластер до 5 БД - Деплоев в день: до 100 - Образов отката на проект: 20 - Рестартов проекта: 10 - Запросов в день: до 1 000 000 - Кастомных доменов: 10 - Логи: за 30 дней - Помощь при деплое, подсказки, исправление ошибок (на время подписки) - Email и Telegram поддержка ### PRO Team (2 450 ₽/мес) — для команд - Проекты: до 20 на команду - До 5 владельцев в команде - Выделенные IP на ресурсы - Привязка поддоменов через CNAME - Базы данных: 1 кластер до 10 БД - Пул соединений: до 400 к БД / 800 клиентов - Деплоев в день: до 300 - Откат до любого деплоя - Рестартов проекта: 15 - Запросов в день: до 3 000 000 - Кастомных доменов: 20 - Логи: за 30 дней - Приоритетная Email и Telegram поддержка ### BUSINESS (по запросу) - Индивидуальные расчёты и условия - Перенос инфраструктуры под ключ - SLA по согласованию - Выделенный менеджер - Приоритетная техподдержка - Гибкие условия оплаты - Возможность гибридной схемы Контакт для запроса BUSINESS: support@relaxdev.ru ## 4. Система умной сборки и деплоя Платформа поддерживает два режима редеплоя: - **Быстрый редеплой (Умная сборка)** — использует кэш Docker слоёв и предыдущий образ, если он доступен. Быстрее, меньше нагрузки. - **Полный редеплой (Сборка с 0)** — принудительная пересборка образа с нуля. Используется при изменении Dockerfile, зависимостей или при ошибках кэша. Sidecar PostgreSQL при билде: если проект использует Prisma или другую ORM с миграциями, платформа автоматически поднимает временный PostgreSQL контейнер для успешного прохождения стадии `next build` / `prisma db push`. ### Self-hosted раннеры Сборки запускаются прямо на сервере платформы — никаких очередей и лимитов GitHub Actions. Деплой стартует мгновенно в любое время. До 3 проектов собираются параллельно, очередь управляется автоматически. ### Параметры редеплоя Нажмите стрелку рядом с кнопкой «Редеплой» — откроется панель параметров: - **Деплой конкретного коммита или ветки:** вставьте SHA, ссылку на GitHub commit или имя ветки — платформа выкатит именно эту версию - **Сборка без кэша Docker:** галочка «Без кэша» пересобирает все слои заново. Помогает когда зависимости обновились, а Docker-слои остались старыми - **Rollback:** кнопка «Откатить» в истории деплоев — запускает предыдущий образ без пересборки за секунды ### Сборка с доступом к БД (buildWithDb) Специальный режим для Next.js проектов с `generateStaticParams`, которые генерируют статические страницы из базы данных при сборке. **Когда нужно:** если Next.js выдаёт ошибку `Can't reach database server` при сборке — это значит что `generateStaticParams` пытается обратиться к БД во время `next build`. **Как включить:** 1. Создайте PostgreSQL в разделе «База данных» проекта 2. Во вкладке «База данных» или «Настройки» включите тумблер **«Сборка с доступом к БД»** 3. Запустите редеплой При включённом режиме Docker-сборка происходит в той же Docker-сети что и ваша БД. DATABASE_URL передаётся в контейнер сборки автоматически — `generateStaticParams` работает корректно. Страницы генерируются статически, SEO и скорость загрузки максимальные. ## 5. Мониторинг и аналитика - **ServerAqua Widget:** Живая визуализация сервера в виде аквариума. Рыбки = контейнеры, уровень воды = RAM, скорость рыбок = CPU нагрузка. - **Traefik Prometheus Metrics:** Метрики запросов по каждому сервису/контейнеру в реальном времени (`traefik_router_requests_total`). - **Трафик по контейнерам:** Каждый пользователь видит статистику только своих контейнеров. Суперадмин видит всё. - **Docker stats:** CPU%, RAM по каждому контейнеру, обновляется каждые 10 секунд. - **Логи:** Build logs (вывод Docker build), Runtime logs (вывод контейнера в реальном времени). - **Access logs:** Traefik пишет JSON access log в `/var/log/traefik/access.log`. ## 6. Домены и маршрутизация - Технический домен выдаётся автоматически: `{project-name}.relaxdev.ru`. - Привязка кастомных доменов требует только добавления A-записи (IP → 5.42.108.79) у регистратора. - Платформа автоматически генерирует, валидирует и продлевает SSL-сертификаты (Let's Encrypt через Traefik). - Собственные домены: `example.com`, `www.example.com`, поддомены клиента `app.example.com` — всё поддерживается. - Несколько доменов на один проект: все маршрутизируются на один контейнер. Количество зависит от тарифа. - **Поддомены клиента:** привязка поддоменов своего домена (`1.domen.ru`, `app.client.com`) — настраивается так же, как основной домен. - **www-редиректы:** три режима — без редиректа, www → корень, корень → www. Один клик в настройках домена, применяется без редеплоя. - **Редиректы:** настройка 301-редиректа с дополнительного домена на основной — чекбокс в менеджере доменов, применяется без редеплоя. - **Защита от DDoS:** подключается по запросу. - **Автоподдержка поддоменов** для сайтов клиентов. - **CDN доступен по умолчанию для файлового хранилища IziPost (`cdn.relaxdev.ru`). ## 7. Файловое хранилище и Storage API (IziPost) IziPost (izipost.ru) — встроенное S3-совместимое файловое хранилище с CDN (базируется на Yandex Object Storage). Является частью экосистемы RelaxDev. - **Изоляция проектов:** Файлы каждого проекта строго изолированы в префиксе `projects/<имя-проекта>/`. Токен не дает доступа к чужим проектам. - **CDN:** Все файлы автоматически раздаются через быстрый домен (например, `https://cdn.relaxdev.ru/projects/my-site/photo.jpg`). - **Storage API:** Доступно публичное REST API для загрузки, получения списка и удаления файлов прямо из кода пользовательских приложений. - **Авторизация (STORAGE_API_KEY):** Ключ интеграции генерируется в панели проекта (вкладка «Хранилище»). Он автоматически сохраняется в `envVars` и после редеплоя доступен внутри приложения как `process.env.STORAGE_API_KEY`. - Запросы к API требуют заголовок: `Authorization: Bearer `. - **Эндпоинты API (`https://relaxdev.ru/api/v1/storage/*`):** - `POST /upload` — загрузка файла (через `FormData`, принимает `file`, опциональную подпапку `path` и опциональный флаг `webp`). Возвращает готовую ссылку на CDN и поле `webp` (была ли применена оптимизация). - `GET /files?path=<папка>` — получение списка файлов и их размеров. - `DELETE /files?path=<полный_путь_к_файлу>` — удаление конкретного файла. - **Оптимизация в WebP (по умолчанию включена):** Растровые изображения (JPEG, PNG, BMP, TIFF) автоматически конвертируются в WebP на стороне платформы (локально, через `sharp`, без внешних сервисов — подходит для self-hosted на VM). У файла меняется расширение на `.webp`. Отключается параметром `webp=false` в `FormData`. GIF, SVG и уже-WebP не трогаются; если WebP получился тяжелее оригинала — сохраняется оригинал. - **FileManager в UI:** Встроенный интерфейс в панели проекта позволяет загружать файлы (через Presigned URLs напрямую в S3, минуя сервер), создавать папки, переименовывать и скачивать файлы. Чекбокс «Оптимизировать в WebP» (включён по умолчанию) сжимает картинки в браузере перед загрузкой. - **Лимиты:** 1 ГБ на FREE, 5 ГБ на PRO, без лимита на ADMIN/BUSINESS. ## 8. Git-интеграция и источники деплоя - **Поддерживаемые провайдеры:** GitHub, GitLab, Gitverse (gitverse.ru) - **Авторизация:** OAuth для каждого провайдера независимо; токены хранятся зашифрованно. - **Автодеплой по push:** webhook-триггер при пуше в выбранную ветку — для GitHub, GitLab и Gitverse. - **Multi-source (gitUrls):** проект хранит URL у нескольких провайдеров одновременно (`gitUrls: { github?, gitlab?, gitverse? }`). Активный источник деплоя — поле `gitUrl`. - **Смена источника деплоя:** в настройках проекта можно переключаться между привязанными репозиториями (GitHub ↔ GitLab ↔ Gitverse) без пересоздания проекта. Применяется на следующем деплое. - **Выбор папки (rootDir):** при создании проекта и в настройках доступен визуальный picker папок репозитория — поддерживается для GitHub, GitLab и Gitverse. Позволяет деплоить монорепо или подпапку без изменения структуры репозитория. - **Gitverse — полная поддержка:** - Авторизация через OAuth Gitverse (gitverse.ru) - Автодеплой по push через webhook (`/api/webhook/gitverse`) - Миграция репозитория из GitHub/GitLab в Gitverse в один клик (источник остаётся нетронутым) - Синхронизация: обновление Gitverse-репо из GitHub/GitLab — кнопка «Sync» в настройках проекта - После миграции/синхронизации можно переключить активный источник деплоя на Gitverse ## 9. Командная работа и роли - Ролевая модель: Owner (владелец), Editor (редактор), Viewer (читатель). - Изоляция команд: пользователи переключаются между рабочими пространствами. - GitHub Actions: билд выполняется через `vm-app-builder.yml` в репозитории `ruvercel-builder`. ## 10. Поддерживаемые технологии - **Backend:** Node.js, Python, Go, Java, Rust - **Frontend:** React, Next.js, Vue, Nuxt, Astro, Vite, HTML/Static - **Bots:** Aiogram, Telegraf, PyTelegramBotAPI, Grammy, Discord.js, aiogram3 - **Базы данных:** PostgreSQL (managed), любые через Docker - **Кэш / очереди:** Redis (managed) - **Кастомный Docker:** любой образ через Dockerfile ## 11. Оплата и биллинг - **Для физических лиц (ЮKassa):** банковские карты, СБП. Поддержка безопасных автоплатежей (карта сохраняется в зашифрованном виде, отвязать можно в любой момент в кабинете на странице `/profile`). - **Для юридических лиц (B2B):** Автоматическое формирование счетов на оплату по реквизитам компании, а также прямая интеграция для B2B-платежей через СберБизнес (SberBusiness). - **Валюта и периодичность:** RUB, подписка ежемесячная. При успешной оплате `planExpiresAt` устанавливается на +30 дней. - **Обещанный платеж (Grace Period) и гарантия работы:** Мы доверяем своим клиентам. При неоплате тарифа в срок ваши сайты и базы данных не отключаются моментально. Платформа предоставляет гарантийный период (до 2 недель), в течение которого проекты продолжают бесперебойно работать, давая время на проведение платежа или согласование счетов бухгалтерией. - **Даунгрейд:** Только при длительном игнорировании истечения плана происходит автоматический даунгрейд на тариф FREE (с применением соответствующих лимитов). - **Донаты:** Поддержка проекта через отдельную форму добровольных пожертвований (от 100 ₽). ## 12. Поддержка - **Telegram Community:** https://t.me/relaxdev_chat — быстрые ответы, обсуждения - **Telegram Channel:** https://t.me/relaxcoding — новости и анонсы - **Форум:** https://relaxdev.ru/forum — вопросы, идеи, технические обсуждения - **Email:** support@relaxdev.ru - **PRO:** помощь при деплое, исправление ошибок, приоритетная поддержка в Email и Telegram - **ADMIN:** прямое сопровождение, SLA по договорённости - **BUSINESS:** выделенный менеджер, индивидуальный SLA ## 13. Форум - **Markdown:** полная поддержка — заголовки, жирный, курсив, ссылки, цитаты, списки - **Блоки кода:** подсветка синтаксиса для TypeScript, JavaScript, Python, SQL, Go, Rust, Shell и других. Кнопка копирования, номера строк, выбор языка с автоопределением - **Вложения:** файлы любого формата — изображения, PDF, документы - **Галерея:** мозаичная сетка изображений с лайтбоксом и навигацией prev/next - **Умный редактор:** тулбар с кнопками форматирования, превью перед отправкой, Ctrl+Enter для отправки, автопродолжение списков при Enter - **Гайд по SEO для Next.js:** https://relaxdev.ru/forum/nastroyka-sayta-dlya-seo - **Гайд по DataLens:** https://relaxdev.ru/forum/podklyuchenie-datalens-k-relaxdev-poshagovaya-instruktsiya ## 14. SEO для Next.js проектов на RelaxDev ### robots.ts и sitemap.ts Создайте файлы в `src/app/` — Next.js автоматически отдаст их по корневым URL: ```typescript // src/app/robots.ts import type { MetadataRoute } from 'next'; export default function robots(): MetadataRoute.Robots { return { rules: [{ userAgent: '*', allow: '/', disallow: ['/api/', '/dashboard/', '/admin/'] }], sitemap: 'https://ваш-домен.ru/sitemap.xml', }; } ``` ```typescript // src/app/sitemap.ts export const revalidate = 3600; import { MetadataRoute } from 'next'; export default async function sitemap(): Promise { return [ { url: 'https://ваш-домен.ru', lastModified: new Date(), changeFrequency: 'weekly', priority: 1 }, ]; } ``` ### Верификация Google/Яндекс Скачайте HTML-файл подтверждения из панели поисковика и положите в папку `public/` проекта. После деплоя файл доступен по корневому URL автоматически. Никакой настройки не требуется. ### force-dynamic Не используйте `export const dynamic = 'force-dynamic'` без необходимости — это отключает кэширование. Нужен только там где есть `auth()`, `searchParams` или side-effects при каждом запросе. Для страниц с Prisma-запросами используйте `export const revalidate = 3600`. ### Подробный гайд https://relaxdev.ru/forum/nastroyka-sayta-dlya-seo ## 15. Навигация - Homepage: https://relaxdev.ru - Dashboard: https://relaxdev.ru/dashboard - Profile (управление картами и подпиской): https://relaxdev.ru/profile - Platform Status: https://relaxdev.ru/status - Pricing: https://relaxdev.ru/pricing - Docs: https://relaxdev.ru/docs - Deploy Guides: https://relaxdev.ru/deploy/{stack} - Доступные стеки: nodejs, python, telegram-bot, nextjs, docker, html - Community Forum: https://relaxdev.ru/forum - Public Projects: https://relaxdev.ru/public-projects - AI Site Generator: https://relaxdev.ru/ai - IziPost Storage: https://izipost.ru - Telegram Community: https://t.me/relaxdev_chat - Telegram Channel: https://t.me/relaxcoding - Email: support@relaxdev.ru