Флаг: English English

Kamal: революция в деплое, или как уйти из облачного рабства

Опубликовано 23.12.2025

В последние десять лет индустрия развёртывания веб-приложений прошла путь от FTP-скриптов и rsync до сложнейших систем оркестрации. Сегодня разработчики и небольшие команды всё чаще оказываются перед непростым выбором:

  • либо платить серьёзную наценку за удобство PaaS-платформ (Heroku, Render, Fly.io),
  • либо погружаться в когнитивную и операционную сложность Kubernetes.

Kamal предлагает третий путь: удобство современных облачных сервисов — на вашем собственном сервере.


Что такое Kamal

Kamal — это open-source CLI-инструмент от компании 37signals (создателей Basecamp и Ruby on Rails), предназначенный для деплоя веб-приложений поверх Docker без Kubernetes.

Ключевая идея Kamal проста:

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

Изначально Kamal создавался для Rails-приложений, но сегодня он полностью агностичен к языку. Если приложение можно упаковать в Docker-образ — Kamal сможет его задеплоить.

Поддерживаемые сценарии:

  • bare metal;
  • VPS в любом облаке (AWS, DigitalOcean, Hetzner, Яндекс Облако);
  • гибридные конфигурации;
  • миграции между провайдерами.

Поясняющая аналогия

Представим деплой как жильё:

  • PaaS (Heroku) — номер в дорогом отеле. Всё включено, но вы платите за каждый шаг и не можете ничего изменить.
  • Kubernetes — строительство небоскрёба. Полный контроль, но нужен штат инженеров только для поддержки инфраструктуры.
  • Kamal — современный модульный дом. Его можно поставить на любой участок (сервер), а при необходимости — перевезти целиком.

Как это выглядит на практике

В отличие от Kubernetes с его десятками YAML-манифестов, конфигурация Kamal умещается в одном файле config/deploy.yml.

Пример минимального, но реального конфига:

# Название сервиса
service: my-app

# Docker-образ
image: user/my-app

# Список серверов
servers:
  web:
    - 192.168.0.1
    - 192.168.0.2

# Реестр контейнеров
registry:
  server: ghcr.io
  username: user
  password:
    - KAMAL_REGISTRY_PASSWORD

# Переменные окружения
env:
  secret:
    - RAILS_MASTER_KEY
    - DB_PASSWORD

Запуск деплоя:

kamal deploy

Что делает Kamal во время деплоя

За одной командой скрывается понятный и прозрачный процесс:

  1. Build — сборка Docker-образа.
  2. Push — загрузка образа в container registry.
  3. Pull — скачивание образа серверами.
  4. Boot & Switch — запуск нового контейнера и атомарное переключение трафика.

Результат — zero-downtime deploy без балансировщиков, ingress-контроллеров и сложных схем.


Ключевые технические особенности

1. Zero-downtime и kamal-proxy

Начиная с версии 2.0 Kamal использует собственный прокси — kamal-proxy, отказавшись от Traefik.

Это даёт:

  • удержание активных соединений;
  • переключение трафика только после healthcheck;
  • отсутствие внешних ingress-зависимостей.

Для пользователя обновление проходит полностью незаметно.


2. Автоматический provisioning серверов

Команда:

kamal setup

Автоматически:

  • устанавливает Docker;
  • настраивает зависимости;
  • готовит сервер к деплою.

Требования минимальны:

  • чистая Ubuntu;
  • SSH-доступ по ключу.

3. Accessories: базы и сервисы рядом

Kamal умеет управлять вспомогательными сервисами — базами данных, Redis, очередями.

Пример MySQL:

accessories:
  db:
    image: mysql:8.0
    host: 192.168.0.1
    env:
      MYSQL_ROOT_PASSWORD: <%= ENV["DB_PASSWORD"] %>

Это удобно для:

  • pet-проектов;
  • MVP;
  • ранних стадий стартапов.

Для highload-систем базы данных всё же лучше выносить отдельно.


Kamal vs остальной мир

КритерийKubernetesPaaSKamal
СложностьОчень высокаяМинимальнаяНизкая
СтоимостьИнфраструктура + DevOpsВысокая наценкаТолько сервер
Vendor lock-inНетДаНет
КонтрольПолныйОграниченныйВысокий
Целевая аудиторияEnterpriseMVP без DevOpsСтартапы, агентства, инди

Почему Kamal лучше Capistrano

Capistrano долго был стандартом в Ruby-мире, но Kamal решает его системные проблемы:

  • зависимости больше не живут на сервере;
  • не нужно управлять версиями языков;
  • сервер становится одноразовым ресурсом.

Когда Kamal не подойдёт

Kamal — не серебряная пуля.

Он не лучший выбор, если:

  • требуется агрессивное авто-масштабирование;
  • нагрузка скачет на порядки;
  • нужна сложная service-mesh архитектура.

В таких случаях Kubernetes остаётся оправданным.


Итог: философия независимости

Kamal — это не просто инструмент деплоя. Это манифест независимости:

  • минимальные расходы;
  • полный контроль;
  • отсутствие привязки к вендору;
  • лёгкая миграция между облаками.

VPS за 50 € в Hetzner вместо 300 € на AWS — без потери удобства.

Отзывы по теме

Огромное спасибо Михаилу, обратился к нему с очень срочным вопросом по настройке сервера, так как сам в этом не очень силен а нужно сайт показать заказчику. Ответ быстрый, помощь без лишних слов и очень быстро! Желаю вам много заказов и лучшего рейтинга! Спасибо огромное!

Ekleo

Ekleo · Настройка vps, настройка сервера

Очень мощный покупатель

28.11.2025 · ⭐ 5/5

Огромное спасибо Михаилу, обратился к нему с очень срочным вопросом по настройке сервера, так как сам в этом не очень силен а нужно сайт показать заказчику. Ответ быстрый, помощь без лишних слов и очень быстро! Желаю вам много заказов и лучшего рейтинга! Спасибо огромное!

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Похожие посты