Hace poco tiempo escribí un artículo de como configurar Nginx con certificados válidos (gracias a Let’s Encrypt), una de las cosas que estaba incompleta era que al actualizar los certificados con la tarea cron, debíamos además reiniciar Nginx para que use los nuevos certificados. Si no hacemos esto, corremos el peligro de que pese a tener los certificados renovados se muestren como no válidos debido a que está usando los viejos y/o revocados.
Es por ello que hoy vamos a usar la herramienta incron para monitorizar el directorio de los certificados y si estos cambian para bien o para mal, Nginx se reiniciará después de comprobar que la configuración funciona.
También decir que si lo que busca es un tutorial completo de esta herramienta puede leer uno en español aquí o el artículo en el que me he basado para escribir este en inglés.
Requisitos
- Servidor Linux, este artículo está hecho para servidores debian. Para otros deberá usar el instalador de paquetes de su distribución (CentOS, yum; por poner un ejemplo). Lo demás es exactamente igual.
Instalando incron
Para instalar estas herramientas tan solo debemos ejecutar apt:
$ apt-get install -y incron
Reiniciar Nginx si no hay fallos de configuración
Para hacer esta labor he hecho un script que almaceno en /opt/nginx-restart.sh
:
#!/usr/bin/env bash
##
# Script to reload nginx if there are no errors on config files
# Author: Gabriel Trabanco
# Website: www.gabi.uno
##
`which nginx` -t
if [ $? -eq 0 ]
then
echo "Reloading Nginx Configuration"
/etc/init.d/nginx restart
fi
Quizás sea más correcto $ service nginx restart
no lo sé, yo lo he hecho así sin más y funciona.
El crontab de incron: incrontab
Para utilizar incrontab
lo haremos como si de crontab
se tratara.
Para ello añadiremos comandos con el formato:
/directorio/a/comprobar TAREA_PARA_MONITORIZAR comando_a_ejecutar
Por ejemplo, para monitorizar los cambios en los certificados y reiniciar nginx yo tengo:
/etc/letsencrypt/live/blog.gabi.com.es IN_MODIFY,IN_CREATE,IN_DELETE /opt/nginx-restart.sh
Usando $ incrontab -e
como root
Habréis notado que al tratar de agregar una tarea como root os dice «que os peinéis» y no sé si teneis peine o no pero si que tenéis la solución.
Para poder añadir tareas como root (y en realidad cualquier usuario) debemos de añadir el usuario a la lista de usuarios permitidos a usar incrontab
, esta lista se encuentra en /etc/incron.allow
Configurando incron
Una de las cosas que se puede configurar en incron es hacer que en vez de abrirnos el editor de textos nano nos abra vim (por ejemplo y en mi caso) para editar las tareas, para ello debemos abrir el archivo de configuración /etc/incron.conf
y en la última línea añadir o modificar la línea comentada (y descomentarla) por:
editor = vim
Ni que decir que esta sección no es más que una excusa para que sepáis que incron se puede configurar.
Más información
Hay bastantes eventos a los que añadir tareas, te sugiero que mires alguna de las referencias que figuran al pie de página. Recomiendo la fuente que he usado para este artículo, es ligeramente mejor que el artículo en español, de todas formas si no sabes inglés o prefieres leer la documentación en español con lo que digo aquí más el tutorial en español tendrás contenido de sobra.
Fuentes y referencias:
- https://www.howtoforge.com/tutorial/trigger-commands-on-file-or-directory-changes-with-incron/ ↩
- Antigua web oficial con una sección de documentación y preguntas frecuentes suficiente buenas: http://inotify.aiken.cz/ ↩
- Tutorial en español: http://www.cyberhades.com/2009/01/30/tutorial-de-incron/ ↩