Deployment kit: CIVITAS/CORE V2 on Hetzner in ~40 minutes (single node, for testing) with roughly 5 minutes of hands-on configuration

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:

  1. 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.

  2. Installs the platform prerequisites: cert-manager with a Let’s Encrypt issuer, Kyverno, Linkerd mTLS, and a meshed Traefik.

  3. Clones the official civitas-core-deployment repo and checks out the branch or tag you pick (main by default; staging, v2.0-rc, v2.0-beta, or any other ref).

  4. Generates a global.yaml.gotmpl tuned for one node: single namespace, 1 replica per component, trimmed CPU/memory requests, backups off. Your own customizations go into overrides.yaml.gotmpl, which survives re-runs and branch switches.

  5. 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.

1 „Gefällt mir“

Thank you very much @oc000135137340 for this great contribution! You make it even easier to deploy and test CIVITAS/CORE ! Amazing :pray:

@oc000135137340 Thanks for sharing the deyloment script, great approach.

Hetzner Cloud is a good choice because it’s used by many German and European municipalities as a high-performance alternative to the typical big-tech clouds.