Kamal
Kamal already assumes a host list; the inventory gives it one before every deploy, and
node.created triggers the deploy of each new host. The one to two hours are that deploy step and
the load balancer.
- Prerequisite work
- a deploy step that keeps the host list
- Time to set up
- 1–2 h
- Adapter
- Webhook
- Fit
- 6/10
Prerequisites, time and fit are this case's row in the onboarding cases table. Hetscale's own setup is about 15 minutes in every case; the rest is work on your side.
Steps
- 01Put a load balancer in front
A Hetzner load balancer with a health check, TLS terminated at it. Kamal’s own proxy on each host serves plain HTTP behind it.
- 02Build the host list from the inventory
Before every deploy, build Kamal’s host list from the inventory instead of keeping it by hand; a new server still comes with node.created.
- 03Deploy on node.created
On the signed node.created event, run the deploy for that host and report it ready; the load balancer health check then decides when the node serves.
- 04Hold the deploy lock while Kamal rolls the fleet
Take the group’s deploy lock with a TTL before the deploy and release it at the end, so scaling waits; healing still runs.
FAQ for this case
Is there a native Kamal adapter?
No, and none is planned: Kamal runs from your machine or CI with your own SSH key, which Hetscale never holds. The webhook adapter serves it, and the Kamal page shows the setup.