ДокументацияНачалоПервый деплой

Первый деплой

Этот сценарий проведёт вас от пустого воркспейса до живого HTTPS-адреса за несколько минут. Вы подключите Git-провайдера, выберете тип сервиса, зададите команды сборки и запуска и увидите, как пайплайн становится зелёным.

Порядок одинаков для любого рантайма — Node.js, Python, Go, Ruby, Rust, Elixir или Docker. Отличается только пара команд, которые вы вводите на третьем шаге.

Что нужно заранее
Git-репозиторий (GitHub, GitLab или Bitbucket) с рабочим приложением и воркспейс Muerte Cloud. Если приложения ещё нет, запушите любое небольшое приложение на Express, FastAPI или Docker в репозиторий и повторяйте шаги.

Путь на пять минут#

  1. 1
    Подключите Git-провайдера
    В панели откройте Account → Git providers и авторизуйте GitHub, GitLab или Bitbucket. Дайте доступ к нужным репозиториям — список можно расширить или сузить позже без передеплоя.
  2. 2
    Создайте сервис
    Нажмите New → Web Service, выберите репозиторий и ветку. Muerte Cloud просканирует дерево и предложит рантайм — поменяйте, если определение неверное.
  3. 3
    Задайте команды сборки и запуска
    Подтвердите предложенные команды или отредактируйте их. Команда build создаёт артефакты, команда start поднимает процесс, который слушает $PORT. Типовые значения — в таблице ниже.
  4. 4
    Добавьте переменные окружения
    Вставьте файл .env или введите значения по одному. Секреты шифруются на диске и не попадают в логи. Настроить их можно и позже, но большинству приложений нужен хотя бы DATABASE_URL.
  5. 5
    Создайте и наблюдайте
    Нажмите Create service. Вкладка Deploys в реальном времени показывает логи сборки и рантайма. Когда health-check проходит, трафик переключается на новый инстанс, и адрес сервиса становится доступен по HTTPS.

Выбор типа сервиса#

Web-сервисы — самый частый выбор, но у Muerte Cloud есть ещё четыре типа для задач без входящего HTTP-трафика. Смотрите шпаргалку ниже или полный гайд по типам сервисов.

FieldDescription
Web ServiceПостоянно работающий HTTP-процесс с публичным HTTPS-адресом. Деплои без простоя.
Static SiteГотовые HTML, CSS и JS, отдаваемые по HTTPS. Превью для PR — В разработке и пока недоступны.
Private ServiceДоступен только внутри приватной сети воркспейса. Без публичного адреса, для внутренних API.
Background WorkerПостоянный процесс без входящего трафика. Обработчики очередей, пайплайны, чат-боты.
Cron JobЗапускает команду по расписанию. Оплата только за время каждого запуска.

Команды сборки и запуска по рантаймам#

РантаймСборкаЗапуск
Node.jsnpm ci && npm run buildnode dist/index.js
Pythonpip install -r requirements.txtgunicorn app.wsgi --bind 0.0.0.0:$PORT
Rubybundle installbundle exec puma -b tcp://0.0.0.0:$PORT
Gogo build -o app ./cmd/server./app
Rustcargo build --release./target/release/app
Elixirmix deps.get --only prod && mix compilemix phx.server
Docker— (собирается Dockerfile)— (используется CMD, можно переопределить)
Слушайте $PORT на 0.0.0.0
Muerte Cloud подставляет PORT при старте. Привяжите сервер к 0.0.0.0:$PORT — привязка к 127.0.0.1 или к жёстко заданному порту провалит health-check и отменит деплой.

Минимальный пример на Node.js

server.js
javascript
import http from "node:http";

const port = Number(process.env.PORT ?? 8080);

http
  .createServer((_, res) => res.end("ok"))
  .listen(port, "0.0.0.0", () => {
    console.log("listening on", port);
  });

Что происходит после нажатия Create#

Каждый деплой проходит один и тот же пайплайн из трёх стадий:

  1. 1
    Сборка
    Зависимости ставятся, артефакты собираются на отдельных build-мощностях. Результат упаковывается в неизменяемый образ.
  2. 2
    Запуск
    Новый инстанс поднимает образ. Как только health-check проходит, трафик переключается с предыдущего инстанса одним шагом.

Полный разбор пайплайна — в разделе Как работают деплои.

Проверка, что сервис живой#

Когда вкладка Deploys показывает Live, сервис доступен по адресу https://<name>.muerte.app. Быстрые проверки:

bash
# HTTP 200 и заголовки ответа
curl -I https://my-service.muerte.app

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

Если первый деплой упал#

Сборка падает на установке
Проверьте, что lock-файл закоммичен и версия рантайма совпадает. Node читает .nvmrc или поле engines, Python — runtime.txt.
Health-check по таймауту
Процесс не слушает $PORT на 0.0.0.0 или падает при старте. Смотрите логи рантайма, чтобы найти точную причину.
Нет переменных окружения
Контейнер сборки видит те же переменные, что и рантайм. Добавьте DATABASE_URL и нужные фреймворку секреты до первого деплоя.
Слишком большой Docker-образ
Многостадийные сборки и slim-образы сокращают время старта. Цель — меньше 500 МБ в сжатом виде.

Что дальше#

Подключить свой домен
Направьте домен на сервис — Muerte Cloud сам выпустит и продлит TLS-сертификат.
Подключить базу данных
Управляемые Postgres и Key-Value подключаются по приватной сети одной строкой URL.
Превью для PR В разработке
Изолированное окружение для каждого пул-реквеста — в разработке.
Автоскейлинг В разработке
Автоматическое масштабирование по CPU и RPS в разработке. Сейчас можно увеличить число инстансов вручную.