Skip to content

Hetzner Cloud & Multi-Provider DNS

epd includes native integrations with Hetzner Cloud and automated DNS synchronization across Cloudflare and Hetzner DNS.


1. Multi-Provider DNS Automation

epd can automatically manage and synchronize A and AAAA records for all configured service routes.

Configuration (epd.yml)

yaml
# Unified DNS configuration
dns:
  provider: cloudflare # or "hetzner"
  api_token: ${DNS_API_TOKEN}
  # zone_id: ...      # Optional; auto-discovered from domain name
  proxied: true       # Cloudflare CDN/proxy (default: true)
  ttl: 300            # Hetzner default: 300; Cloudflare: 1 (auto)
  auto_sync: true     # Sync records automatically on setup and deploy

(Legacy cloudflare: configuration is also supported).

CLI Commands

bash
# Check status of domains vs server IPs
epd dns status

# Synchronize DNS records
epd dns sync

# Preview changes without modifying records
epd dns sync --dry-run

# Disable Cloudflare CDN proxy (DNS-only)
epd dns sync --no-proxied

2. Hetzner Cloud Integration

Manage and provision Hetzner Cloud servers directly with epd hetzner:

CLI Commands

bash
# List all Hetzner servers in your project
epd hetzner list

# Inspect available server types, vCPUs, RAM, and pricing (EUR/mo)
epd hetzner types

# Inspect available datacenter locations
epd hetzner locations

# Create a new server (default: cx22 in fsn1 with ubuntu-24.04)
epd hetzner create prod-web-1 --type cx22 --location fsn1

# Create and automatically prepare with Docker, PM2, and Traefik:
epd hetzner create prod-web-1 --setup

# Delete a server
epd hetzner delete prod-web-1

Dynamic Target Servers in epd.yml

Instead of static IP addresses, you can target servers by name or label selector:

yaml
hetzner:
  api_token: ${HETZNER_API_TOKEN}

servers:
  web:
    hosts:
      - hetzner:prod-web-1              # Target single server by name
      - hetzner:label:app=web,env=prod   # Target all servers matching labels
    port: 3000
    domains: [example.com]

When deploying (epd deploy or epd setup), epd dynamically queries the Hetzner Cloud API to resolve targets to their live public IP addresses.


Released under the MIT License.