Docker Compose on a single server
The largest audience on Hetzner runs plain Docker or Docker Compose on one server, and most of it has no load balancer. That is the whole prerequisite work here: a Hetzner load balancer in front of the box, TLS moved to it, DNS pointed at it. Hetscale’s own setup takes about 15 minutes in every case; the rest of the one to two hours is on the Hetzner side.
- Prerequisite work
- Hetzner LB (€7.49/mo), TLS to LB, DNS to LB
- Time to set up
- 1–2 h
- Adapter
- Snapshot
- Fit
- 6/10
Prerequisites, time and fit are the ADR-0028 row for this case. Hetscale's own setup is about 15 minutes in every case; the rest is work on your side.
Steps
- 01Check what lives on the disk
The database is already external. Make sure uploads, sessions and caches are too: anything on the node’s disk is lost when a node is removed. If something still lives there, move it first; until then the group stays at a fixed size.
- 02Add a Hetzner load balancer
Create one (€7.49 per month) with a health check on your app’s health endpoint and put the existing server behind it. Hetscale reads this check as the readiness signal.
- 03Move TLS to the load balancer
Terminate TLS at the load balancer with a managed certificate and let the box serve plain HTTP behind it. Per-node certificates break as soon as a second node exists.
- 04Point DNS at the load balancer
Traffic now enters through the load balancer; your server is a target. Nothing else changes.
- 05Connect read-only
Start the 14-day Observe trial. The day-0 report tells you whether a group of two to four nodes fits your load, as a range.
- 06Snapshot the seed and run one Rehearsal
Hetscale snapshots your server as release v1, creates one node from it, waits for the load balancer health check, drains and deletes it while you watch. The snapshot stays in your project; it contains everything on the disk, including .env files.
- 07Go Live with a floor of 2
Set minimum 2, maximum what the report suggests. Two nodes means one can fail while the other serves.
FAQ for this case
Do I have to leave Docker Compose?
No. Each node boots from the snapshot and your restart policies bring the containers up. Hetscale runs nothing inside the node.
How do I deploy a new version?
Deploy to a designated server as you do today and take a new snapshot on request, or let your CI update the release pointer. New nodes boot from the current release; a rolling replace swaps the existing ones.
Does the single server keep running during setup?
Yes. Nothing changes until you move a group out of Observe, and even then your existing server is never touched: Hetscale only deletes servers it created.