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.

Ping zum Puppet-Server

Puppet Agent einrichten

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.

Puppet-Repository einrichten

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.

Puppet Server installieren

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.

PATH Umgebungsvariable für Puppet einrichten

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.

Maximale Speicherbegrenzung einrichten Puppet Server

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

Puppetserver einrichten und aktivieren

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.

Puppetserver-Status verifizieren

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.

ufw-Firewall für Puppet-Server einrichten

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.

Puppet Server einrichten

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

Puppet Agent installieren

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.

Puppet Agent starten und aktivieren

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.

PATH-Umgebungsvariable einrichten Puppet

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

Ping zum Puppet Server

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.

Puppet Agent einrichten

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.

Puppet Agent neu starten

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 ….‚.

Zertifikatssignatur prüfen und verifizieren

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.

Signierte Zertifikate auflisten

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.

Bootstrapping Puppet Agent

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.

Puppet-Manifest anwenden

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.

Nginx Dienststatus

MariaDB Dienststatus

Status des PHP-FPM-Dienstes

Öffne nun deinen Webbrowser und gib die IP-Adresse deines Agentenknotens in die Adresszeile ein. Du solltest die unten stehende index.html-Datei sehen.

Benutzerdefinierte index.html von Puppet erstellt

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.

Das könnte dich auch interessieren …