So installierst du Puppet Server und Agent unter Debian 11
Puppet ist ein zentrales Konfigurationsmanagement- und Automatisierungstool. DevOps schafft ein Konfigurationsmanagement für die Bereitstellung von Servern und Anwendungen, und alle Konfigurationen für die Automatisierung werden auf dem zentralen „Puppet Server“ gespeichert. Danach ziehen die „Agent“-Knoten eine neue Konfiguration vom „Puppet Server“ und wenden den Zustand wie definiert an.
Alle Verbindungen zwischen „Puppet Server“ und „Agent“-Knoten werden standardmäßig mit einem SSL/TLS-Zertifikat verschlüsselt. Puppet verwendet eine domänenspezifische Sprache (Domain Specific Language, DSL) zur Beschreibung der Systemkonfiguration, die der Syntax von Ruby ähnelt.
In dieser Anleitung wirst du den Puppet Server und den Agenten auf Debian 11 Bullseye installieren und konfigurieren. Du installierst den Puppet Server auf dem Server mit dem Hostnamen „puppet-server“ und den Puppet Agent auf dem Server mit dem Hostnamen „agent“. Am Ende erstellst du die ersten Puppet-Manifeste, um den grundlegenden LEMP-Stack auf dem „agent“-Knoten zu installieren.
Voraussetzung
- Du brauchst zwei verschiedene Debian 11 Server.
- Der„puppet-server“ mit der IP-Adresse„192.168.5.100“ und dem fqdn„puppet-server.localdomainl.lan„.
- Der‚agent‚-Knoten mit der IP-Adresse‚192.168.5.150‚ und dem fqdn‚agent.localdomain.lan‚.
- Außerdem brauchst du den Root-Benutzer oder einen Benutzer mit den Rechten root/sudo.
Einrichten des FQDN
Zuerst richtest du den Fully Qualified Domain Name (FQDN) und die Datei „/etc/hosts“ sowohl auf dem Puppet-Server als auch auf dem Agent ein. So stellst du sicher, dass beide Server mit dem lokalen Domainnamen kommunizieren können.
Um den FQDN einzurichten, führe den Befehl„hostnamectl“ aus.
Führe den folgenden Befehl aus, um den FQDN„puppet-server.localdomain.lan“ auf dem„puppet-server“ einzurichten.
hostnamectl set-hostname puppet-server.localdomain.lan
Führe den folgenden Befehl aus, um den fqdn„agent.localdomain.lan“ auf dem„agent„-Knoten einzurichten.
hostnamectl set-hostname agent.localdomain.lan
Als Nächstes bearbeitest du die Datei„/etc/hosts“ mit dem Editor vim wie folgt.
sudo vim /etc/hosts
Kopiere die folgende Konfiguration und füge sie ein.
192.168.5.100 puppet-server.localdomain.lan 192.168.5.150 agent.localdomain.lan
Speichere die Datei und beende sie.
Führe abschließend den Befehl„ping“ aus, um die Verbindung zwischen dem„Puppet-Server“ und dem„Agent“ zu überprüfen.
ping puppet-server.localdomain.lan -c3 ping agent.localdomain.lan -c3
Wenn deine Konfiguration korrekt ist, siehst du die folgende Ausgabe. Der„puppet-server.localdomain.lan“ wird auf den Server„192.168.5.100“ aufgelöst und der„agent.localdomain.lan“ wird auf den Agent-Knoten„192.168.5.150“ aufgelöst.
Hinzufügen des Puppet Repository
Puppelabs stellt standardmäßig Repository-Pakete für verschiedene Linux-Distributionen zur Verfügung, darunter auch das aktuelle Debian 11 Bullseye. In diesem Schritt fügst du das Puppet-Repository hinzu und installierst es sowohl auf „puppet-server“ als auch auf „agent“. Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste Version von Puppet v7.x.
Lade das Repository-Paket mit dem unten stehenden Befehl„wget“ herunter.
wget https://apt.puppet.com/puppet7-release-bullseye.deb
Als Nächstes installierst du die Deb-Datei„puppet7-release-bullseye.deb“ mit dem Befehl„dpkg“ (siehe unten).
sudo dpkg -i puppet7-release-bullseye.deb
Nachdem die Installation abgeschlossen ist, führe den Befehl„apt“ aus, um den Debian-Paketindex zu aktualisieren und aufzufrischen.
sudo apt update
Jetzt kannst du die Puppet-Pakete installieren.
Installation von Puppet Server
In diesem Schritt installierst du das Puppet-Server-Paket auf dem „puppet-server“. Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste Version von Puppet v7.
Um Puppet Server zu installieren, führst du den folgenden apt-Befehl aus. Mit diesem Befehl werden auch andere Pakete wie Java OpenJDK automatisch installiert.
sudo apt install puppetserver
Gib„Y“ ein, um die Installation zu bestätigen.
Nachdem die Installation abgeschlossen ist, musst du die Bash-Umgebung für den Puppet Server laden.
Standardmäßig speichert Puppet seine Binärdatei im Verzeichnis„/opt/puppetlabs/bin„. Führe den folgenden Befehl aus, um die neue Umgebungsvariable„$PATH“ für Puppet Server zu übernehmen.
source /etc/profile.d/puppet-agent.sh echo $PATH
Optional kannst du die Umgebungsvariable„$PATH“ auch mit dem folgenden Befehl anwenden.
echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc source ~/.bashrc
Überprüfe nun die Umgebungsvariable„$PATH“ mit dem folgenden Befehl. Vergewissere dich, dass das Verzeichnis„/opt/puppetlabs/bin“ in der Liste der Umgebungsvariablen„$PATH“ enthalten ist.
echo $PATH
Danach kannst du den Befehl„puppetserver“ normal ausführen. Darunter kannst du die Puppet-Version überprüfen.
puppetserver -v
Du solltest eine ähnliche Ausgabe erhalten wie im Screenshot unten.
Als Nächstes bearbeitest du die Puppet-Server-Konfiguration „/etc/default/puppetserver“ mit dem Editor vim.
sudo vim /etc/default/puppetserver
Ändere die maximale Speicherzuweisung für den Puppet Server. Das hängt von deinem Systemspeicher ab. In dieser Anleitung haben wir 2 GB Arbeitsspeicher und werden dem Puppet Server 1 GB zuweisen. Und wir werden die folgende Konfiguration verwenden.
JAVA_ARGS="-Xms1g -Xmx1g"
Speichere die Konfigurationsdatei und beende sie.
Als Nächstes lädst du den systemd Manager neu, um die neue Puppet-Dienstdatei anzuwenden.
sudo systemctl daemon-reload
Starte und aktiviere dann den Dienst„puppetserver“ mit dem unten stehenden Befehl.
sudo systemctl start enable --now puppetserver
Der Dienst„puppetserver“ sollte nun aktiv sein und laufen. Führe den unten stehenden Befehl aus, um den„puppetserver“ zu überprüfen.
sudo systemctl status puppetserver
Du solltest eine ähnliche Ausgabe wie auf dem Screenshot unten sehen.
Wenn du eine UFW-Firewall auf deinem System verwendest, musst du außerdem den Port„8140“ öffnen, der vom Puppetserver verwendet wird.
Führe den folgenden Befehl aus, um alle eingehenden Verbindungen aus dem lokalen Subnetz„192.168.5.0/24“ zum Puppet Server auf dem Port„8140“ zu verbieten.
sudo ufw allow from 192.168.5.0/24 to any proto tcp port 8140 sudo ufw status
Unten findest du die aktuellen UFW-Firewall-Regeln, die du sehen solltest.
Puppet Server konfigurieren
In diesem Schritt bearbeitest du die Konfiguration des Puppet Servers. Das kannst du tun, indem du die Puppet-Konfiguration direkt bearbeitest oder indem du die Konfiguration mit der„puppet„-Befehlszeile erstellst.
Führe die folgenden „puppet“-Befehle aus, um den Puppet Server einzurichten. Dabei werden der Standarddomänenname des Puppet Servers und das Ausführungsintervall im Abschnitt„main“ sowie die Umgebung und dns_alt_names im Abschnitt„server“ eingerichtet.
puppet config set server puppet-server.localdomain.lan --section main puppet config set runinterval 1h --section main
puppet config set environment production –section server
puppet config set dns_alt_names puppet-server,puppet-server.localdomain.lan –section server
Überprüfe nun die Puppet Server Konfiguration„/etc/puppetlabs/puppet/puppet.conf“ mit dem Befehl„cat„.
cat /etc/puppetlabs/puppet/puppet.conf
Du solltest die Puppet Server-Konfiguration wie unten sehen.
Starte abschließend den Dienst„puppetserver“ neu, um die neue Konfiguration anzuwenden, indem du den Befehl„systemctl“ ausführst.
sudo systemctl restart puppetserver
Damit hast du die Installation und Konfiguration von Puppet Server abgeschlossen.
Puppet Agent installieren und konfigurieren
In diesem Schritt installierst und konfigurierst du den Puppet Agent auf dem Client-Rechner„agent„.
Bevor du den Puppet Agent installierst, musst du sicherstellen, dass du die FQDN-Konfiguration abgeschlossen und das Puppet-Repository hinzugefügt hast.
Jetzt installieren und konfigurieren wir den Puppet Agent.
Installiere das Paket„puppet-agent“ mit dem unten stehenden apt-Befehl.
sudo apt install puppet-agent
Nachdem die Installation abgeschlossen ist, führe den folgenden Befehl aus, um den Puppet-Dienst zu starten und zu aktivieren.
sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
Du solltest eine ähnliche Ausgabe wie auf dem Screenshot unten sehen.
Als Nächstes richtest du die Umgebungsvariable„$PATH“ ein, um den Puppet-Binärpfad „/opt/puppetlabs/bin/“ hinzuzufügen. So kannst du den Befehl„puppet“ direkt ausführen, ohne den vollständigen Pfad der Binärdatei angeben zu müssen.
source /etc/profile.d/puppet-agent.sh echo $PATH
Eine andere Möglichkeit ist, eine neue Umgebungsvariable„$PATH“ mit folgendem Befehl zur Konfiguration„~/.bashrc“ hinzuzufügen.
echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc source ~/.bashrc
Überprüfe nun die Konfiguration der Umgebungsvariablen„$PATH“ mit dem folgenden Befehl.
echo $PATH
Du solltest sehen, dass der Puppet-Binärpfad„/opt/puppetlabs/bin“ zur Umgebungsvariablen „$PATH“ hinzugefügt wurde.
Registrierung des Puppet Agent beim Puppet Server
Nach der Installation des Puppet Agent musst du den Puppet Agent nun so einrichten, dass er beim Puppet Server registriert wird.
Stelle zunächst sicher, dass der Puppet Server fqdn vom„Agent„-Rechner aus erreichbar ist. Teste das mit dem Befehl„ping“ (siehe unten).
ping puppet-server.localdomain.lan -c3
Als Nächstes führst du die folgenden Befehle aus, um den Puppet Agent zu konfigurieren. Dadurch werden der Domänenname des Puppet Servers und ca_server im Abschnitt„agent“ festgelegt.
puppet config set server puppet-server.localdomain.lan --section agent puppet config set ca_server puppet-server.localdomain.lan --section agent
Überprüfe die erstellte Puppet-Konfiguration in der Datei „/etc/puppetlabs/puppet/puppet.conf“.
cat /etc/puppetlabs/puppet/puppet.conf
Du solltest eine ähnliche Ausgabe wie im Screenshot unten sehen.
Führe nun den folgenden Befehl aus, um den Puppet-Dienst neu zu starten und die neuen Änderungen anzuwenden. Überprüfe dann den Puppet-Dienst und stelle sicher, dass er aktiv ist und läuft.
sudo systemctl restart puppet sudo systemctl status puppet
Unten siehst du die Ausgabe des Puppet-Dienststatus.
Als Nächstes führst du den folgenden Befehl aus, um den Puppet-Agent beim Puppet-Server zu registrieren. Dieser Befehl generiert neue TLS-Zertifikate und erstellt neue Zertifikatssignierungsanfragen an den Puppet-Server.
puppet ssl bootstrap
Wechsle nun zum Terminal des Puppet Servers und führe den folgenden Befehl aus, um die Zertifikatsignierungsanforderungen zu prüfen und die Zertifikatsignierung für den Puppet Agent„agent.localdomain.lan“ zu verifizieren.
puppetserver ca list --all puppetserver ca sign --certname agent.localdomain.lan
Du solltest die folgende Meldung sehen:‚Successfully signed certificate request ….‚.
Als Nächstes führst du den folgenden Befehl aus, um die Liste der Zertifikate auf dem Puppet Server zu überprüfen.
puppetserver ca list-all
Du solltest zwei verschiedene Zertifikate sehen, das Zertifikat für den Puppet Server und das für den Puppet Agent.
Wechsle nun wieder zum Puppet Agent Terminal und du solltest Meldungen wie„Notice: Completed SSL initialization“ (SSL-Initialisierung abgeschlossen), was bedeutet, dass die Zertifikatsignierungsanfragen erfolgreich abgeschlossen wurden.
Jetzt kannst du ein neues erstes Puppet-Manifest erstellen.
Erstes Puppet-Manifest erstellen
In diesem Schritt erstellst du ein neues erstes Puppet-Manifest für die Installation des LEMP-Stacks (Nginx, MariaDB und PHP-FPM). Alle Manifeste für die Produktionsumgebung müssen im Puppet Server-Verzeichnis„/etc/puppetlabs/code/environments/production/“ gespeichert werden.
Ändere dein aktuelles Arbeitsverzeichnis in‚/etc/puppetlabs/code/environments/production/‚.
cd /etc/puppetlabs/code/environments/production/
Als Nächstes erstellst du ein neues Manifest-Layout-Verzeichnis für den LEMP-Stack unter dem Verzeichnis„modules„.
mkdir -p modules/lemp/{manifests,files}
Wechsle in das Verzeichnis„modules/lemp“ und erstelle eine neue Puppet-Manifestdatei„manifests/init.pp“ mit dem Editor vim/nano.
cd modules/lemp/ nano manifests/init.pp
Kopiere die folgende Puppet-Syntax für die Installation von LEMP Stack und füge sie ein. Stelle sicher, dass jeder LEMP Stack-Dienst läuft, und erstelle eine neue benutzerdefinierte index.html-Datei.
class lemp {
Package { ensure => ‚installed‘ }
$lemppackages = [ ’nginx‘, ‚mariadb-server‘, ‚php-fpm‘ ]
package { $lemppackages: }
Service { ensure => ‚running‘, enable => ‚true‘}
$lempsvc = [ ’nginx‘, ‚mariadb‘, ‚php7.4-fpm‘ ]
service { $lempsvc: }
file { ‚/var/www/html/index.html‘:
ensure => file,
content => „<h1><center>Welcome to Nginx – Managed by Puppet</center></h1>“,
mode => ‚0644‘,
}
}
Speichere die Datei und beende sie.
Als Nächstes führst du den folgenden Befehl aus, um die Puppet-Manifestdatei „init.pp“ zu überprüfen.
puppet parser validate init.pp
Wenn du keine Ausgabemeldung siehst, ist die Konfiguration korrekt.
Erstelle nun eine weitere Konfiguration„manifests/site.pp“ mit dem Editor vim/nano.
cd /etc/puppetlabs/code/environments/production/ vim manifests/sites.pp
Lege als Zielhost„agent.localdomain.lan“ fest und wende das neue Puppet-Manifest„lemp“ an.
node 'agent.localdomain.lan' { include lemp }
Speichere die Datei und beende sie.
Überprüfe die Konfiguration des Puppet-Manifests erneut mit dem folgenden Befehl.
puppet parser validate site.pp
Überprüfen und Anwenden von Puppet Manifesten
Du hast nun ein neues erstes Puppet-Manifest für die Bereitstellung von LEMP Stack erstellt. Jetzt synchronisiert der Puppet Agent Node automatisch alle Manifeste mit dem Puppet Server und wendet eine neue Manifestkonfiguration an.
Du kannst das Puppet-Manifest aber auch manuell auf dem Puppet-Agent-Rechner anwenden.
Gehe zurück zum Terminalserver „agent“ und führe den folgenden Befehl aus, um Puppet-Manifeste manuell anzuwenden.
puppet agent -t
Dadurch wird das Puppet-Manifest auf dem Puppet-Agent-Rechner ausgeführt und der LEMP-Stack über die Puppet-Manifeste„lemp“ installiert.
Unten siehst du die Ausgabe, die du erhalten wirst.
Führe nun den folgenden Befehl aus, um jeden Dienst Nginx, MariaDB und PHP-FPM zu überprüfen.
sudo systemctl status nginx sudo systemctl status mariadb sudo systemctl status php7.4-fpm
Du solltest sehen, dass jeder Dienst aktiv ist und läuft.
Öffne nun deinen Webbrowser und gib die IP-Adresse deines Agentenknotens in die Adresszeile ein. Du solltest die unten stehende index.html-Datei sehen.
Du hast nun die LEMP Stack-Bereitstellung mithilfe der Puppet-Manifeste erfolgreich auf den Agent-Rechner angewendet.
Fazit
Herzlichen Glückwunsch! Du hast nun erfolgreich Puppet Server und Agent auf Debian 11 Bullseye installiert. Außerdem hast du gelernt, wie du die ersten Puppet-Manifeste für die Installation von LEMP Stack erstellst.
OIm nächsten Schritt könnte es für dich interessant sein, einen weiteren Knoten einzurichten und ein komplexeres Puppet-Manifest für deine Einsätze zu erstellen.