LAMP con Puppet
En esta ocasión se me ha ido la pelota. En un solo artículo vamos a:
- crear una máquina virtual con Vagrant
- configurar Puppet
- configurar librarian-puppet
- instalar todo un entorno LAMP (Linux + Apache + MySQL + Php)
- descargarnos la web de un repositorio remoto Git
- servir su contenido desde el servidor Apache.
Y sabéis que mis artículos se leen en unos 10 minutos.
Jerarquía
Ésta es la jerarquía de archivos que se van a emplear. Así no tendréis que romperos la cabeza más adelante:
.
├── bootstrap.sh
├── manifests/
│ └── site.pp
├── modules/
├── puppet.conf
├── Puppetfile
├── Puppetfile.lock
└── Vagrantfile
Los directorios son los que tienen la barra al final. Creadlos para evitar problemas posteriores.
Vagrant
Lo primero es que no queremos romper nuestra máquina. Así que vamos a usar una máquina virtual. En esta ocasión será una Debian Wheezy de 64 bytes. Pero no os aburriré con tonterías:
|
|
Hay mucho que explicar aquí, pero voy a ser rápido. A parte de toda la parafernalia Ruby que requiere este archivo de configuración, vemos que estoy creando una máquina virtual llamada “wheeze64” y que me la voy a descargar de esa URL. Espero que siga siendo válida, y si no, podéis usar cualquier otra máquina virtual de la lista. Además la he bautizado como “vagrant-example”.
Lo primero que hago es un provisionamiento inicial mediante un script mío que luego veremos. Después me aseguro de que voy a poder acceder a mi servidor web, que estará escuchando en el puerto 80 de la VM, y que estará mapeado con el puerto 9090 de la máquina host.
Finalmente rollos de configuración típicos de Vagrant para que funcione bien con Puppet.
Bootstrap
Mi pequeño script de provisionamiento inicial:
|
|
Básicamente: le meto una configuración de APT fija (así dará igual qué VM hayais elegido) y me aseguro de tener dos cosas instaladas: facter y puppet (en una versión superior a la 3.3). Todo esto ocurrirá en la VM, por lo que no tenéis que temer por vuestras máquinas reales. Estos paquetes me hacen falta para poder ejecutar Puppet, así que en una máquina real tendría que instalarlos a mano.
Puppet
Vamos con puppet, aunque no estoy seguro de que este archivo haga falta:
|
|
Y ahora lo que sí hace falta, la configuración de los nodos:
|
|
Aquí sí que hay telita. Primero establezco la configuración por defecto para los archivos. No es necesario, pero lo he puesto porque siempre lo hago. Luego configuro dos nodos: ’example’ y ‘vagrant-example’. Eso es porque hay dos máquinas que tendrán esta configuración: la real y la que vamos a usar nosotros, que sería la de Vagrant. Así la misma configuración de Puppet os vale para ambas y podéis guarrear en la VM sin romper el servidor.
Luego viene todo lo que instalo: [ntp], logrotate, Apache, MySQL (con la contraseña ‘secret’), Php y Git.
Finalmente un poco de configuración básica para logrotate a modo de ejemplo, indico que quiero usar el módulo de Php para MySQL, llamo a una macro para instalar una pequeña página de ejemplo que mostrará todas las tablas de la base de datos “mysql” desde PHP y configuro Apache para que sirva esa configuración. Todo esto en menos de 20 líneas de código.
Librarian
Bueno, pero… ¿de dónde saco los módulos de puppet que necesito?
Para eso está librarian-puppet, y aquí está su configuración:
|
|
En dos palabras: configuro la fuente de módulos y los que quiero seleccionar.
También se habrá creado el archivo Puppetfile.lock, que contiene las versiones de los módulos que se instalaron. Si metéis esta configuración en un repositorio (cosa que deberíais hacer si lo vais a usar de verdad), recomiendo subirlo también junto con Puppetfile a pesar de ser generado, para evitar disgustos si éstas cambian. Si os cargáis el directorio modules, librarian-puppet tratará de reinstalar las versiones que tiene ese archivo.
Al lío
Pues ya lo tenemos todo. Ahora viene lo mejor. Queremos lanzar la máquina virtual y que se configure sola, pero no tenemos los módulos de Puppet. Así que lo primero es traérselos:
|
|
Y con eso ya está todo. Podréis verlos en el directorio modules. Y ahora la magia: Descargamos, instalamos, proveemos y levantamos la máquina virtual:
|
|
Y podéis conectaros a https://localhost:9090/example, donde os está esperando la lista de tablas de la base de datos mysql, servida con PHP.
También podéis entrar en vuestra VM con:
|
|
Simplemente Acojonante.
Más ventajas
Bueno, pues eso no es todo. Aún hay más.
Si la rama principal del repositorio cambiara, la siguiente ejecución de Puppet la actualizaría. Eso facilita bastante el despliegue y la gestión de un sistema de integración contínua, ¿verdad?