Деплой в Muerte Cloud
Каждый пуш в отслеживаемую ветку создаёт новый атомарный релиз. Здесь — как деплой проходит от начала до конца: стадии пайплайна, выкатка, откат и остановка.
Muerte Cloud может деплоить сервис автоматически на каждый коммит либо по запросу — из панели. Web-сервисы, приватные сервисы, фоновые воркеры и cron-задачи обновляются без простоя, если к сервису не подключён постоянный диск.
Каждый деплой виден в реальном времени на вкладке Deploys: логи сборки и рантайма, SHA коммита, длительность и статус в одном месте.
Автоматические деплои#
При создании сервиса вы привязываете его к ветке репозитория GitHub, GitLab или Bitbucket. По умолчанию любой пуш или мерж в эту ветку пересобирает и передеплоивает сервис.
Для авто-деплоев нужен подключённый Git-провайдер. Сервисы, которые берут готовый Docker-образ или публичный Git URL, деплоятся вручную.
Настройка авто-деплоев
Поведение меняется на вкладке Settings сервиса:
| Field | Description |
|---|---|
| По коммиту | Деплой сразу, как изменение попало в отслеживаемую ветку. По умолчанию для новых сервисов. |
| После прохождения CI | Ждать завершения всех CI-проверок коммита. Деплой только если все прошли успешно. |
| Выключено | Без авто-деплоев. Каждый релиз запускается вручную из панели. |
Пропуск коммита
Некоторые коммиты — правки README, комментарии — не нужно катить. Добавьте стоп-фразу в сообщение коммита, и Muerte Cloud запишет событие без запуска сборки:
git commit -m "[skip deploy] tighten copy in README"Допустимые фразы: [skip deploy], [deploy skip], [skip ci].
Ручные деплои#
Запустить релиз вне git-push можно и вручную — на вкладке Deploys: выберите последний коммит, конкретный SHA, или соберите заново с очисткой кэша.
Стадии деплоя#
Каждый деплой проходит один и тот же пайплайн из двух стадий:
- 1Команда сборкиСтавит зависимости и создаёт артефакты. Выполняется на отдельных build-мощностях — всё, что записано в файловую систему, переносится дальше только внутри образа.
- 2Команда запускаПоднимает процесс на новом инстансе. Как только он становится здоровым, трафик переключается с предыдущего.
build 120 мин, start 15 мин.Примеры команд сборки
| Рантайм | Типичная команда сборки |
|---|---|
| Node.js | npm ci · pnpm install --frozen-lockfile · bun install |
| Python | pip install -r requirements.txt · poetry install · uv sync |
| Ruby | bundle install |
| Go | go build -o app ./cmd/server |
| Rust | cargo build --release |
| Elixir | mix deps.get --only prod && mix compile |
| Docker | команда сборки не нужна — используется Dockerfile или готовый образ |
Примеры команд запуска
| Рантайм | Типичная команда запуска |
|---|---|
| Node.js | node dist/index.js · npm start |
| Python | gunicorn app.wsgi --bind 0.0.0.0:8080 |
| Ruby | bundle exec puma -b tcp://0.0.0.0:8080 |
| Go | ./app |
| Rust | ./target/release/app |
| Elixir | mix phx.server |
| Docker | CMD из Dockerfile, можно переопределить в сервисе |
Управление деплоями#
Пересекающиеся деплои
Одновременно у сервиса выполняется только один деплой. Если новый деплой запускается во время текущего, Muerte Cloud может подождать (завершить текущий и сразу перейти к самому свежему, пропустив промежуточные) или вытеснить (отменить текущий и начать новый). По умолчанию — подождать; меняется в настройках воркспейса.
Отмена деплоя
Кнопка Cancel deploy на вкладке Deploys прерывает текущую сборку. Если сзади стоит другой деплой, он начнётся сразу.
Перезапуск сервиса
Перезапуск — это особый ручной деплой: тот же коммит, те же переменные, новый инстанс. Поскольку поднимается новый инстанс и подменяет старый, перезапуск проходит без простоя, как обычный деплой. Учтите: перезапуск не подхватывает недавние правки переменных окружения — для них нужен полноценный деплой.
Откат
Каждая успешная сборка сохраняется как точка отката, поэтому вернуть сервис к прошлой версии можно со вкладки Deploys без пересборки. Подробности — в разделе Откаты.
Концепции деплоя#
Эфемерная файловая система
По умолчанию файловая система сервиса эфемерна: всё, что записано в рантайме, теряется при следующем деплое или перезапуске. Чтобы сохранять данные между релизами, используйте управляемые Postgres или Key-Value либо подключите постоянный диск по конкретному пути монтирования.
Деплои без простоя
Когда новая версия успешно собрана, Muerte Cloud поднимает новый инстанс рядом с текущим. Старый продолжает обслуживать все запросы, пока новый не пройдёт health-check, после чего edge переключает трафик одним шагом.
- Сборка новой версии. Если сборка падает, деплой отменяется и текущий инстанс продолжает работу.
- Поднимается новый инстанс рядом с текущим.
- Ожидание успешного health-check нового инстанса.
- Переключение трафика на новый инстанс; старый дообрабатывает текущие запросы.
- Через 60 секунд отправляется
SIGTERMстарому инстансу. - Если он не завершился за отведённое время —
SIGKILL.
Сервисы с несколькими инстансами повторяют шаги 2–6 по одному инстансу за раз. Если какой-то новый инстанс не становится здоровым, весь деплой отменяется и все реплики возвращаются к предыдущей версии. Постоянные диски отключают деплой без простоя: том безопасно держит открытым только один инстанс.
Корректная остановка
Когда пора останавливаться, процесс получает SIGTERM. Обработайте его: дообработайте текущие HTTP-запросы, завершите или верните в очередь задачи, закройте исходящие соединения и выйдите с нулевым кодом. По умолчанию на остановку даётся 30 секунд, можно увеличить до 300 секунд для каждого сервиса.
const server = app.listen(port, "0.0.0.0");
process.on("SIGTERM", () => {
console.log("received SIGTERM, draining connections");
server.close(() => process.exit(0));
});SIGKILL при выкатке, значит нет обработчика остановки или дообработка занимает больше отведённого времени. Увеличьте таймаут в настройках сервиса или ускорьте завершение, закрывая keepalive-соединения в начале обработчика.