Terraform-провайдер elistrax
Управляйте VPS-парком как кодом. Провайдер elistrax/elistrax покрывает: серверы, домены, DNS-записи, snapshots, firewall-правила, SSH-ключи.
Установка
main.tf:
terraform {
required_providers {
elistrax = {
source = "elistrax/elistrax"
version = "~> 1.0"
}
}
}
provider "elistrax" {
# Токен из панели → API → Tokens
token = var.elistrax_token
}Инициализация:
terraform initAPI-токен
1. Панель → API → Tokens → Create. 2. Дайте scope: servers:write, dns:write, billing:read — в зависимости от того, что автоматизируете. 3. Скопируйте токен. Больше он не покажется.
Экспортируйте:
export TF_VAR_elistrax_token='...'Первый сервер
resource "elistrax_ssh_key" "main" {
name = "laptop-2026"
public_key = file("~/.ssh/id_ed25519.pub")
}
resource "elistrax_server" "web" {
name = "web-01"
location = "fsn1" # Falkenstein
plan = "cpx21" # 3 vCPU, 4 GB RAM, 80 GB NVMe
image = "ubuntu-24.04"
ssh_key_ids = [elistrax_ssh_key.main.id]
labels = {
env = "prod"
role = "web"
}
}
output "web_ip" {
value = elistrax_server.web.ipv4
}Применить:
terraform plan
terraform applyСервер поднимется за 30-90 секунд.
DNS-запись
resource "elistrax_dns_zone" "main" {
name = "example.com"
}
resource "elistrax_dns_record" "web" {
zone_id = elistrax_dns_zone.main.id
name = "@"
type = "A"
value = elistrax_server.web.ipv4
ttl = 300
}
resource "elistrax_dns_record" "www" {
zone_id = elistrax_dns_zone.main.id
name = "www"
type = "CNAME"
value = "example.com."
ttl = 300
}Firewall
resource "elistrax_firewall" "web" {
name = "web-fw"
rule {
direction = "in"
protocol = "tcp"
port = "22"
source_ips = ["1.2.3.4/32"] # только с офиса
}
rule {
direction = "in"
protocol = "tcp"
port = "80"
source_ips = ["0.0.0.0/0"]
}
rule {
direction = "in"
protocol = "tcp"
port = "443"
source_ips = ["0.0.0.0/0"]
}
}
resource "elistrax_server_firewall" "web" {
server_id = elistrax_server.web.id
firewall_id = elistrax_firewall.web.id
}Snapshots
resource "elistrax_snapshot" "web_backup" {
server_id = elistrax_server.web.id
description = "before-migration-2026-07"
}Snapshot делается за 1-3 минуты, тарифицируется по $0.01/GB/месяц.
Модуль для нескольких серверов
locals {
servers = {
web-01 = { role = "web", plan = "cpx21" }
web-02 = { role = "web", plan = "cpx21" }
db-01 = { role = "db", plan = "cpx41" }
}
}
resource "elistrax_server" "cluster" {
for_each = local.servers
name = each.key
location = "fsn1"
plan = each.value.plan
image = "ubuntu-24.04"
ssh_key_ids = [elistrax_ssh_key.main.id]
labels = {
env = "prod"
role = each.value.role
}
}State и командная работа
Не храните terraform.tfstate в git — там токены и IP. Используйте remote state:
- S3 backend (BackBlaze B2, Wasabi) — самый простой.
- Terraform Cloud — бесплатно до 5 пользователей.
terraform {
backend "s3" {
endpoint = "s3.us-west-002.backblazeb2.com"
bucket = "tfstate-prod"
key = "elistrax/prod.tfstate"
region = "us-west-002"
encrypt = true
}
}