Деплой до того как нужен Kubernetes
docker compose для прода — git-aware, мультихост, по SSH. Build, push, pull, restart — по порядку, только то что поменялось. Один бинарь, один конфиг, никакого кластера.
Один файл. Приложения и инфра вместе.
Положи .kb/deploy.yaml в репозиторий. kb-deploy прочитает и решит что собрать, что запушить и что перезапустить — по SSH, на целевом хосте.
SSH_KEY — имя env-переменной с PEM-ключом. Локально — в .env, в CI — как секрет.
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