Deploy Tool · Go

Деплой до того как нужен Kubernetes

docker compose для прода — git-aware, мультихост, по SSH. Build, push, pull, restart — по порядку, только то что поменялось. Один бинарь, один конфиг, никакого кластера.

Terminal
$_
Конфигурация

Один файл. Приложения и инфра вместе.

Положи .kb/deploy.yaml в репозиторий. kb-deploy прочитает и решит что собрать, что запушить и что перезапустить — по SSH, на целевом хосте.

SSH_KEY — имя env-переменной с PEM-ключом. Локально — в .env, в CI — как секрет.

yaml
registry: ghcr.io/your-org

targets:
  api:
    watch: [apps/api/**]
    image: my-project/api
    ssh:
      host: ${SSH_HOST}
      user: ${SSH_USER}
      key_env: SSH_KEY
    remote:
      compose_file: ~/app/docker-compose.yml
      service: api

  web:
    watch: [apps/web/**]
    image: my-project/web
    ssh:
      host: ${SSH_HOST}
      user: ${SSH_USER}
      key_env: SSH_KEY
    remote:
      compose_file: ~/app/docker-compose.yml
      service: web

infrastructure:
  postgres:
    type: docker-image
    image: postgres:16
    ssh:
      host: ${SSH_HOST}
      user: ${SSH_USER}
      key_env: SSH_KEY
    restart: unless-stopped
Команды

Всё поддаётся автоматизации.

kb-deploy runСобрать и раскатать затронутые цели (git diff против последнего SHA).
kb-deploy run --allПолный деплой всех целей, вне зависимости от git.
kb-deploy run kb-labs-webРаскатать конкретную цель по имени. Удобно для хотфиксов.
kb-deploy statusПоказать последний задеплоенный SHA для каждой цели и насколько он отстал от HEAD.
kb-deploy listСписок целей из .kb/deploy.yaml — с compose-файлами и хостами.
kb-deploy infra upПоднять stateful-инфру из infrastructure. Идемпотентно: работающие сервисы пропускаются.

Все команды поддерживают --json для скриптов и CI

Как это работает

Детали, которые важны.

Раскатывает только то, что изменилось

Затронутые цели определяются по git diff против последнего задеплоенного SHA. Ничего лишнего не пересобирается.

Собирает, пушит, вытягивает, перезапускает — по порядку

Сборка локально или в CI, push в registry, pull на хосте, docker compose up. Каждый шаг проверяется до начала следующего.

Помнит последний SHA для каждой цели

status показывает что сейчас крутится в проде и насколько это разошлось с HEAD в репозитории.

Установить

Один бинарник. Без Kubernetes.

curl -fsSL https://kblabs.ru/kb-deploy/install.sh | sh
kb-deploy — KB Labs