Cómo instalar el servidor y el agente de Puppet en Debian 11
Puppet es una herramienta centralizada de gestión de la configuración y de automatización. DevOps crea la gestión de la configuración para desplegar servidores y aplicaciones, y toda la configuración para la automatización se almacena en el «Servidor Puppet» central. Después, los nodos «Agente» sacarán una nueva configuración del «Servidor Puppet» y aplicarán el estado definido.
Todas las conexiones entre el «Servidor Puppet» y los nodos «Agente» están encriptadas por defecto utilizando un certificado SSL/TLS. Puppet utiliza el Lenguaje Específico de Dominio (DSL) para describir la configuración del sistema, y es similar a la sintaxis de Ruby.
En esta guía, instalarás y configurarás el servidor y el agente de Puppet en Debian 11 Bullseye. Instalarás el servidor Puppet en el servidor con el nombre de host ‘puppet-server’ y el agente Puppet en el servidor con el nombre de host ‘agent’. Al final, crearás los primeros manifiestos de Puppet para instalar la pila básica de LEMP en el nodo ‘agente’.
Requisitos previos
- Necesitarás dos servidores Debian 11 diferentes.
- El ‘puppet-server‘ con la dirección IP‘192.168.5.100‘ y el fqdn‘puppet-server.localdomainl.lan‘.
- El nodo «agente» con la dirección IP «192.168.5.150″ y el fqdn «agente.dominiolocal.lan».
- Además, necesitarás el usuario root o con privilegios de root/sudo.
Configurar el FQDN
En primer lugar, deberás configurar el Nombre de Dominio Completamente Cualificado (FQDN) y el archivo ‘/etc/hosts’ tanto en ‘puppet-server’ como en ‘agent’. Esto garantizará que ambos servidores puedan comunicarse con el nombre de dominio local.
Para configurar el FQDN, ejecuta el siguiente comando‘hostnamectl’.
Ejecuta el siguiente comando para configurar el fqdn‘puppet-server.localdomain.lan‘ en el ‘puppet-server‘.
hostnamectl set-hostname puppet-server.localdomain.lan
Ejecuta el siguiente comando para configurar el fqdn «agente.dominiolocal.lan» en el nodo «agente«.
hostnamectl set-hostname agent.localdomain.lan
A continuación, edita el archivo‘/etc/hosts‘ utilizando el editor vim como se indica a continuación.
sudo vim /etc/hosts
Copia y pega la siguiente configuración.
192.168.5.100 puppet-server.localdomain.lan
192.168.5.150 agent.localdomain.lan
Guarda el archivo y sal.
Por último, ejecuta el comando‘ping’ que aparece a continuación para verificar la conexión entre el‘puppet-server’ y el‘agente‘.
ping puppet-server.localdomain.lan -c3
ping agent.localdomain.lan -c3
Si tu configuración es correcta, verás la siguiente salida. El ‘puppet-server.localdomain.lan‘ se resuelve al servidor‘192.168.5.100‘, y el ‘agent.localdomain.lan‘ se resuelve al nodo agente‘192.168.5.150‘.
Añadir el repositorio de Puppet
Por defecto, Puppelabs proporciona paquetes de repositorio para diferentes distribuciones de Linux, incluida la última Debian 11 Bullseye. En este paso, añadirás e instalarás el repositorio de Puppet tanto en ‘puppet-server’ como en ‘agent’. En el momento de escribir este artículo, la última versión de Puppet es la v7.x.
Descarga el paquete del repositorio utilizando el comando‘wget’ que aparece a continuación.
wget https://apt.puppet.com/puppet7-release-bullseye.deb
A continuación, instala el archivo deb‘puppet7-release-bullseye.deb‘ utilizando el comando ‘dpkg‘ que aparece a continuación.
sudo dpkg -i puppet7-release-bullseye.deb
Una vez completada la instalación, ejecuta el comando ‘apt‘ que aparece a continuación para actualizar y refrescar el índice de paquetes de Debian.
sudo apt update
Ahora estás listo para instalar los paquetes de Puppet.
Instalar el servidor Puppet
En este paso, instalarás el paquete del servidor Puppet en el ‘puppet-server’. En el momento de escribir esto, la última versión de Puppet es la v7.
Para instalar Puppet Server, ejecuta el siguiente comando apt. Este comando también instala automáticamente otros paquetes como Java OpenJDK.
sudo apt install puppetserver
Escribe «Y» para confirmar la instalación.
Una vez completada la instalación, tendrás que cargar el entorno bash para el Servidor de Puppet.
Por defecto, Puppet almacena su archivo binario en el directorio‘/opt/puppetlabs/bin‘. Ejecuta el siguiente comando para aplicar la nueva variable de entorno‘$PATH’ para el Servidor Puppet.
source /etc/profile.d/puppet-agent.sh
echo $PATH
Opcionalmente, también puedes aplicar la variable de entorno ‘$PATH‘ ejecutando el siguiente comando.
echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc
source ~/.bashrc
Ahora verifica la variable de entorno ‘$PATH‘ con el siguiente comando. Asegúrate de que el directorio‘/opt/puppetlabs/bin‘ está en la lista de la variable de entorno ‘$PATH‘.
echo $PATH
Después de esto, puedes ejecutar el comando‘puppetserver‘ normalmente. A continuación puedes comprobar la versión de Puppet.
puppetserver -v
Deberías obtener una salida similar a la captura de pantalla que aparece a continuación.
A continuación, edita la configuración del servidor Puppet ‘/etc/default/puppetserver ‘ utilizando el editor vim.
sudo vim /etc/default/puppetserver
Cambia la asignación de memoria máxima para el servidor Puppet. Depende de la memoria de tu sistema. En esta guía, tenemos 2GB de memoria y asignaremos para el servidor Puppet 1GB. Y utilizaremos la siguiente configuración.
JAVA_ARGS="-Xms1g -Xmx1g"
Guarda el archivo de configuración y sal.
A continuación, recarga el gestor systemd para aplicar el nuevo archivo del servicio Puppet.
sudo systemctl daemon-reload
A continuación, inicia y activa el servicio ‘puppetserver‘ con el siguiente comando.
sudo systemctl start enable --now puppetserver
El servicio ‘puppetserver‘ debería estar en funcionamiento. Ejecuta el siguiente comando para verificar el ‘puppetserver‘.
sudo systemctl status puppetserver
Deberías ver una salida similar a la captura de pantalla de abajo.
Además, si utilizas un cortafuegos UFW en tu sistema, asegúrate de abrir el puerto‘8140‘ que utilizará el Servidor Puppet.
Ejecuta el siguiente comando para aliar cualquier conexión entrante desde la subred local‘192.168.5.0/24‘ al Servidor Puppet en el puerto‘8140‘.
sudo ufw allow from 192.168.5.0/24 to any proto tcp port 8140
sudo ufw status
A continuación se muestran las reglas actuales del cortafuegos UFW que deberías ver.
Configurar el Servidor Puppet
En este paso, editarás la configuración del Servidor Puppet. Y esto puede hacerse editando la configuración de Puppet directamente o generando la configuración mediante la línea de comandos ‘puppet‘.
Ejecuta los siguientes comandos ‘puppet’ para configurar el Servidor Puppet. Para ello, configura el nombre de dominio predeterminado del Servidor Puppet y el intervalo de ejecución en la sección ‘main’, y el entorno y dns_alt_names en la sección ‘server‘.
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
Ahora comprueba la configuración del Servidor Puppet‘/etc/puppetlabs/puppet/puppet.conf‘ utilizando el comando‘cat’ que aparece a continuación.
cat /etc/puppetlabs/puppet/puppet.conf
Deberías ver la configuración del Servidor Puppet como se indica a continuación.
Por último, reinicia el servicio‘puppetserver‘ para aplicar la nueva configuración ejecutando el comando‘systemctl‘ que aparece a continuación.
sudo systemctl restart puppetserver
En este punto, has completado la instalación y configuración del Servidor Puppet.
Instalación y configuración del Agente Puppet
En este paso, instalarás y configurarás el Agente de Puppet en la máquina cliente‘agent‘.
Antes de instalar Puppet Agent, asegúrate de que has completado la configuración del FQDN y has añadido el repositorio de Puppet.
Ahora vamos a instalar y configurar el Puppet Agent.
Instala el paquete‘puppet-agent‘ con el comando apt que aparece a continuación.
sudo apt install puppet-agent
Una vez completada la instalación, ejecuta el siguiente comando para iniciar y habilitar el servicio Puppet.
sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
Deberías ver una salida similar a la captura de pantalla que aparece a continuación.
A continuación, deberás configurar la variable de entorno‘$PATH’ para añadir la ruta del binario de Puppet ‘/opt/puppetlabs/bin/‘. Hacer esto, te permite ejecutar el comando‘puppet‘ directamente sin la ruta completa del archivo binario.
source /etc/profile.d/puppet-agent.sh
echo $PATH
Otra forma de hacerlo es añadiendo una nueva variable de entorno ‘$PATH‘ a la configuración de‘~/.bashrc‘ mediante el siguiente comando.
echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc
source ~/.bashrc
Ahora verifica la configuración de la variable de entorno ‘$PATH‘ utilizando el siguiente comando.
echo $PATH
Deberías ver que la ruta del binario de Puppet‘/opt/puppetlabs/bin‘ se añade a la variable de entorno ‘ $PATH‘.
Registrar el Puppet Agent en el servidor Puppet
Después de instalar el Puppet Agent, ahora deberás configurar el Puppet Agent para registrarlo en el servidor principal de Puppet.
Primero, asegúrate de que el fqdn del Servidor Puppet es alcanzable desde la máquina del‘agente’. Pruébalo utilizando el comando‘ping’ que aparece a continuación.
ping puppet-server.localdomain.lan -c3
A continuación, ejecuta los siguientes comandos para configurar el Puppet Agent. Esto definirá el nombre de dominio del Servidor Puppet y el ca_server en la sección‘agente’.
puppet config set server puppet-server.localdomain.lan --section agent
puppet config set ca_server puppet-server.localdomain.lan --section agent
Verifica la configuración de Puppet generada en el archivo ‘/etc/puppetlabs/puppet/puppet.conf’.
cat /etc/puppetlabs/puppet/puppet.conf
Deberías ver una salida similar a la captura de pantalla que aparece a continuación.
Ahora, ejecuta el siguiente comando para reiniciar el servicio Puppet y aplicar los nuevos cambios. A continuación, verifica el servicio Puppet y asegúrate de que está activo y en funcionamiento.
sudo systemctl restart puppet
sudo systemctl status puppet
A continuación se muestra la salida del estado del servicio Puppet.
A continuación, ejecuta el siguiente comando para registrar el agente Puppet en el servidor Puppet. Este comando generará nuevos certificados TLS y creará nuevas solicitudes de firma de certificados al servidor Puppet.
puppet ssl bootstrap
Ahora ve al terminal del servidor Puppet y ejecuta el siguiente comando para comprobar las solicitudes de firma de certificados, y luego verifica la firma de certificados para el agente Puppet‘agent.localdomain.lan‘.
puppetserver ca list --all
puppetserver ca sign --certname agent.localdomain.lan
Deberías ver un mensaje como‘Solicitud de certificado firmada con éxito ….‘.
A continuación, ejecuta el siguiente comando para verificar la lista de certificados en el servidor de Puppet.
puppetserver ca list-all
Deberías ver dos certificados diferentes, el del Servidor de Puppet y el del Agente de Puppet.
Ahora pasa de nuevo al terminal del Puppet Agent y deberías ver mensajes como‘Notice: Completed SSL initialization‘, que significa que las solicitudes de firma de certificados se han completado con éxito.
Llegados a este punto, estás preparado para crear un nuevo primer manifiesto de Puppet.
Crear el primer manifiesto de Puppet
En este paso, crearás un nuevo primer manifiesto de Puppet para instalar la pila LEMP (Nginx, MariaDB y PHP-FPM). Todos los manifiestos para el entorno de producción deben almacenarse en el directorio del servidor Puppet‘/etc/puppetlabs/code/environments/production/‘.
Cambia tu directorio de trabajo actual a ‘/etc/puppetlabs/code/environments/production/‘.
cd /etc/puppetlabs/code/environments/production/
A continuación, crea un nuevo directorio de diseño de manifiesto para la pila LEMP en el directorio ‘modules’.
mkdir -p modules/lemp/{manifests,files}
Ve al directorio ‘modules/lemp‘ y crea un nuevo archivo de manifiesto Puppet‘manifests/init.pp‘ utilizando el editor vim/nano.
cd modules/lemp/
nano manifests/init.pp
Copia y pega el siguiente lenguaje de sintaxis de Puppet para instalar LEMP Stack, asegúrate de que cada servicio de LEMP Stack está en funcionamiento y crea un nuevo archivo index.html personalizado.
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',
}
}
Guarda el archivo y sal.
A continuación, ejecuta el siguiente comando para validar el archivo de manifiesto de Puppet ‘init.pp’.
puppet parser validate init.pp
Si no ves ningún mensaje de salida, la configuración es correcta.
Ahora crea otra configuración ‘manifests/site.pp’ utilizando el editor vim/nano.
cd /etc/puppetlabs/code/environments/production/
vim manifests/sites.pp
Define el host de destino como‘agent.localdomain.lan‘ y aplica el nuevo manifiesto Puppet ‘lemp‘.
node 'agent.localdomain.lan' {
include lemp
}
Guarda el archivo y sal.
Verifica de nuevo la configuración del manifiesto de Puppet con el siguiente comando.
puppet parser validate site.pp
Verificar y aplicar los manifiestos de Puppet
Ahora has creado un nuevo primer manifiesto de Puppet para desplegar LEMP Stack. En este punto, el nodo Puppet Agent sincronizará automáticamente todos los manifiestos con el servidor Puppet y aplicará una nueva configuración de manifiesto.
Pero también puedes aplicar el manifiesto de Puppet manualmente desde la máquina del Puppet Agent.
Vuelve al servidor de terminales ‘agent’ y ejecuta el siguiente comando para aplicar manualmente los manifiestos de Puppet.
puppet agent -t
Esto ejecutará el manifiesto de Puppet en la máquina Puppet Agent e instalará LEMP Stack a través de los manifiestos de Puppet‘lemp‘.
A continuación se muestra el resultado que obtendrás.
Ahora ejecuta el siguiente comando para verificar cada servicio Nginx, MariaDB y PHP-FPM.
sudo systemctl status nginx
sudo systemctl status mariadb
sudo systemctl status php7.4-fpm
Deberías ver que cada servicio está activo y funcionando.
Ahora abre tu navegador web y escribe la dirección IP de tu nodo Agente en la barra de direcciones. Y deberías ver el archivo index.html personalizado que aparece a continuación.
Ahora has aplicado con éxito el despliegue de LEMP Stack en la máquina Agente utilizando los manifiestos de Puppet.
Conclusión
¡Enhorabuena! Ya has instalado con éxito el Servidor y el Agente de Puppet en Debian 11 Bullseye. Además, has aprendido a crear los primeros manifiestos de Puppet para instalar LEMP Stack.
En el siguiente paso, puede interesarte configurar otro nodo y crear un manifiesto de Puppet más complejo para tus despliegues.