Deployment kit: CIVITAS/CORE V2 on Hetzner in ~40 minutes (single node, for testing) with roughly 5 minutes of hands-on configuration
Hello everyone,
I’d like to share a deployment kit and guide that brings up a complete CIVITAS/CORE V2 instance on Hetzner Cloud in about 40 minutes of unattended deployment, with roughly 5 minutes of hands-on configuration.
Repo: Marek Mráz / Civitas core v2 Terraform Hetzner Deployment Guide · GitLab
What it is (and is not)
Not for production. It builds a single-node k3s cluster: no HA, no quorum, backups off by default, node-local storage that dies with the server. It is meant for testing, demos, developing against the platform, exploring use cases, or trying a new branch or release without touching your real environment.
How it works
A guided wizard (deploy.sh) asks every question up front (server type, domain, admin email, firewall, SMTP, branch), then runs unattended:
-
Provisions one Hetzner server with k3s using the kube-hetzner Terraform module. The built-in klipper load balancer serves traffic, so no paid Hetzner LB is needed.
-
Installs the platform prerequisites: cert-manager with a Let’s Encrypt issuer, Kyverno, Linkerd mTLS, and a meshed Traefik.
-
Clones the official
civitas-core-deploymentrepo and checks out the branch or tag you pick (mainby default;staging,v2.0-rc,v2.0-beta, or any other ref). -
Generates a
global.yaml.gotmpltuned for one node: single namespace, 1 replica per component, trimmed CPU/memory requests, backups off. Your own customizations go intooverrides.yaml.gotmpl, which survives re-runs and branch switches. -
Verifies the deployment, sets the portal admin password through the Keycloak API (no working SMTP required), and prints all credentials and service URLs.
Every step is idempotent: if something fails, re-run and it resumes. A destroy.sh script tears everything down in about 3 minutes and finishes with an orphan sweep, so nothing keeps billing after a test.
Cost
The platform needs 32 GB of RAM. The wizard reads live prices from the Hetzner API and picks the cheapest in-stock 32 GB type: cpx62 at €129.99/mo (€0.208/h), or cx53 at €29.49/mo when it is back in stock. Hetzner bills hourly, so a deploy-test-destroy cycle costs cents.
Requirements
-
Basic terminal skills
-
Mac, Linux, or Windows via WSL2
-
A Hetzner Cloud account
-
A domain name is optional: without one, the kit uses
<node-ip>.sslip.io. One caveat from my own runs: sslip.io shares its Let’s Encrypt rate limits with everyone, and I once hit the limit and certificates stopped issuing. Keep a real domain handy if that happens.
Feedback, issues, and merge requests are welcome.