Hetzner Cloud este un excelent cloud provider din Germania pe care îl folosesc de câțiva ani și-l recomand cu încredere (prețuri decente și stabilitate). În acest articol voi prezenta un scurt scurt exemplu de cum poate fi creat un server nou în Hetzner Cloud și apoi instalat panoul de control Virtualmin folosind Terraform. Așadar, Hetzner Cloud și Terraform!
Presupunem că aveți deja Terraform instalat - eu am rulat codul din acest articol cu versiunea 0.13.2.
Hetzner Cloud (hcloud) este providerul utilizat pentru a interactiona cu resursele suportate de Hetzner Cloud. Înainte de a putea fi folosit, providerul trebuie configurat cu credențialele adecvate. Pluginul Terraform pentru Hetzner Cloud va fi instalat la rularea comenzii terraform init
.
Generare token Hetzner Cloud
Acum, trebuie generat un nou API token în consola Hetzner Cloud: Security - API TOKENS - GENERATE API TOKEN.
Creare fișiere Terraform
Vom face prima dată un fișier terraform.tfvars în care vom insera tokenul obținute la pasul anterior:
hcloud_token = "......6i....UgpsfjPliO.....cLLp"
Fișierul de configurare pentru Terraform (hcloud.tf) va conține:
# Set the variable value in *.tfvars file
# or using the -var="hcloud_token=..." CLI option
variable "hcloud_token" {}
# Configure the Hetzner Cloud Provider
provider "hcloud" {
token = var.hcloud_token
}
# Create a new SSH key
resource "hcloud_ssh_key" "default" {
name = "Terraform"
public_key = file("~/.ssh/id_rsa.pub")
}
# Create a server
resource "hcloud_server" "web" {
name = "centos8"
image = "centos-8"
server_type = "cx11"
location = "nbg1"
ssh_keys = [hcloud_ssh_key.default.name]
connection {
type = "ssh"
host = self.ipv4_address
user = "root"
private_key = file("~/.ssh/id_rsa")
}
provisioner "file" {
source = "userdata.sh"
destination = "/tmp/userdata.sh"
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/userdata.sh",
"/tmp/userdata.sh",
]
}
}
output "public_ip4" {
value = hcloud_server.web.ipv4_address
}
Pe scurt, se definește variabila pentru token, providerul hcloud, se creează o cheie SSH cu care ne vom putea conecta pe noua mașină din cloudul Hetzner, după care configurăm resursa pentru crearea efectivă a serverului: am ales cea mai mică instanță (de tipul cx11) cu Centos 8 (de curând Virtualmin a devenit suportat și pe Centos 8) și am folosit 2 provizioners pentru a face modificări asupra resursei create (inserarea cheii SSH și urcarea unui fișier cu ajutorul căruia vom instala panoul web Virtualmin).
La output vom avea IP-ul instanței.
Instalare Virtualmin
Fișierul userdata.sh conține codul bash care permite instalarea Virtualmin: se va face upgrade-ul distribuției Centos8, se va seta un hostname (atenție la alegerea lui, căci este obligatoriu pentru instalarea fără probleme a Virtualmin), se stabilește un utilizator care va fi adăugat în grupul wheel (după prima logare se va schimba parola sa), se copie cheia SSH în home-ul acestui utilizator (pentru a nu ne conecta cu root) și se instalează Virtualmin.
dnf upgrade -y
timedatectl set-timezone "Europe/Bucharest"
hostnamectl set-hostname YOUR_DESIRED_HOSTNAME --static --pretty --transient
sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
systemctl restart sshd
adduser YOUR_USERNAME
# Change the following password after first login!!!
echo 'ChangeMe' | passwd --stdin YOUR_USERNAME
usermod -aG wheel YOUR_USERNAME
mkdir -p /home/YOUR_USERNAME/.ssh
chmod 700 /home/YOUR_USERNAME/.ssh
cp -a /root/.ssh/authorized_keys /home/YOUR_USERNAME/.ssh/authorized_keys && rm -f /root/.ssh/authorized_keys
chown -R YOUR_USERNAME:YOUR_USERNAME /home/YOUR_USERNAME
dnf install -y wget
wget http://software.virtualmin.com/gpl/scripts/install.sh -v -O install.sh; bash install.sh -f
Rulare Terraform
A rămas partea simplă: rularea comenzilor Terraform.
terraform init
pentru inițializare și descărcarea providerului hcloudterraform validate
pentru validarea configurației din punctul de vedere al sintaxeiterraform plan -out hcloud.tfplan
terraform apply "hetzner.tfplan
"terraform destroy
dacă doriți să distrugeți ce ați făcut și s-o luați de la început cu alte setări
După puțin timp, noua instanță este creată și o putem vedea în consola Hetzner Cloud. De asemenea, output-ul terrafom ne va furiza și IP-ul acestei instanțe, astfel încât să ne putem conecta la ea cou comanda `ssh YOUR_USERNAME@IPv4`.
Precizări
- La prima rulare a comenzii
terraform init
am primit următoarea eroare:
Initializing the backend…
Initializing provider plugins…
Finding latest version of hashicorp/hcloud…
Error: Failed to install providers
Could not find required providers, but found possible alternatives:
hashicorp/hcloud -> hetznercloud/hcloud
If these suggestions look correct, upgrade your configuration with the
following command:
terraform 0.13upgrade .
Rezolvarea este furnizată în corpul erorii: se rulează comanda terraform 0.13upgrade .
.
- Schimbați parola userului vostru din ChangeMe în orice altceva.
- Userul root de pe server nu are parolă. Este necesară crearea unei parole pentru root, fără de care nu vom putea accesa panoul web Virtualmin.
- Accesăm Virtualmin la adresa https://IPV4:10000, folosind ca date de autentificare userul root și parola sa configurată în pasul anterior.
- Codul Terraform și fișierul userdata.sh (care trebuie editat cu hostname-ul și username-ul dorite de voi) pot fi găsite în GitLab aici: https://gitlab.com/Bobses/hetzner-terraform
- Spor la treabă cu Hetzner Cloud și Terraform!
[…] articolul precedent am folosit Terraform pentru a crea un server nou în Hetzner Cloud, după care am instalat și […]