Kapitola 1 · 1.9
Vlastní cloud-init: automatické nastavení VPS při prvním spuštění
Pomocí cloud-init můžete při instalaci přiložit soubor, který Váš VPS sám provede při prvním spuštění. Server tak hned nainstaluje Vaše obvyklé balíčky, vytvoří Vašeho vlastního uživatele a spustí Vaše příkazy. Hodí se to, pokud často přeinstalováváte nebo chcete vždy začínat se stejným základem. Nepotřebujete k tomu API ani terminál.
Kde to vyplníte?
- Otevřete obrazovku VPS přes Moje produkty.
- Nový VPS: uvidíte blok Nainstalujte svůj VPS (viz Instalace VPS: operační systém, heslo a SSH klíč). Přeinstalace: zvolte kartu Pokročilé a u Přeinstalace klikněte na Přeinstalovat... (viz Přeinstalace nebo připojení ISO).
- Zvolte operační systém a vyplňte heslo uživatele root a případně svůj klíč SSH, jako obvykle.
- Pod klíčem SSH klikněte na Vlastní cloud-init. Pole se rozbalí.
- Vložte do pole svůj soubor.
- Klikněte na tlačítko pro instalaci, například Nainstalovat Debian 13, nebo při přeinstalaci na Smazat vše a přeinstalovat.
Heslo uživatele root nebo klíč SSH jsou potřeba i s vlastním cloud-init. Díky nim se vždy dostanete dovnitř, i přes konzoli (viz Konzole: Váš VPS v prohlížeči).
Co smí soubor obsahovat?
Pole přijímá user-data, tedy soubor, který cloud-init čte při prvním spuštění. O jaký typ jde, určuje první řádek:
| První řádek | Co to je? |
|---|---|
#cloud-config | Nastavení v YAML: balíčky, uživatelé, soubory, příkazy. Tuto možnost budete používat nejčastěji. |
#!, například #!/bin/bash | Skript. Spustí se jednou jako root, na konci prvního spuštění. |
#cloud-boothook | Skript, který se spouští velmi brzy během startu, a to při každém spuštění znovu. Pouze pro pokročilé. |
## template: jinja | Šablona s proměnnými cloud-init. Na řádku pod ním pak stojí #cloud-config nebo #!. |
- Maximálně 256 KB, a pouze text (UTF-8).
- V YAML odsazujte mezerami, nikdy tabulátory.
- Síť (IPv4 a IPv6) zajišťuje WebOké. Vlastní network-config se nepoužije, proto do souboru nedávejte žádná nastavení sítě.
Příklad
Tento soubor aktualizuje všechny balíčky, nainstaluje htop a fail2ban, vytvoří uživatele anna s Vaším klíčem SSH a právy sudo, dá serveru vlastní název a nastaví správné časové pásmo:
#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
Klíč nahraďte svým vlastním veřejným klíčem (viz Jak vytvořit klíč SSH ve Windows, na Macu a v Linuxu). Řádek - default ponechá výchozího uživatele, takže heslo uživatele root a klíč SSH z formuláře budou nadále fungovat. Po prvním spuštění se přihlásíte pomocí ssh anna@203.0.113.10. Jak poté vypnout přihlašování jako root a nastavit fail2ban, se dočtete v Vypnutí přihlašování heslem a jako root a fail2ban proti pokusům o uhodnutí hesla.
Tip: Příklad je určen pro Debian a Ubuntu. V AlmaLinux a Rocky Linux jsou htop a fail2ban v doplňkovém zdroji EPEL. Tam vynechte packages a pod runcmd uveďte nejprve dnf install -y epel-release a poté dnf install -y htop fail2ban.
Co přidává WebOké samo?
WebOké vždy předá název hostitele, heslo uživatele root (pouze jako hash) a Váš klíč SSH. Váš soubor se s tím sloučí. Pokud sami nastavíte users, password, chpasswd nebo ssh_authorized_keys, mají Vaše hodnoty přednost před tím, co předává WebOké.
Pozor: Pokud sami nastavíte ssh_authorized_keys nebo password na nejvyšší úrovni svého souboru, nahradí klíč a heslo z formuláře. Uveďte v tom případě sami klíč, kterým se chcete přihlašovat, jinak se dovnitř dostanete už jen přes konzoli.
Povedlo se to?
cloud-init běží jednou, při prvním spuštění po instalaci. Někdy to trvá o pár minut déle než samotná instalace, zejména pokud se instalují balíčky. Přihlaste se a zkontrolujte:
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 --longzobrazístatus: done, když je vše hotové,running, když ještě běží, aerror, když se něco pokazilo, i s chybou. Pomocícloud-init status --waitpočkáte, dokud nebude hotový.- V
/var/log/cloud-init-output.lognajdete výstup Vašich balíčků, příkazů a skriptů. Více podrobností je v/var/log/cloud-init.log. cloud-init schema --systemzkontroluje Váš soubor na chyby. Pokud YAML není v pořádku, cloud-init přeskočí části, kterým nerozumí, aniž by instalace selhala.
Něco se pokazilo? Opravte to ručně na serveru, nebo upravte svůj soubor a přeinstalujte. Přeinstalace ovšem smaže vše na Vašem VPS.
Dobré vědět
- Funguje to pro všechny operační systémy v seznamu: Ubuntu 24.04 a 26.04, Debian 12 a 13, AlmaLinux 9 a 10 a Rocky Linux 9 a 10.
- Váš soubor se předává šifrovaně a neukládá se do historie úloh Vašeho VPS. Přesto do něj nedávejte hesla ani jiná tajemství, která nepotřebujete.
- Všechny možnosti najdete v dokumentaci cloud-init na docs.cloud-init.io.
Pozor: Za obsah svého cloud-init odpovídáte Vy. Podpora Váš soubor nekontroluje a nepomáhá s jeho psaním ani vylepšováním.
