Instalar y configurar Supervisor en un hosting compartido sin acceso a root (cpanel)
Instalar y configurar Supervisor en un hosting compartido puede ser un verdadero dolor de cabeza. Anteriormente en otros artículos hemos visto una introducción a supervisor y su poder en la gestión de procesos del sistema. También hemos visto cómo instalarlo en diferentes sistemas operativos.
- Instalación y configuración de supervisor en MacOS
- Instalación y configuración de supervisor en GNU/Linux Debian
- Instalación y configuración de supervisor en Arch Linux
El día de hoy, veremos cómo instalar y configurar de manera sencilla supervisor en un hosting compartido sin acceso al usuario root.
Requisitos
La base para instalar supervisor es python. Lo primero que debes de asegurarte es que tengas instalado python y puedas ejecutar scripts en él. No te preocupes porque la mayoría de los servidores compartidos tiene python habilitado para sus usuarios. Puedes verificar cuál versión tienes instalada con el siguiente comando.
$ python -V
Python 2.7.5
En este caso la versión es la 2.7.5. Cualquier versión superior a la 2.7 incluída esta serviría para este propósito.
Configuración de easy_install
Easy install es un módulo de python que permite descargar, construir, instalar y administrar paquetes de Python. No es la solución actual para la administración de paquetes ya que ha sido reemplazado por pip, sin embargo es la opción mediante la cual instalaremos supervisor.
Lo más probable es que aún cuando tengas easy_install no puedas instalar paquetes. Para verificar esto intenta ejecutar este comando y seguramente obtendrás algo similar a lo siguiente:
$ easy_install
error: can't create or remove files in install directory
The following error occurred while trying to add or remove files in the
installation directory:
[Errno 13] Permission denied: '/usr/lib/python2.7/site-packages/test-easy-install-12911.write-test'
...
Para solucionar esto debemos configurar un directorio en donde nuestro usuario pueda escribir y allí instalar los paquetes con easy_install. Si estás en un hosting compartido probablemente tu directorio sea del tipo /home/usuario
. Siendo así debes ingresar por SSH, o por terminal desde tu cpanel y y sobreescribir la variable PYTHONPATH a un directorio dentro de tu home.
export PYTHONPATH=$PYTHONPATH:~/bin
mkdir bin supervisor.d
Nota que tambien hemos creado el directorio supervisor.d que será en donde guardaremos todos los archivos de configuración de nuestros procesos.
Instalación de Supervisor con easy_install
Después de esto debemos instalar supervisor con easy_install indicándole el directorio de instalación.
easy_install --install-dir=~/bin supervisor
Si todo ha salido bien puedes proceder a crear la configuración de supervisor con el siguiente comando.
echo_supervisord_conf > supervisord.conf
Una vez hecho esto puedes utilizar vim o el editor de tu preferencia para modificar el archivo supervisor.conf y configurar el directorio de procesos así:
[include]
files = ./supervisor.d/*.ini
Seguido a esto podrías iniciar el daemon de supervisor.
supervisord -c supervisord.conf
Creación de un proceso en Supervisor
Puedes configurar un proceso en supervisor siguiendo este enlace. Una vez configurado tu proceso debes hacer reload a supervisor.
$ supervisorctl reload
Si todo ha salido bien puedes verificar el estado de los procesos de la siguiente manera y verificar que estén corriendo de manera satisfactoria.
$ supervisorctl status
apicheckerworker:apicheckerworker_00 RUNNING pid 6121, uptime 0:02:41
Persistencia
A pesar de que la solución vista en este post funciona, unas semanas después de probar esto en algunos servidores de mis clientes me dí cuenta que las colas estaban sin funcionar. No pasó mucho tiempo después de que entré al servidor y me percaté de que habían reiniciado el servidor y desde ese día no funcionaban.
Para prevenir esto y evitar que tus colas se caigan al reiniciar el servidor debes asegurarte que el servicio de supervisor se inicie con el usuario de la sesión de cpanel. Basta con agregar la siguiente línea a tu archivo ~/.bashrc.
supervisord -c ~/supervisord.conf