Hoofdstuk 1 · 1.9
Eigen cloud-init: je VPS bij de eerste start automatisch inrichten
Met cloud-init geef je bij het installeren een bestand mee dat je VPS bij de eerste start zelf uitvoert. Zo installeert je server meteen je vaste pakketten, maakt hij je eigen gebruiker aan en voert hij je commando's uit. Handig als je vaker opnieuw installeert of altijd met dezelfde basis wilt beginnen. Je hebt er geen API of terminal voor nodig.
Waar vul je het in?
- Open het VPS-scherm via Mijn Producten.
- Nieuwe VPS: je ziet het blok Installeer je VPS (zie Je VPS installeren: besturingssysteem, wachtwoord en SSH-sleutel). Opnieuw installeren: kies het tabblad Geavanceerd en klik bij Opnieuw installeren op Installeer opnieuw... (zie Opnieuw installeren of een ISO koppelen).
- Kies het besturingssysteem en vul het root-wachtwoord en eventueel je SSH-sleutel in, zoals altijd.
- Klik onder de SSH-sleutel op Eigen cloud-init. Het veld klapt open.
- Plak je bestand in het veld.
- Klik op de knop om te installeren, bijvoorbeeld Installeer Debian 13, of bij opnieuw installeren op Wis alles en installeer opnieuw.
Het root-wachtwoord of de SSH-sleutel blijft nodig, ook met een eigen cloud-init. Daarmee kom je altijd binnen, ook via de console (zie De console: je VPS in je browser).
Wat mag er in het bestand?
Het veld neemt user-data aan, het bestand dat cloud-init bij de eerste start leest. De eerste regel bepaalt wat het is:
| Eerste regel | Wat is het? |
|---|---|
#cloud-config | Instellingen in YAML: pakketten, gebruikers, bestanden, commando's. Dit gebruik je meestal. |
#!, bijvoorbeeld #!/bin/bash | Een script. Het draait één keer als root, aan het eind van de eerste start. |
#cloud-boothook | Een script dat heel vroeg in de start draait, bij elke start opnieuw. Alleen voor gevorderden. |
## template: jinja | Een sjabloon met variabelen van cloud-init. Op de regel daaronder staat dan #cloud-config of #!. |
- Maximaal 256 KB, en alleen tekst (UTF-8).
- In YAML spring je in met spaties, nooit met tabs.
- Het netwerk (IPv4 en IPv6) regelt WebOké. Een eigen network-config wordt niet gebruikt; zet er dus geen netwerkinstellingen in.
Een voorbeeld
Dit bestand werkt alle pakketten bij, installeert htop en fail2ban, maakt de gebruiker anna aan met je SSH-sleutel en sudo, geeft de server een eigen naam en zet de tijdzone goed:
#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
Vervang de sleutel door je eigen publieke sleutel (zie Een SSH-sleutel maken op Windows, Mac en Linux). De regel - default laat de standaardgebruiker staan, zodat het root-wachtwoord en de SSH-sleutel uit het formulier gewoon blijven werken. Na de eerste start log je in met ssh anna@203.0.113.10. Hoe je daarna inloggen als root uitzet en fail2ban instelt, lees je in Inloggen met een wachtwoord en als root uitzetten en fail2ban tegen raadpogingen.
Tip: Het voorbeeld is voor Debian en Ubuntu. Op AlmaLinux en Rocky Linux staan htop en fail2ban in de extra bron EPEL. Laat daar packages weg en zet onder runcmd eerst dnf install -y epel-release en daarna dnf install -y htop fail2ban.
Wat geeft WebOké zelf mee?
WebOké geeft altijd de hostnaam, het root-wachtwoord (alleen als hash) en je SSH-sleutel mee. Jouw bestand wordt daarmee samengevoegd. Zet je zelf users, password, chpasswd of ssh_authorized_keys, dan gaan die van jou voor op wat WebOké meegeeft.
Let op: Zet je zelf ssh_authorized_keys of password op het hoogste niveau van je bestand, dan vervangen die de sleutel en het wachtwoord uit het formulier. Zet er dan zelf de sleutel in waarmee je wilt inloggen, anders kom je alleen nog via de console binnen.
Is het gelukt?
cloud-init draait één keer, bij de eerste start na het installeren. Dat duurt soms een paar minuten langer dan de installatie zelf, zeker als er pakketten worden geïnstalleerd. Log in en kijk:
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 --longtoontstatus: doneals alles klaar is,runningals hij nog bezig is enerrorals er iets misging, met de fout erbij. Metcloud-init status --waitwacht je tot hij klaar is.- In
/var/log/cloud-init-output.logstaat de uitvoer van je pakketten, commando's en scripts. Meer details staan in/var/log/cloud-init.log. cloud-init schema --systemcontroleert je bestand op fouten. Klopt de YAML niet, dan slaat cloud-init de delen over die hij niet begrijpt, zonder dat de installatie mislukt.
Ging er iets mis? Herstel het met de hand op de server, of pas je bestand aan en installeer opnieuw. Opnieuw installeren wist wel alles op je VPS.
Goed om te weten
- Het werkt voor alle besturingssystemen in de lijst: Ubuntu 24.04 en 26.04, Debian 12 en 13, AlmaLinux 9 en 10 en Rocky Linux 9 en 10.
- Je bestand wordt versleuteld doorgegeven en niet bewaard in de geschiedenis van de taken van je VPS. Zet er toch geen wachtwoorden of andere geheimen in die je niet nodig hebt.
- Alle mogelijkheden staan in de documentatie van cloud-init op docs.cloud-init.io.
Let op: De inhoud van je cloud-init is jouw zaak. Support kijkt niet naar je bestand en helpt niet met het schrijven of verbeteren ervan.
