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.