Installation du serveur Foreman (mono-nœud)
Configuration du hostname et du fichier hosts
# Configuration du hostname
sudo hostnamectl set-hostname foreman.mondomaine.com
# Vérification
hostnamectl
Editer le fichier /etc/hosts et configurer les entrées de la manières suivantes :
127.0.0.1 localhost localhost.localdomain
<VOTRE_IP_SERVEUR> foreman.mondomaine.com foreman
Installation des prérequis
# Mise à jour du système
sudo dnf update -y
# Installation des dépendances de base
sudo dnf install -y vim wget curl net-tools
Optimisation du noyau (optionnel)
Créer le fichier "/etc/sysctl.d/99-foreman.conf" pour optimiser les paramètres du noyau avec le contenu suivant :
# ===============================================================
# CONFIGURATION SYSCTL POUR SERVEUR FOREMAN / PUPPET
# ===============================================================
# --- RÉSEAU : Désactivation de l'IPv6 ---
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# --- RÉSEAU : Optimisations TCP pour Puppet & API ---
# Augmente la file d'attente pour gérer les pics de connexions des agents
net.core.somaxconn = 1024
# Augmente la plage de ports pour éviter l'épuisement lors de gros déploiements
net.ipv4.ip_local_port_range = 10240 65535
# Accélère la réutilisation des sockets en état TIME_WAIT
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# --- MÉMOIRE : Optimisation PostgreSQL & Java ---
# Réduit l'utilisation du swap pour privilégier la RAM (très important)
vm.swappiness = 10
# Définit le seuil à partir duquel les données sales sont écrites sur disque
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
# Nécessaire pour les processus Java (Candlepin/Elasticsearch)
vm.max_map_count = 262144
# --- SYSTÈME DE FICHIERS : Gestion des dépôts (Pulp) ---
# Augmente la limite globale de fichiers ouverts
fs.file-max = 2097152
# --- SÉCURITÉ ---
# Empêche les attaques de type IP spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Désactive l'acceptation des redirections ICMP (prévention MITM)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
Désactivation de SELinux (optionnel mais recommandé pour débuter)
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
Note : En production, il est préférable de configurer SELinux correctement plutôt que de le désactiver.
Configuration du firewall
# Autoriser les ports pour Foreman (backend)
# IMPORTANT : Le trafic viendra du serveur HAProxy, pas directement des clients
# Autoriser HTTP depuis HAProxy (le SSL est terminé sur HAProxy)
sudo firewall-cmd --permanent --add-port=8443/tcp # Smart Proxy
sudo firewall-cmd --permanent --add-port=443/tcp # Nginx Local en HTTPS
# Puppet Server
sudo firewall-cmd --permanent --add-port=8140/tcp
# Services optionnels
sudo firewall-cmd --permanent --add-port=53/tcp # DNS (si activé)
sudo firewall-cmd --permanent --add-port=53/udp
sudo firewall-cmd --permanent --add-port=67-69/udp # DHCP/TFTP (si activé)
sudo firewall-cmd --reload
Installation des dépôts Foreman
# Installer le dépôt Foreman
sudo dnf -y install https://yum.theforeman.org/releases/3.17/el9/x86_64/foreman-release.rpm
# Installer le dépôt Puppet
sudo dnf -y install https://yum.puppet.com/puppet8-release-el-9.noarch.rpm
# Nettoyer le cache
sudo dnf clean all
Installation de Foreman avec l'installateur
# Installer le paquet foreman-installer
sudo dnf install -y foreman-installer
# Lancer l'installation avec les options de base
sudo foreman-installer \
--foreman-initial-admin-username admin \
--foreman-initial-admin-password "MotDePasseSecurise" \
--enable-foreman-proxy \
--enable-puppet \
--puppet-server true \
--puppet-server-foreman-url https://foreman.mondomaine.com
Important : Notez bien le mot de passe admin et les informations affichées en fin d'installation.
Vérification de l'installation
# Vérifier que les services sont actifs
sudo systemctl status foreman
sudo systemctl status httpd
sudo systemctl status puppetserver
sudo systemctl status foreman-proxy
# Tester l'accès local
curl -k https://localhost/