Despre Linux

  • Facebook
  • Twitter
  • LinkedIn
  • Acasă
  • Linux
    • Comenzi Linux
    • Tutoriale
  • Kubernetes
  • RHCSA
    • Exerciții RHCSA
    • SELinux
    • Permisiuni
  • General
    • Open source
  • Contact

Hetzner Cloud, Terraform și Virtualmin

29 octombrie 2020 By Bobses Un comentariu

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 hcloud
  • terraform validate pentru validarea configurației din punctul de vedere al sintaxei
  • terraform 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 [email protected]`.

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!

Partajează asta:

  • Dă clic pentru a partaja pe Facebook(Se deschide într-o fereastră nouă)
  • Dă clic pentru a partaja pe LinkedIn(Se deschide într-o fereastră nouă)
  • Dă clic pentru a partaja pe Twitter(Se deschide într-o fereastră nouă)

Similare

Din categoria: Tutoriale Etichete: Hetzner Cloud, IaC, Terraform, Virtualmin, VPS

Trackbacks

  1. Hetzner Cloud, Pulumi și Virtualmin | Despre Linux spune:
    4 noiembrie 2020 la 17:38

    […] articolul precedent am folosit Terraform pentru a crea un server nou în Hetzner Cloud, după care am instalat și […]

    Răspunde

Lasă un răspuns Anulează răspunsul

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Copyright © 2023 · Bobses

Administrează consimțămintele pentru cookie-uri
Pentru a oferi cea mai bună experiență, folosim tehnologii, cum ar fi cookie-uri, pentru a stoca și/sau accesa informațiile despre dispozitive. Consimțământul pentru aceste tehnologii ne permite să procesăm date, cum ar fi comportamentul de navigare sau ID-uri unice pe acest site. Dacă nu îți dai consimțământul sau îți retragi consimțământul dat poate avea afecte negative asupra unor anumite funcționalități și funcții.
Funcționale Mereu activ
Stocarea tehnică sau accesul sunt strict necesare în scopul legitim de a permite utilizarea unui anumit serviciu cerut în mod explicit de către un abonat sau un utilizator sau în scopul exclusiv de a executa transmiterea unei comunicări printr-o rețea de comunicații electronice.
Preferințe
Stocarea tehnică sau accesul este necesară în scop legitim pentru stocarea preferințelor care nu sunt cerute de abonat sau utilizator.
Statistici
Stocarea tehnică sau accesul care sunt utilizate exclusiv în scopuri statistice. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
Stocarea tehnică sau accesul sunt necesare pentru a crea profiluri de utilizator pentru a trimite publicitate sau pentru a urmări utilizatorul pe un site web sau pe mai multe site-uri web în scopuri de marketing similare.
Administrează opțiunile Administrează serviciile Administrează vânzătorii Citește mai multe despre aceste scopuri
Vizualizează preferințele
{title} {title} {title}