К основному содержимому

Hetzner Cloud: создание и настройка серверов через API

Облако и DevOps · 19.04.2026 · 4 мин чтения
Иллюстрация к статье «Hetzner Cloud: создание и настройка серверов через API»

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 list

Firewall через 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/servers

Floating 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-01
Object Storage: Hetzner предлагает S3-совместимое хранилище Object Storage от €3.49/мес за 1 TB. Подключайте через rclone или AWS SDK с endpoint https://<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

ТипvCPURAMДискОсобенность
CX222 (shared)4 GB40 GB NVMeОбщие ядра, дешевле всего
CPX213 (shared, AMD)4 GB80 GB NVMeБольше CPU-производительности на ту же RAM
CCX132 (dedicated)8 GB80 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.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке