PaaS Инфраструктура в РФ 🇷🇺

Деплой Docker контейнеров

Развёртывание Docker-образов и Dockerfile прямо из репозитория. Сборка на своих раннерах, авто-SSL, свой домен, серверы в РФ и оплата в рублях.

Автодеплой из Git

Платформа сама скачает код с Репозитория, соберет проект и запустит его.

Готовая среда

Не нужно настраивать Nginx или Linux. Под капотом надежные серверы RelaxDev.

Свои домены и SSL

Привяжите свой домен в 1 клик, а платформа автоматически выпустит Let's Encrypt SSL.

Если проект уже описан Dockerfile, платформа соберёт образ и запустит контейнер без дополнительной настройки: достаточно подключить репозиторий. Это универсальный путь для стеков, которые не покрывает автоопределение — Go, Rust, PHP, Java, C# или связки с системными зависимостями.

Сборка идёт на собственных раннерах платформы, а не во внешних CI: очередей и лимитов минут нет, до трёх проектов собираются параллельно, каждая сборка изолирована в отдельном контейнере. Готовый образ разворачивается на серверах в России с автоматическим HTTPS.

Как задеплоить Docker?

1. Положите Dockerfile в корень репозитория

Платформа находит его автоматически и отдаёт ему приоритет над автоопределением стека. Путь можно переопределить в настройках, если Dockerfile лежит в подпапке монорепозитория.

2. Прокиньте порт из переменной окружения

Контейнер должен слушать порт из переменной PORT на хосте 0.0.0.0. Инструкция EXPOSE носит справочный характер — важно, какой порт реально слушает процесс внутри.

FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
ENV PORT=8080
EXPOSE 8080
CMD ["node", "dist/main.js"]

3. Задайте переменные окружения

Секреты передаются платформой в контейнер при запуске — не зашивайте их в образ через ARG или ENV в Dockerfile, иначе они останутся в слоях образа.

4. Соберите и опубликуйте

После сборки контейнер получает рабочий HTTPS-адрес, к нему подключается свой домен. Логи сборки и рантайма доступны в панели, статус контейнера отслеживается мониторингом.

Сравнение платформ

ПлатформаСтатусОплата
HerokuНе работает с РФОплата картой РФ невозможна
RenderДоступен частичноОплата только в валюте
Fly.ioДоступен частичноНужна зарубежная карта
RelaxDevСерверы в РФРубли, есть бесплатный тариф

Ключевое отличие от аренды обычного VPS: не нужно самому держать демон Docker, писать деплой-скрипты, настраивать реверс-прокси и следить за сертификатами. Вы отвечаете за Dockerfile, платформа — за сборку, запуск, HTTPS и перезапуск при сбое.

Частые ошибки и решения

Образ собрался, но контейнер сразу останавливается

Процесс в CMD завершается вместо того, чтобы работать постоянно. Контейнер живёт ровно столько, сколько живёт главный процесс: он должен оставаться на переднем плане, без демонизации.

Адрес отдаёт 502 при рабочем контейнере

Процесс слушает 127.0.0.1 или порт, отличный от PORT. Внутри контейнера localhost изолирован — привязывайтесь к 0.0.0.0 и читайте порт из переменной окружения.

Сборка идёт слишком долго

Копируйте манифесты зависимостей отдельным слоем перед копированием исходников — тогда кеш не сбрасывается на каждое изменение кода. Используйте multi-stage сборку и добавьте .dockerignore, чтобы не тащить node_modules и .git в контекст.

FAQ

Можно ли запустить готовый образ из реестра?

Основной сценарий — сборка из Dockerfile в вашем репозитории. Для приватных базовых образов доступ настраивается через переменные окружения проекта.

Поддерживаются ли multi-stage сборки?

Да, это рекомендуемый подход: он заметно уменьшает итоговый образ и ускоряет запуск контейнера.

Что с docker-compose?

Проект разворачивается как отдельный сервис. Многосервисную схему собирают из нескольких проектов на платформе, связывая их переменными окружения и общей базой.

Где посмотреть логи сборки?

Полный лог сборки и рантайм-логи контейнера доступны в панели проекта в реальном времени.

Сохраняются ли данные внутри контейнера?

Файловая система контейнера эфемерна: при пересборке она обнуляется. Для постоянных данных используйте базу данных или файловое хранилище платформы.