Kapitel 1 · 1.9
Eigenes cloud-init: Ihren VPS beim ersten Start automatisch einrichten
Mit cloud-init geben Sie bei der Installation eine Datei mit, die Ihr VPS beim ersten Start selbst ausführt. So installiert Ihr Server sofort Ihre festen Pakete, legt Ihren eigenen Benutzer an und führt Ihre Befehle aus. Praktisch, wenn Sie öfter neu installieren oder immer mit derselben Grundlage beginnen möchten. Sie brauchen dafür weder eine API noch ein Terminal.
Wo tragen Sie es ein?
- Öffnen Sie das VPS-Fenster über Meine Produkte.
- Neuer VPS: Sie sehen den Block Installieren Sie Ihren VPS (siehe Ihren VPS installieren: Betriebssystem, Passwort und SSH-Schlüssel). Neuinstallation: Wählen Sie den Reiter Erweitert und klicken Sie bei Neuinstallation auf Neu installieren... (siehe Neu installieren oder eine ISO einbinden).
- Wählen Sie das Betriebssystem und geben Sie wie gewohnt das Root-Passwort und gegebenenfalls Ihren SSH-Schlüssel ein.
- Klicken Sie unter dem SSH-Schlüssel auf Eigenes cloud-init. Das Feld klappt auf.
- Fügen Sie Ihre Datei in das Feld ein.
- Klicken Sie auf die Schaltfläche zum Installieren, zum Beispiel Debian 13 installieren, oder bei einer Neuinstallation auf Alles löschen und neu installieren.
Das Root-Passwort oder der SSH-Schlüssel bleibt auch mit eigenem cloud-init erforderlich. Damit kommen Sie immer auf den Server, auch über die Konsole (siehe Die Konsole: Ihr VPS im Browser).
Was darf in der Datei stehen?
Das Feld nimmt user-data an, die Datei, die cloud-init beim ersten Start liest. Die erste Zeile legt fest, um welche Art es sich handelt:
| Erste Zeile | Was ist das? |
|---|---|
#cloud-config | Einstellungen in YAML: Pakete, Benutzer, Dateien, Befehle. Das verwenden Sie in den meisten Fällen. |
#!, zum Beispiel #!/bin/bash | Ein Skript. Es läuft einmal als root, am Ende des ersten Starts. |
#cloud-boothook | Ein Skript, das sehr früh beim Start läuft, und zwar bei jedem Start erneut. Nur für Fortgeschrittene. |
## template: jinja | Eine Vorlage mit Variablen von cloud-init. In der Zeile darunter steht dann #cloud-config oder #!. |
- Höchstens 256 KB und nur Text (UTF-8).
- In YAML rücken Sie mit Leerzeichen ein, niemals mit Tabs.
- Das Netzwerk (IPv4 und IPv6) regelt WebOké. Eine eigene network-config wird nicht verwendet; tragen Sie also keine Netzwerkeinstellungen ein.
Ein Beispiel
Diese Datei aktualisiert alle Pakete, installiert htop und fail2ban, legt den Benutzer anna mit Ihrem SSH-Schlüssel und sudo an, gibt dem Server einen eigenen Namen und stellt die Zeitzone ein:
#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
Ersetzen Sie den Schlüssel durch Ihren eigenen öffentlichen Schlüssel (siehe Einen SSH-Schlüssel unter Windows, Mac und Linux erstellen). Die Zeile - default behält den Standardbenutzer bei, sodass das Root-Passwort und der SSH-Schlüssel aus dem Formular weiterhin funktionieren. Nach dem ersten Start melden Sie sich mit ssh anna@203.0.113.10 an. Wie Sie danach die Anmeldung als root deaktivieren und fail2ban einrichten, lesen Sie in Anmeldung mit Passwort und als root deaktivieren und fail2ban gegen Rateversuche.
Tipp: Das Beispiel ist für Debian und Ubuntu. Unter AlmaLinux und Rocky Linux befinden sich htop und fail2ban in der zusätzlichen Paketquelle EPEL. Lassen Sie dort packages weg und tragen Sie unter runcmd zuerst dnf install -y epel-release und danach dnf install -y htop fail2ban ein.
Was gibt WebOké selbst mit?
WebOké gibt immer den Hostnamen, das Root-Passwort (nur als Hash) und Ihren SSH-Schlüssel mit. Ihre Datei wird damit zusammengeführt. Setzen Sie selbst users, password, chpasswd oder ssh_authorized_keys, dann haben Ihre Angaben Vorrang vor dem, was WebOké mitgibt.
Hinweis: Setzen Sie selbst ssh_authorized_keys oder password auf der obersten Ebene Ihrer Datei, dann ersetzen diese den Schlüssel und das Passwort aus dem Formular. Tragen Sie dann selbst den Schlüssel ein, mit dem Sie sich anmelden möchten, sonst kommen Sie nur noch über die Konsole auf den Server.
Hat es funktioniert?
cloud-init läuft einmal, beim ersten Start nach der Installation. Das dauert manchmal einige Minuten länger als die Installation selbst, vor allem wenn Pakete installiert werden. Melden Sie sich an und prüfen Sie:
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 --longzeigtstatus: done, wenn alles fertig ist,running, wenn es noch läuft, underror, wenn etwas schiefging, mit dem Fehler dazu. Mitcloud-init status --waitwarten Sie, bis es fertig ist.- In
/var/log/cloud-init-output.logsteht die Ausgabe Ihrer Pakete, Befehle und Skripte. Weitere Details finden Sie in/var/log/cloud-init.log. cloud-init schema --systemprüft Ihre Datei auf Fehler. Ist das YAML fehlerhaft, überspringt cloud-init die Teile, die es nicht versteht, ohne dass die Installation fehlschlägt.
Ist etwas schiefgegangen? Beheben Sie es von Hand auf dem Server, oder passen Sie Ihre Datei an und installieren Sie neu. Eine Neuinstallation löscht allerdings alles auf Ihrem VPS.
Gut zu wissen
- Es funktioniert mit allen Betriebssystemen in der Liste: Ubuntu 24.04 und 26.04, Debian 12 und 13, AlmaLinux 9 und 10 sowie Rocky Linux 9 und 10.
- Ihre Datei wird verschlüsselt übertragen und nicht im Verlauf der Aufgaben Ihres VPS gespeichert. Tragen Sie trotzdem keine Passwörter oder andere Geheimnisse ein, die Sie nicht benötigen.
- Alle Möglichkeiten finden Sie in der Dokumentation von cloud-init auf docs.cloud-init.io.
Hinweis: Für den Inhalt Ihres cloud-init sind Sie selbst verantwortlich. Der Support prüft Ihre Datei nicht und hilft nicht beim Schreiben oder Verbessern.
