Instalación de Supervisor


Descripción

Supervisor es un monitor de procesos comúnmente utilizado en entornos Linux, este se encarga de detectar las tareas solicitadas y asignarlas en una cola para que se ejecuten, la implementación de este servicio en el facturador es con la intención de que las tareas complejas se ejecuten en segundo plano de manera organizada mediante las colas para no colapsar los recursos de los servidores ni de la aplicación.

Requerimientos previos

  • Tener una instalación realizada con los scripts de Docker
  • Conocer los comandos básicos de docker y el uso de los contenedores del facturador
  • Conocer los comandos básicos de laravel para la eliminación de caché
  • Conocer la edición de archivos en sistemas linux

{info} Para instalaciones en entornos LAMP debe recurrir a los manuales en la web del framework https://laravel.com/docs/5.7/queues#supervisor-configuration

Pasos

  1. conectarse vía SSH a su servidor
  2. dirigirse a la carpeta del proyecto, mayormente esta en /root/facturadorpro41/ la ruta le es entregada en la instalación por su canal de slack si no coincide con la anterior
    cd /root/facturadorpro41
  3. detener los servicios de docker; no tendrá acceso al facturador desde este paso
    docker-compose down
  4. editar el archivo docker-compose.yml
    nano docker-compose.yml
  5. obtener el número de proyecto mayormente 1, si tiene más de un facturador en su servidor ubicarlo en los nombres dentro del archivo en edición, por ejemplo:
    nginx1
    fpm1
    ## el numero al final es el que usará en los siguientes pasos
  6. debe tomar en cuenta los espacios y saltos de línea para añadir el siguiente extracto reemplazando [número_proyecto] por su el número obtenido en el paso anterior, además debe añadirlo antes de la línea que menciona "networks:"
     supervisor[numero_proyecto]:
         image: rash07/php7.4-supervisor
         working_dir: /var/www/html
         volumes:
             - ./:/var/www/html
             - ./supervisor.conf:/etc/supervisor/conf.d/supervisor.conf
         restart: always

    resultando como el siguiente ejemplo:

    version: '3'
     services:
         nginx1:
             image: rash07/nginx
             working_dir: /var/www/html
             environment:
                 VIRTUAL_HOST: facturalo.pro, *.facturalo.pro
             volumes:
                 - ./:/var/www/html
                 - $PATH_INSTALL/proxy/fpms/$DIR:/etc/nginx/sites-available
             restart: always
         fpm1:
             image: rash07/php-fpm:2.0
             working_dir: /var/www/html
             volumes:
                 - ./ssh:/root/.ssh
                 - ./ssh:/var/www/.ssh
                 - ./:/var/www/html
             restart: always
         mariadb1:
             image: mariadb:10.5.6
             environment:
                 - MYSQL_USER=${MYSQL_USER}
                 - MYSQL_PASSWORD=${MYSQL_PASSWORD}
                 - MYSQL_DATABASE=${MYSQL_DATABASE}
                 - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
                 - MYSQL_PORT_HOST=${MYSQL_PORT_HOST}
             volumes:
                 - mysqldata1:/var/lib/mysql
             ports:
                 - "${MYSQL_PORT_HOST}:3306"
             restart: always
         redis1:
             image: redis:alpine
             volumes:
                 - redisdata1:/data
             restart: always
         scheduling1:
             image: rash07/scheduling
             working_dir: /var/www/html
             volumes:
                 - ./:/var/www/html
             restart: always
         supervisor1:
             image: rash07/php7.4-supervisor
             working_dir: /var/www/html
             volumes:
                 - ./:/var/www/html
                 - ./supervisor.conf:/etc/supervisor/conf.d/supervisor.conf
             restart: always
     networks:
         default:
             external:
                 name: proxynet
     volumes:
         redisdata1:
             driver: "local"
         mysqldata1:
             driver: "local"
  7. una vez agregado el extracto guardar y cerrar el archivo en edición
  8. proceder con la creación de un nuevo archivo (en este paso todavía estamos dentro de la carpeta del proyecto, no salir de ella si no ha sido mencionado en algún paso)
    nano supervisor.conf
  9. añadir el siguiente extracto (de conocer las instrucciones puede editarlas en este paso)
    [program:laravel-worker]
    process_name=%(program_name)s_%(process_num)02d
    command=php /var/www/html/artisan queue:work --sleep=3 --tries=3
    autostart=true
    autorestart=true
    stopasgroup=true
    killasgroup=true
    user=root
    numprocs=8
    redirect_stderr=true
    stdout_logfile=/var/www/html/storage/logs/supervisor.log
    stopwaitsecs=3600
  10. una vez finalizado, guardar y cerrar el archivo
  11. editar el archivo .env
    nano .env
  12. dentro del archivo ubicar el parametro de conexion de colas y asignarle el valor de "database"
    QUEUE_CONNECTION=database
  13. una vez finalizado, guardar y cerrar el archivo
  14. iniciar los servicios de docker, si hay error en el proceso algo ha estado mal, por favor comunicar por su canal de slack para mayor atención
    docker-compose up -d
  15. una vez levantado los servicios correctamente, se debe ingresar al contenedor php-fpm, de no conocer como hacerlo, ubicar el manual de actualización
  16. dentro del contenedor, ejecutar el siguiente comando para eliminar la caché y que el proyecto tome los cambios antes realizados
    php artisan config:cache ; php artisan cache:clear
  17. si todo esta correcto, salir con exit del contenedor
  18. ingresar al contenedor supervisor, de la forma similar en que ingresó al contenedor de php
  19. ejecutar los siguientes comandos para que sean leídos los archivos agregados
    service supervisor start
    supervisorctl reread
    supervisorctl update
    supervisorctl start all
  20. si todo esta correcto, salir con exit del contenedor y habrá finalizado el proceso

{info} en caso de realizar modificaciones en el archivo supervisor.conf utilizar posteriormente los comandos del pto. 20