Hetzner Cloud: лучшее европейское облако
Hetzner Cloud — немецкий облачный провайдер с серверами в Германии, Финляндии и США. Соотношение цена/производительность одно из лучших на рынке: CX22 (2 vCPU / 4 GB) стоит €4.35/мес.
Установка hcloud CLI
# Linux
wget https://github.com/hetznercloud/cli/releases/latest/download/hcloud-linux-amd64.tar.gz
tar -xzf hcloud-linux-amd64.tar.gz
mv hcloud /usr/local/bin/
# Аутентификация (токен из Cloud Console)
hcloud context create my-project
# Введите API токенСоздание сервера
# Посмотреть доступные типы серверов
hcloud server-type list
# Посмотреть образы
hcloud image list --type system
# Создать сервер
hcloud server create \
--name web-01 \
--type cx22 \
--image ubuntu-24.04 \
--location nbg1 \
--ssh-key my-key
# Список серверов
hcloud server listFirewall через CLI
# Создать правила firewall
hcloud firewall create --name web-firewall
hcloud firewall add-rule web-firewall \
--direction in --protocol tcp --port 22 \
--source-ips 0.0.0.0/0,::0/0
hcloud firewall add-rule web-firewall \
--direction in --protocol tcp --port 80 \
--source-ips 0.0.0.0/0,::0/0
hcloud firewall add-rule web-firewall \
--direction in --protocol tcp --port 443 \
--source-ips 0.0.0.0/0,::0/0
# Применить к серверу
hcloud firewall apply-to-server web-firewall --server web-01Управление через API (cURL)
TOKEN="your_api_token"
# Список серверов
curl -H "Authorization: Bearer $TOKEN" \
https://api.hetzner.cloud/v1/servers
# Создать сервер через API
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "api-server",
"server_type": "cx22",
"image": "ubuntu-24.04",
"location": "nbg1"
}' \
https://api.hetzner.cloud/v1/serversFloating IP и Load Balancer
# Создать Floating IP
hcloud floating-ip create --type ipv4 --home-location nbg1
# Привязать к серверу
hcloud floating-ip assign 12345678 --server web-01
# Создать Load Balancer
hcloud load-balancer create \
--name lb-01 \
--type lb11 \
--location nbg1
hcloud load-balancer add-target lb-01 \
--type server --server web-01Снапшоты и резервные копии
# Создать снапшот
hcloud server create-image web-01 \
--type snapshot \
--description "Before update $(date +%Y-%m-%d)"
# Включить автобэкап
hcloud server enable-backup web-01https://<location>.your-objectstorage.com.Разбор реальных ошибок API
Hetzner Cloud API возвращает структурированные JSON-ошибки с полем code — по нему легко понять причину, не гадая по HTTP-статусу.
resource_unavailable
{"error":{"code":"resource_unavailable","message":"Server type cx22 not available in location nbg1"}}Не каждый тип сервера доступен в каждом датацентре — например, часть линеек CCX или CPX может отсутствовать в конкретной локации из-за загрузки мощностей. Проверьте доступность конкретной связки через hcloud server-type list и попробуйте соседний регион (fsn1, hel1).
uniqueness_error
{"error":{"code":"uniqueness_error","message":"resource already exists"}}Имя сервера, SSH-ключа или firewall уже занято в вашем проекте — Hetzner требует уникальности имён ресурсов одного типа внутри проекта. Добавьте суффикс с датой или окружением: web-01-prod вместо просто web-01.
Сравнение линеек серверов Hetzner
| Тип | vCPU | RAM | Диск | Особенность |
|---|---|---|---|---|
| CX22 | 2 (shared) | 4 GB | 40 GB NVMe | Общие ядра, дешевле всего |
| CPX21 | 3 (shared, AMD) | 4 GB | 80 GB NVMe | Больше CPU-производительности на ту же RAM |
| CCX13 | 2 (dedicated) | 8 GB | 80 GB NVMe | Выделенные ядра для стабильной нагрузки |
Когда Hetzner Cloud не подходит
- Нужен физический выделенный сервер с полным контролем над железом — это линейка Hetzner Dedicated/Robot, отдельный продукт с другим API, не hcloud.
- Нужен датацентр за пределами Европы или США-Восток — у Hetzner Cloud нет регионов в Азии, Южной Америке или Африке.
- Нужен официальный образ Windows Server из каталога — hcloud image list ориентирован в первую очередь на Linux-дистрибутивы.
- Нужен широкий выбор GPU-инстансов для ML-инференса — линейка GPU у Hetzner Cloud заметно у́же, чем у AWS или GCP.
- Нужен managed Kubernetes с control-plane от самого провайдера — Hetzner Cloud даёт только сырые VPS, k3s или полноценный кластер придётся разворачивать самостоятельно.
Проверка результата
# Сервер создан и в статусе running
hcloud server describe web-01 -o json | grep status
# Firewall реально применён к серверу
hcloud firewall describe web-firewall
# SSH проходит по ключу, не по паролю
ssh -o PasswordAuthentication=no -o PreferredAuthentications=publickey root@SERVER_IP echo ok
# API токен рабочий и видит проект
curl -s -o /dev/null -w "%{http_code}\n" -H "Authorization: Bearer $TOKEN" https://api.hetzner.cloud/v1/serversКод ответа 401 от API означает недействительный или отозванный токен — перевыпустите его в Cloud Console (Security → API Tokens). Если сервер создаётся как часть регулярного процесса, вынесите шаги в Terraform-конфигурацию вместо ручных вызовов hcloud, а деплой приложения на готовый сервер — в CI/CD через GitHub Actions.