ДокументацияВычисленияWeb-сервисы

Web-сервисы

Размещайте динамические веб-приложения и API — Express, FastAPI, Django, Rails, Go, Rust, что угодно — по публичному HTTPS-адресу. Деплой из Git или из готового Docker-образа.

Muerte Cloud собирает и деплоит ваш код при каждом пуше в привязанную ветку. Каждый web-сервис получает уникальный поддомен *.muerte.app и может подключить любое количество собственных доменов с полностью управляемым TLS. Сервисы в одном проекте общаются друг с другом по бесплатной приватной сети — без настройки VPC и без публичного доступа.

Важно
Ваш web-сервис должен привязываться к порту на хосте 0.0.0.0, чтобы принимать трафик из публичного интернета. Ожидаемый по умолчанию порт — 8080, он передаётся вашему процессу через переменную окружения PORT. См. Привязка порта.
Request flow
Client
HTTPS
Edge / TLS
Global load balancer
Your service
0.0.0.0:$PORT
Muerte Cloud terminates TLS at the edge and forwards the request to your container over HTTP on the port your process binds to.

Деплой шаблона#

Самый быстрый способ попробовать платформу — задеплоить один из стартовых шаблонов. Каждый из них — минимальное, но реальное приложение на выбранном стеке с уже настроенными командами сборки и запуска:

Express
Node.js
FastAPI
Python
Django
Python
Ruby on Rails
Ruby
Gin
Go
Rocket
Rust
Phoenix
Elixir
Laravel
PHP

Деплой собственного кода#

Вы можете задеплоить web-сервис из подключённого репозитория GitHub, GitLab или Bitbucket, из публичного Git URL, либо из готового Docker-образа в любом реестре.

  1. 1
    Подключите Git-провайдер
    Войдите в панель Muerte Cloud, откройте New → Web Service и подключите аккаунт GitHub, GitLab или Bitbucket. Поддерживаются как публичные, так и приватные репозитории, доступные вашему аккаунту.
  2. 2
    Выберите репозиторий и ветку
    Укажите репозиторий и ветку, которая будет авто-деплоиться. Каждый пуш в эту ветку запускает новую сборку.
  3. 3
    Заполните форму сервиса
    FieldDescription
    NameA name for the service inside the Muerte Cloud dashboard. It is also used as the default *.muerte.app subdomain.
    RegionThe geographic region where the service runs. Services in the same region and project share a free private network.
    BranchThe Git branch to build. Every push to this branch triggers a new build and deploy.
    LanguageThe runtime for your app. Muerte Cloud auto-detects Node.js, Python, Go, Ruby, Elixir, Rust, PHP and .NET — or use a Dockerfile for anything else.
    Build CommandCommand that produces build artifacts. Typical values: npm ci && npm run build, pip install -r requirements.txt.
    Start CommandCommand that boots your HTTP server. Typical values: node dist/index.js, gunicorn app.wsgi.
  4. 4
    Выберите тип инстанса
    Типы инстансов варьируются от небольшого общего инстанса до выделенных CPU-уровней с автомасштабированием. Инстанс можно сменить в любой момент без простоя.
  5. 5
    (Опционально) настройте дополнительные параметры
    Задайте переменные окружения и секреты, подключите постоянный диск, настройте путь health check, включите превью для pull request'ов и закрепите определённую версию рантайма.
  6. 6
    Создайте сервис
    Нажмите Create Web Service. Muerte Cloud запускает первую сборку; прогресс можно наблюдать в реальном времени на вкладке Deploys сервиса.
Первый деплой не удался?
Самые частые причины — отсутствующая команда запуска, привязка к 127.0.0.1 вместо 0.0.0.0, или сборка, которой не хватило памяти на выбранном инстансе. Проверьте логи сборки и рантайма на вкладке Deploys — каждая ошибка ведёт прямиком на проблемную строку лога.

Привязка порта#

Каждый web-сервис должен привязать HTTP-сервер к порту на хосте 0.0.0.0. Edge Muerte Cloud терминирует TLS, затем пересылает входящие запросы в ваш контейнер по HTTP на этот порт. Сам контейнер никогда не доступен напрямую из публичного интернета.

Мы рекомендуем привязываться к порту, заданному переменной окружения PORT — так вам не придётся зашивать значение в код, и оно будет работать как локально, так и в продакшене.

server.js
javascript
const express = require("express");
const app = express();
const port = process.env.PORT || 8080;

app.get("/", (req, res) => {
  res.send("Hello from Muerte Cloud");
});

app.listen(port, "0.0.0.0", () => {
  console.log(`listening on ${port}`);
});
FieldDescription
Порт по умолчанию8080. Можно переопределить в настройках сервиса, если фреймворк настаивает на другом значении по умолчанию.
Адрес привязкиВсегда 0.0.0.0. Привязка к 127.0.0.1 или localhost делает сервис недоступным и приводит к неудачному деплою.
АвтоопределениеЕсли ваше приложение привязывается к другому порту, Muerte Cloud обычно определяет и использует его автоматически. Если определение не удалось, деплой помечается как нездоровый со ссылкой на строку лога, где ожидалась привязка.
Зарезервированные порты18012, 18013 и 19099 зарезервированы рантаймом платформы и не могут быть привязаны.

Привязка к нескольким портам

Web-сервис предоставляет ровно один публичный HTTP-порт. Сервис может привязывать дополнительные порты для использования внутри приватной сети — внутренние админ-интерфейсы, gRPC-серверы, сборщики метрик — но публичный listener всегда должен быть привязан к $PORT.

Подключение к вашему web-сервису#

Из публичного интернета

Каждый сервис получает стабильный HTTPS-адрес вида https://<service>.muerte.app. В любой момент можно подключить один или несколько собственных доменов; TLS-сертификаты выпускаются и обновляются автоматически, включая wildcard-сертификаты.

Edge терминирует SSL, а затем пересылает трафик в ваш контейнер по HTTP. Запросы, пришедшие по обычному HTTP, перенаправляются на HTTPS перед пересылкой.

Не нужен публичный доступ?
Создайте приватный сервис вместо web-сервиса. Приватные сервисы используют тот же рантайм, пайплайн сборки и наблюдаемость, но доступны только другим сервисам в том же проекте.

Из других сервисов вашего проекта

Сервисы в одном проекте могут обращаться друг к другу по приватной сети, используя имя сервиса как хост — без платы за ingress и без публичного доступа. Из воркера обращение к сервису с именем api выглядит так:

bash
curl http://api:8080/health

Дополнительные возможности#

Web-сервисы Muerte Cloud также включают из коробки:

Деплой без простоя
Новые релизы становятся здоровыми до того, как старые начнут сливаться.
Управляемый TLS
Бесплатные сертификаты, wildcard, автопродление.
Собственные домены
Любое количество apex- и wildcard-доменов.
Автомасштабирование В разработке
Автоматическое масштабирование по CPU и RPS в разработке. Сейчас число инстансов можно менять вручную.
Постоянные диски
SSD-тома, подключаемые к сервису.
WebSockets
Долгоживущие соединения поддерживаются по умолчанию.
Превью-окружения В разработке
Отдельный URL для каждого pull request — в разработке.
Мгновенные откаты
Возврат к любой предыдущей успешной сборке в один клик.
Защита от DDoS
Защита уровня 3/4 включена по умолчанию.