Capitolo 1 · 1.9
cloud-init personalizzato: configurare automaticamente il Suo VPS al primo avvio
Con cloud-init, durante l'installazione Lei fornisce un file che il Suo VPS esegue da solo al primo avvio. In questo modo il server installa subito i Suoi pacchetti abituali, crea il Suo utente ed esegue i Suoi comandi. È utile se reinstalla spesso o se desidera partire sempre dalla stessa base. Non Le servono né un'API né un terminale.
Dove si inserisce?
- Apra la schermata del VPS tramite I miei prodotti.
- Nuovo VPS: vedrà il riquadro Installi il Suo VPS (vedere Installare la Sua VPS: sistema operativo, password e chiave SSH). Reinstallazione: scelga la scheda Avanzate e, alla voce Reinstallazione, clicchi su Reinstalla... (vedere Reinstallare o collegare una ISO).
- Scelga il sistema operativo e inserisca la password di root ed eventualmente la Sua chiave SSH, come di consueto.
- Sotto la chiave SSH, clicchi su cloud-init personalizzato. Il campo si apre.
- Incolli il Suo file nel campo.
- Clicchi sul pulsante per installare, ad esempio Installa Debian 13, oppure, in caso di reinstallazione, su Cancella tutto e reinstalla.
La password di root o la chiave SSH restano necessarie, anche con un cloud-init personalizzato. Con queste può sempre accedere, anche tramite la console (vedere La console: il Suo VPS nel browser).
Cosa può contenere il file?
Il campo accetta user-data, il file che cloud-init legge al primo avvio. La prima riga determina di che tipo di file si tratta:
| Prima riga | Di cosa si tratta? |
|---|---|
#cloud-config | Impostazioni in YAML: pacchetti, utenti, file, comandi. È l'opzione che userà più spesso. |
#!, ad esempio #!/bin/bash | Uno script. Viene eseguito una sola volta come root, alla fine del primo avvio. |
#cloud-boothook | Uno script eseguito molto presto durante l'avvio, di nuovo a ogni avvio. Solo per utenti esperti. |
## template: jinja | Un modello con variabili di cloud-init. Nella riga successiva si trova quindi #cloud-config o #!. |
- Massimo 256 KB, e solo testo (UTF-8).
- In YAML si indenta con gli spazi, mai con le tabulazioni.
- La rete (IPv4 e IPv6) è gestita da WebOké. Un network-config personalizzato non viene utilizzato, quindi non inserisca impostazioni di rete.
Un esempio
Questo file aggiorna tutti i pacchetti, installa htop e fail2ban, crea l'utente anna con la Sua chiave SSH e sudo, assegna al server un nome proprio e imposta il fuso orario corretto:
#cloud-config
hostname: web1
fqdn: web1.example.com
package_update: true
package_upgrade: true
packages:
- htop
- fail2ban
users:
- default
- name: anna
shell: /bin/bash
sudo: "ALL=(ALL) NOPASSWD:ALL"
ssh_authorized_keys:
- ssh-ed25519 AAAAC3Nza... anna@laptop
runcmd:
- timedatectl set-timezone Europe/Amsterdam
Sostituisca la chiave con la Sua chiave pubblica (vedere Creare una chiave SSH su Windows, Mac e Linux). La riga - default mantiene l'utente predefinito, così la password di root e la chiave SSH del modulo continuano a funzionare normalmente. Dopo il primo avvio, acceda con ssh anna@203.0.113.10. Come disattivare poi l'accesso come root e configurare fail2ban è spiegato in Disattivare l'accesso con password e come root e fail2ban contro i tentativi di indovinare la password.
Suggerimento: L'esempio è pensato per Debian e Ubuntu. Su AlmaLinux e Rocky Linux, htop e fail2ban si trovano nel repository aggiuntivo EPEL. Lì ometta packages e sotto runcmd inserisca prima dnf install -y epel-release e poi dnf install -y htop fail2ban.
Cosa fornisce WebOké di suo?
WebOké fornisce sempre il nome host, la password di root (solo come hash) e la Sua chiave SSH. Il Suo file viene unito a questi dati. Se imposta Lei stesso users, password, chpasswd o ssh_authorized_keys, i Suoi valori prevalgono su quelli forniti da WebOké.
Attenzione: Se imposta Lei stesso ssh_authorized_keys o password al livello più alto del Suo file, questi sostituiscono la chiave e la password del modulo. In tal caso inserisca Lei stesso la chiave con cui desidera accedere, altrimenti potrà accedere solo tramite la console.
Ha funzionato?
cloud-init viene eseguito una sola volta, al primo avvio dopo l'installazione. A volte richiede qualche minuto in più rispetto all'installazione stessa, soprattutto se vengono installati dei pacchetti. Acceda e controlli:
anna@web1:~$ cloud-init status --long
anna@web1:~$ sudo tail -n 30 /var/log/cloud-init-output.log
anna@web1:~$ sudo cloud-init schema --system
cloud-init status --longmostrastatus: donequando tutto è pronto,runningse è ancora in corso eerrorse qualcosa è andato storto, con l'errore indicato. Concloud-init status --waitattende che abbia terminato.- In
/var/log/cloud-init-output.logtrova l'output dei Suoi pacchetti, comandi e script. Maggiori dettagli si trovano in/var/log/cloud-init.log. cloud-init schema --systemcontrolla il Suo file alla ricerca di errori. Se lo YAML non è corretto, cloud-init salta le parti che non comprende, senza che l'installazione fallisca.
Qualcosa è andato storto? Lo corregga manualmente sul server, oppure modifichi il Suo file e reinstalli. Tenga presente che la reinstallazione cancella tutto il contenuto del Suo VPS.
Buono a sapersi
- Funziona con tutti i sistemi operativi dell'elenco: Ubuntu 24.04 e 26.04, Debian 12 e 13, AlmaLinux 9 e 10 e Rocky Linux 9 e 10.
- Il Suo file viene trasmesso in forma crittografata e non viene conservato nella cronologia delle attività del Suo VPS. Eviti comunque di inserirvi password o altri dati riservati che non Le servono.
- Tutte le possibilità sono descritte nella documentazione di cloud-init su docs.cloud-init.io.
Attenzione: Il contenuto del Suo cloud-init è di Sua responsabilità. Il supporto non esamina il Suo file e non aiuta a scriverlo o a migliorarlo.
