Provisions Hetzner Cloud servers, volumes, private networks, and firewalls via the hcloud CLI and the Pulumi/Terraform hcloud provider; plans CAX/arm64 sizing; configures backups, snapshots, and DR rebuilds. Use when creating or resizing Hetzner servers, attaching volumes, configuring private networks or firewalls, choosing server types, scripting hcloud commands, or authoring hcloud IaC resources.
76
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Facts that drift (prices, SKUs, locations, limits) go stale — prefer retrieval over pre-training: hcloud server-type list -o json, hcloud location list, docs.hetzner.com. Everything below is behavior, not price sheets. If the project documents a topology (e.g. docs/architecture/), read it before provisioning anything.
hcloud server-type list. arm64 requires multi-arch container images end-to-end.
hcloud server-type describe <type> shows the target location.role=web) scales better than per-server IDs.
0.0.0.0/0.server rebuild (keeps IPs) or replace via IaC.fstab entry, not just automount).hcloud server enable-protection <s> delete rebuild + same for volumes.
hcloud server describe before real data lands.ufw) or not at all. This is the most common Hetzner security misconception.daemon.json "mtu": 1450) and any overlay/VPN on top, or suffer silent large-packet stalls.eu-central = fsn1/nbg1/hel1) span DCs — cross-DC private traffic works and is free.auto_delete is set — orphaned IPs keep billing.change-type (resize) requires ACPI shutdown first (hcloud server shutdown, not poweroff — that's a hard cut risking fs damage). CPU/RAM can downgrade later only with --keep-disk; disk never shrinks.server rebuild wipes the disk but keeps all IPs — the fast DR path when the root cause is software.http://169.254.169.254/hetzner/v1/metadata (useful in cloud-init to self-discover private IP).hcloud volume resize, run resize2fs/xfs_growfs yourself; nothing automatic.automount mounts under /mnt/<volume-name> via udev — fine for experiments, wrong for services. Use an explicit fstab entry (discard,nofail) at a stable path; nofail so a detached volume doesn't hang boot.| Backups | Snapshots | |
|---|---|---|
| Trigger | Automatic daily, 7 rolling | Manual |
| Cost | +20% of server price | Per GB stored |
| Survives server deletion | No | Yes |
| Can seed a new server | No (convert to snapshot first) | Yes (--image <snapshot-id>) |
Backup→snapshot conversion exists — do it before deleting a server whose history matters. Neither replaces app-level data exports — Hetzner backups are crash-consistent block copies, not application backups.
hcloud provider)userData replaces the server. Deliberate for cattle; catastrophic for stateful nodes. Keep volatile config out of cloud-init (runtime config management owns it) and treat any cloud-init diff as a planned node replacement — or ignoreChanges: ["userData"] on pet servers.serverType change is a replacement in IaC even though the console/CLI resizes in place. To resize without replacement: hcloud server change-type manually, then refresh state + update code.firewallIds wants numbers — firewall.id.apply(Number). Inline networks on the Server conflicts with a separate ServerNetwork resource — pick one.backups: true toggles in place (safe anytime). IaC-level protect only blocks the IaC tool — set hcloud-side delete/rebuild protection too; they guard different doors.HCLOUD_TOKEN env (CI/agents) — per-project tokens, read-write only where needed.export HCLOUD_TOKEN=... # stateless auth for CI/agents; `hcloud context` for humans
hcloud server list -o columns=name,status,ipv4,type -o noheader
hcloud server ssh my-server # no IP lookup, uses your agent keys
hcloud server create-image my-server --type snapshot --description "pre-change $(date +%F)"
hcloud volume list -o json | jq -r '.[] | select(.server==null) | .name' # orphaned volumes
hcloud primary-ip list -o json | jq -r '.[] | select(.assignee_id==null) | .ip' # orphaned IPs
hcloud server shutdown my-server \
&& hcloud server change-type my-server --server-type cax31 --keep-disk \
&& hcloud server poweron my-server # in-place upgrade, downgrade-capable| Anti-pattern | Fix |
|---|---|
| Trusting Cloud Firewall for private-net isolation | Host-level ufw; Cloud Firewall covers public interface only |
SSH open to 0.0.0.0/0 | Admin-IP allowlist in firewall rules (or SSH over tunnel only) |
poweroff before resize/maintenance | shutdown (ACPI graceful), then operate |
Editing userData on a stateful server in IaC | Post-boot config mgmt; ignoreChanges or planned replacement |
Relying on automount for service data | Explicit fstab (discard,nofail) at a stable mount point |
| Assuming CAX exists in every location | EU-only; check server-type list before designing |
| Deleting servers and assuming cleanup | Sweep volumes/snapshots/primary IPs — they persist and bill |
| Hetzner Backups as the only backup | App-level exports to object storage; backups die with the server |
| Resource | Purpose |
|---|---|
| https://docs.hetzner.com/cloud/ | Authoritative, current limits/prices |
| https://www.pulumi.com/registry/packages/hcloud/ | Pulumi provider resource reference |
| https://registry.terraform.io/providers/hetznercloud/hcloud/latest/docs | Terraform provider reference |
| deployment capability skill | Platform-level deploy/env-var/cron patterns |
f297837
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.