Christophe Ti

(Christophe TREMBLAY-GUILLOUX)

Ingénieur système Linux – TJM: 630 € HT

L’impression d’être entouré ou conseillé par des soi-disant « Expert Linux » (avant qu’ils ne disparaissent du radar) ?

Christophe est l’ULTIME expert en système Linux, hébergement web et développement Puppet que vous garderez dans vos contacts… à vie.

Comment installer un serveur Puppet 7 / Foreman sur Debian ?

Les conseils privés de Christophe Ti

Quelles sont les mystérieuses techniques que j’utilise pour vous fournir un serveur Linux Debian (ou hébergement web), fiable, performant et sécurisé, sans devoir monter la garde jour et nuit ?

Pour rappel, Puppet est un outil, ultra professionnel, d’aide à la configuration automatique d’un serveur et à son suivi pendant toute sa durée de vie.

Voici ce mémo pour installer un serveur Puppet et Foreman.

Foreman permet est entre autre une interface graphique pour visualiser les rapports d’exécution Puppet. Il permet aussi de classifier les serveurs en utilisant des classes Puppet. Il permet d’autres choses mais j je n’utilise que le minimum.

1. Installation de la base du système

Je ne vais pas décrire cette partie. Il faut installer Debian 11 sur le serveur avec le minimum de service, simplement un serveur SSH, rien d’autre.

2. Configuration hosts et locales

2.1 Fichier /etc/hosts

Configurer le fichier /etc/hosts pour que l’adresse IP du serveur corresponde au nom complet. Ne pas mettre 127.0.0.1 mais l’IP réelle !

				
					xxx.xxx.xxx.xxx puppet.example.com
				
			

La commande suivante doit afficher l’IP externe du serveur :

				
					ping $(hostname -f)
				
			

2.2 Locales

Ajouter cette ligne dans /etc/locale.gen :

				
					en_US.UTF-8 UTF-8
				
			

Puis lancer :

				
					locale-gen
				
			

3. APT

Voici le Mémo officiel à garder de côté si besoin :  https://theforeman.org/manuals/3.6/index.html#2.1Installation

3.1 Puppet 7

Installons Puppet 7 :

				
					apt-get -y install ca-certificates
cd /tmp && wget https://apt.puppet.com/puppet7-release-bullseye.deb
apt-get install /tmp/puppet7-release-bullseye.deb
apt update
apt-get install puppetdb puppetdb-termini
				
			

3.2 Foreman

Installons Foreman :

				
					wget https://deb.theforeman.org/foreman.asc -O /etc/apt/trusted.gpg.d/foreman.asc
echo "deb http://deb.theforeman.org/ bullseye 3.6" > /etc/apt/sources.list.d/foreman.list
echo "deb http://deb.theforeman.org/ plugins 3.6" >> /etc/apt/sources.list.d/foreman.list
apt-get update && apt-get -y install foreman-installer
				
			

4. INSTALL (puppetmaster + foreman)

L’installation se fait par l’outil foreman-installer qui enregistra le profil d’installation dans /etc/foreman-installer/scenarios.d/foreman-answers.yaml.

Remplacer les valeurs par les bonnes, adresse e-mail, nom du serveur, passerelle e-mail, quantité de mémoire java,…

				
					foreman-installer --enable-foreman --enable-foreman-cli --enable-foreman-cli-puppet --enable-foreman-cli-remote-execution --enable-foreman-cli-ssh --enable-foreman-cli-tasks --enable-foreman-proxy --enable-puppet --enable-foreman-plugin-default-hostgroup --enable-foreman-plugin-puppet --enable-foreman-plugin-puppetdb --enable-foreman-plugin-remote-execution --enable-foreman-plugin-tasks	--enable-foreman-proxy-plugin-remote-execution-script --foreman-initial-admin-email=xxx@example.com --foreman-initial-admin-username=admin --foreman-telemetry-prometheus-enabled=true --puppet-environment=production --puppet-server-jvm-max-heap-size=1536M --puppet-server-jvm-min-heap-size=1536M --puppet-server-max-active-instances=2 --puppet-server-reports "foreman,puppetdb" --puppet-server-storeconfigs=true --foreman-plugin-puppetdb-address=https://puppet.example.com:8081/pdb/cmd/v1 --puppet-autosign-content='*.example.com' --foreman-email-delivery-method=smtp --foreman-email-smtp-address=mail.example.com --foreman-email-smtp-domain=puppet.example.com --foreman-proxy-plugin-monitoring-enabled=false
				
			

Cette erreur pourrait apparaître :

				
					Failed to open TCP connection to puppet.example.com:443
				
			

Dans ce cas, relancer apache :

				
					systemctl restart apache2
				
			

5. PuppetDB

5.1 Configurer une base de données dans POTSGRESQL pour PuppetDB

Cette partie n’est pas faite par foreman. Il faut donc créer une base de données pour PuppetDB.

Le mémo associé est ici.

Générer un mot de passe pour puppetdb et l’utiliser ci-dessous :

				
					sudo -u postgres sh
createuser -DRSP puppetdb
createdb -E UTF8 -O postgres puppetdb
psql puppetdb -c 'revoke create on schema public from public'
psql puppetdb -c 'grant create on schema public to puppetdb'
psql puppetdb -c 'create extension pg_trgm'
				
			

5.2 Configurer /etc/puppetlabs/puppetdb/conf.d/database.ini

Voici un exemple de fichier de configuration pour la connexion de puppetdb à sa base de données, mettre le bon mot de passe :

				
					[database]

# Db connection
subname = //localhost:5432/puppetdb
username = puppetdb
password = xxxxxxxxxxxxxx

# How often (in minutes) to compact the database
gc-interval = 60

classname = org.postgresql.Driver
subprotocol = postgresql
syntax_pgs = true
node-ttl = 7d
node-purge-ttl = 14d
report-ttl = 14d
log-slow-statements = 10
conn-max-age = 60
conn-keep-alive = 45
conn-lifetime = 0
				
			

5.3 Activer la configuration SSL de PuppetDB

				
					puppetdb ssl-setup
				
			

5.3 Relancer PuppetDB

				
					systemctl restart puppetdb
				
			

6. Puppet Server

Créer un fichier /etc/puppetlabs/puppet/puppetdb.conf :

				
					[main]
server_urls = https://puppet.example.com:8081
				
			

Relancer PuppetServer :

				
					systemctl restart puppetserver
				
			

7. Vérification de fonctionnement depuis le serveur Puppet

				
					puppet agent -t
				
			

8. Réglage SMTP SSL

  • Aller sur l’interface foreman : https://puppet.example.com/settings
  • Aller dans le menu Admin>Settings, Onglet E-mail et changer le paramètre “Mode de vérification SMTP OpenSSL” à “none

L’installation est terminée.

Quelle est la mystérieuse ingénierie qui me permet d'obtenir un serveur Linux fiable et performant, sans devoir monter la garde jour et nuit ?