ForkTex Cloud — Declarative Deployment
Romania
Our own deployment platform: one manifest describes a system, and the platform provisions it, routes it, secures it, and cuts traffic over without downtime.
- Client
- ForkTex
- Industry
- Cloud Infrastructure
- Period
- Jun 2024 — Ongoing
Outcomes
8
Production stacks deployed through it
- Deploys
- Blue-green over Docker
- Infrastructure
- Hetzner, European
The situation
Every project needs somewhere to run, with TLS, a database, backups and a way to deploy without downtime. Renting that from a managed platform is the obvious answer and was ours for a while.
What we built
The manifest
A forktex.json describes services, the infrastructure they need, and the deployment strategy. Each service carries a type — compute, persistence or daemon — and the type is what the platform reasons about. The proxy layer is generated from the service list rather than written.
Provisioning
Hetzner servers, Cloudflare DNS and Let’s Encrypt certificates, provisioned by Ansible. Secrets are referenced rather than embedded and resolved at deploy time, so the manifest is safe to commit.
Deployment
Blue-green over Docker. The new slot passes health checks before the proxy moves, then the old slot drains for a grace period and stops.
What mattered
The property that matters is not zero downtime but that rollback is a proxy change. When reverting is a rebuild, teams deploy less often in bigger batches, which makes each deploy riskier.
Outcome
Eight production stacks deploy through it, including this website. We carry the backups, patching and provisioning a managed platform would absorb; that cost is only repaid because the same platform runs every project.
Related reading
Start Any Platform From Scratch
A new engineer should reach a running system with one command, on any of our projects, without reading a wiki page that went stale eight months ago.
Declarative Production
A repository should state how it runs in one file a machine can read. Otherwise every consumer of that fact re-derives it, and one of them is wrong.