Despre Linux

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

Hetzner Cloud, Pulumi și Virtualmin

4 noiembrie 2020 By Bobses Lasă un comentariu

În articolul precedent am folosit Terraform pentru a crea un server nou în Hetzner Cloud, după care am instalat și panoul web Virtualmin. În acest articol voi prezenta același lucru, doar că voi folosi Pulumi în loc de Terraform. Așadar, Hetzner Cloud și Pulumi!

Pulumi este tot un instrument utilizat pentru IaC (Infrastructure as Code) și se aseamănă cu Terraform, în sensul că putem crea, lansa și gestiona infrastructură IT în orice cloud. Dar, spre deosebire de Terraform care folosește un limbaj de programare propriu (HashiCorp Configuration Language - HCL), Pulumi permite folosirea limbajelor de programare existente pentru a ajunge la același scop (Typescript, Javascript, Go, Python - în exemplul meu voi utiliza Typescript. La fel ca Terraform, Pulumi este open source pe GitHub și se poate folosi gratuit.

Se va folosi providerul Hetzner Cloud pentru Pulumi pentru a proviziona și gestiona resursele disponibile în Hetzner Cloud. Repository in GitHub aici: https://github.com/pulumi/pulumi-hcloud.

Lansare proiect nou

Pentru a începe un proiect nou în Pulumi, trebuie să fim într-un director gol și să rulăm următoarele comenzi:

pulumi new --> din lista alegem Typescript

npm install @pulumi/hcloud --> pentru instalarea dependințelor necesare providerului Hetzner Cloud

initializare-proiect-pulumi-hetzner-01

Generare token Hetzner Cloud

Acum, trebuie generat un nou API token în consola Hetzner Cloud: Security - API TOKENS - GENERATE API TOKEN.

Configurare credențiale Hetzner Cloud în Pulumi

Conform documentației, avem 2 posibilități pentru a-i arăta lui Pulumi acest token:

  1. setarea tokenului prin intermediul unei variabile de mediu (este varianta aleasă de mine):
    export HCLOUD_TOKEN=XXXXXXXXXXXXXXXXXXXX
  2. setarea folosind configurarea Pulumi, dacă se preferă stocarea împreună cu stack-ul (util pentru colaborarea multi-users):
    pulumi config set hcloud:token XXXXXXXXXXXXXX --secret

Creare fișiere Pulumi

În Pulumi, fișierul index.ts definește resursele stack-ului. Așadar, în acest fișier vom avea:

  • declarații pentru importul bibliotecilor necesare;
  • crearea unei chei SSH pentru a ne putea conecta la noua mașină din cloudul Hetzner (vom folosi functia readFileSync pentru a citi cheia publică SSH dintr-un fișier - se va indica calea absolută către fișier);
  • crearea noului server în Hetzner Cloud: am stabilit imaginea ca fiind centos-8, numele instanței, tipul serverului (am ales cx11, cea mai mică instanță ideală pentru astfel de teste, dar schimbați-o în funcție de nevoile voastre), am stabilit datacenterul unde va fi ridicat noul server, i-am indicat cheia SSH și i-am indicat fișierul userdata.sh (citit tot cu funcția readFileSync) care instalează Virtualmin;
  • la final, afișăm ca output IP-ul public al noii instanțe (necesar pentru a accesa Virtualmin).

Fișierul nostru index.ts va arăta astfel:

import * as pulumi from "@pulumi/pulumi";
import * as hcloud from "@pulumi/hcloud";
import { output } from "@pulumi/pulumi";
import * as fs from "fs";
import { SshKey } from "@pulumi/hcloud";

// Create a new SSH key
const sshKey = new hcloud.SshKey("my_key",
  {
    name: "my-key",
    publicKey: fs.readFileSync("ABSOLUTE_PATH_TO_SSH_KEY/id_rsa.pub").toString(),
    //the following line works too (if you choose to add the content of the public ssh key):
    //publicKey: "ssh-rsa ZZZuiaC1[...nl8nPnW1[...]yDUYPOfwQ[...]"
  });

const server1 = new hcloud.Server("node01", {
  image: "centos-8",
  name: "plm-centos8",
  serverType: "cx11",
  datacenter: "nbg1-dc3",
  sshKeys: [sshKey.name],
  userData: fs.readFileSync("./userdata.sh").toString(),
},
{
  dependsOn: [sshKey]
  },
);  

export const publicIP = server1.ipv4Address;

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.

Fișierul userdata.sh conține:

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 Pulumi

Pulumi se rulează simplu cu comanda `pulumi up`:

pulumi-up

Precizări

  • 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 Pulumi ș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-pulumi
  • Spor la treabă cu Hetzner Cloud și Pulumi!

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ă)
  • Click to share on Twitter(Se deschide într-o fereastră nouă)

Similare

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

Lasă un răspunsAnulează răspunsul

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

Copyright © 2025 · 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 {vendor_count} Citește mai multe despre aceste scopuri
Vizualizează preferințele
{title} {title} {title}