Hosting and sizing
Recommended OS, Hetzner Cloud instance types, and indicative monthly costs for Portlane
Portlane runs as Docker Compose on a single Linux VM (or bare metal): six engines, two Postgres databases, observability (Grafana, Loki, Prometheus), plus an optional GitHub Actions self-hosted runner for portlane-pipelines CI.
Performance depends more on RAM, NVMe disk, and network than on distro tweaks. Pick a mainstream LTS and size the machine for Postgres + containers.
Recommended operating system
| Choice | Recommendation |
|---|---|
| Ubuntu 24.04 LTS | Default — Docker Engine, Python 3.12 for the runner, wide Hetzner image support |
| Ubuntu 22.04 LTS | Acceptable if tooling requires it; prefer 24.04 for new installs |
| Debian 12 | Valid minimal alternative if your team already standardises on Debian |
Avoid exotic host OS images unless you have a strong reason. Portlane is tested around Docker on Ubuntu/Debian.
Hetzner Console: select Ubuntu 24.04, NVMe local disk (not volume-only for Postgres), region Germany (Nuremberg/Falkenstein) or Finland for EU latency and GDPR.
Hetzner Cloud — indicative sizing (2026)
Prices below are monthly caps, excl. VAT, for CPX (shared AMD vCPU, good price/performance) in Germany / Finland, per Hetzner’s June 2026 price list. Add ~€0.50/month if you attach a public IPv4 (IPv6-only is cheaper). Verify live prices on hetzner.com/cloud before ordering.
| Profile | Hetzner plan | vCPU | RAM | Disk (typ.) | ~€/month | Use case |
|---|---|---|---|---|---|---|
| Dev / lab | CPX32 | 4 | 8 GB | 80 GB NVMe | ~35 | Solo dev, few flows, light traffic |
| Dev comfortable | CPX42 | 8 | 16 GB | 160 GB NVMe | ~70 | Recommended dev + runner + LGTM stack headroom |
| Prod (light) | CPX42 | 8 | 16 GB | 160 GB NVMe | ~70 | Low/medium message volume, single tenant |
| Prod (comfortable) | CPX52 | 16 | 32 GB | 240 GB NVMe | ~100 | Higher throughput, retention, peak load |
Two environments (dev + prod) = two servers (or two CPX instances). Do not share one runner label between dev and prod. Budget roughly €70 + €70 (CPX42 × 2) or €35 + €70 (CPX32 dev + CPX42 prod) per month excl. VAT.
Why not the smallest plans?
CPX22 (4 GB RAM, ~€20/month) is tight for Postgres central + pivot + six engines + observability. Usable for a short demo, not for day-to-day integration work.
What actually drives cost
- NVMe — Postgres and durable queues are I/O sensitive; prefer local NVMe over network-only storage for the databases.
- RAM — 16 GB is a practical minimum for a full stack; 32 GB for prod with margin.
- Egress — Hetzner includes generous traffic in EU; hyperscaler egress fees do not apply the same way, but monitor if you push large payloads to external ERPs.
Network hardening (any host)
- Bind Portlane to loopback (
PORTLANE_BIND_ADDR=127.0.0.1). For external access, use the built-in TLS reverse proxy (Caddy with automatic Let's Encrypt certificates, enabled by setting a domain in the deploy env): it exposes only ports 80/443 and serves the console and webhook ingress over HTTPS. - To open only the webhook entry point to partners — keeping the console and everything else private — a dedicated bind address exists for the API gateway alone (
PORTLANE_APIM_BIND_ADDR); it is protected by token auth, payload signatures, and rate limiting. See Partner access. - Do not expose Postgres (5432/5433) on the public Internet.
- Firewall: SSH (restricted), 80/443 for the reverse proxy only.
Related guides
Developer setup
portlane-pipelines, CI, secrets on instance
ReadGetting started
Prerequisites and first flow
ReadArchitecture
Control plane vs data plane
ReadOn-prem runbooks (install script, runners, deploy/publish.env) ship in the customer bundle documentation inside your Control Tower (/docs).