Instalación de GLPI 10RC(9.5.7 stable) en debian 11 con php 8 y las últimas versiones de Nginx y MariaDB.

Tal como me sucedió la otra vez, me di cuenta que mi servicio de GLPI estaba desactualizado. Pues lo tenía en Debian 9 y una versión del mismo un tanto antigua. Por lo que me di a la tarea de revisar el sitio oficial y cual sería mi sorpresa al ver que muy pronto están al liberar la versión 10 de GLPI. Esta nueva versión incluye muchísimas mejoras, aquí les dejo un resumen.

  • Las nuevas funciones de asistencia incluyen vista Kanban para objetos ITIL, optimización de reglas comerciales y estado pendiente.
  • La nueva interfaz se basa en tabler, Bootstrap 5 y Twig, trae muchos cambios visuales. La integración de estas bibliotecas estándar facilitará el desarrollo de nuevas interfaces y, sobre todo, traerá un modo de visualización «receptivo» que es más fácil de mantener.
  • Inventario dinámico nativo (recuperación de datos de agentes de inventario)

Esta última característica es muy importante ya que dejaríamos de usar plugin de inventario tales como OCS Inventory o FusionInventory. Ya que esta vez contara con inventario nativo, una característica muy solicitada.

Para este tutorial utilizaremos como sistema operativo Debian 11 y las últimas versiones de php, nginx y mariadb. También pueden usar Ubuntu. Como en la mayoría de mis tutoriales siempre usamos proxmox como virtualizador, por lo que crearemos un contenedor con Debian 11 y las siguientes características:

  • CPU 1 cores
  • RAM 512 MB
  • SWAP 1GB
  • HDD 8GB

Actualizamos nuestro sistema operativo

apt update
apt upgrade

Ahora vamos a instalar todas las dependencias necesarias para que nuestro GLPI funcione, para ellos vamos a revisar su sitio.

Prerequisites

GLPI is a Web application that will need:

  • a webserver;
  • PHP;
  • a database.

Web server

GLPI requires a web server that supports PHP, like:

PHP

PHP Compatibility Matrix
GLPI Version Minimum PHP Maximum PHP
9.4.X 5.6 7.4
9.5.X 7.2 8.0
10.0.X 7.4 8.1

Como se puede apreciar necesitamos un servidor web que soporte PHP y una base de datos. Por lo que usaremos un servidor LEMP lo más actualizado posible. Para ello me guiare en los tutoriales de los cuales siempre están al día.

Dependencias básicas:

apt install curl gnupg2 lsb-release

GPG de Nginx y PHP:

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add -

Repositorios de Nginx, PHP y MAriaDB:

Repos de Nginx y PHP:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
echo "deb [arch=amd64] https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list

Repo de MariaDB:

cd ~
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup   
./mariadb_repo_setup --mariadb-server-version="mariadb-10.6"

Este script nos arrojara una salida como la que se muestra

root@glpi10:~# ./mariadb_repo_setup --mariadb-server-version="mariadb-10.6"
# [info] Checking for script prerequisites.
# [info] MariaDB Server version 10.6 is valid
# [info] Repository file successfully written to /etc/apt/sources.list.d/mariadb.list
# [info] Adding trusted package signing keys...
# [info] Running apt-get update...
# [info] Done adding trusted package signing keys

NOTA: Debido a que el link para descargar el script de MariaDB está cerrado para Cuba hay que hacer uso de una VPN. Por suerte es pequeño así que aqui se los dejo.

Instalación de NGINX y MariaDB

**Actualizamos:**
apt update

**NGINX:**
apt install -y nginx
systemctl enable nginx.service

**MariaDB:**
apt update -q4 && apt install -y mariadb-server

Ahora vamos a mejorar la seguridad del servidor de base de datos utilizando la herramienta incluida «mysql_secure_installation». Durante una instalación inicial, no hay contraseña para root, por lo que puede confirmar la consulta con ENTER. Se recomienda establecer una contraseña, el cuadro de diálogo correspondiente aparece automáticamente:

mysql_secure_installation
Enter current password for root (enter for none): <ENTER> or type the password

Switch to unix_socket authentication [Y/n] Y
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Configurando MariaDB:

service mysql stop
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak && nano /etc/mysql/my.cnf

Dentro de my.cnf copiaremos el contendio de este enlace. El cual mostramos a continuacion:

[client]
default-character-set = utf8
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log
nice = 0
socket = /var/run/mysqld/mysqld.sock
[mysqld]
basedir = /usr
bind-address = 127.0.0.1
binlog_format = ROW
bulk_insert_buffer_size = 16M
character-set-server = utf8
collation-server = utf8_general_ci
concurrent_insert = 2
connect_timeout = 5
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expire_logs_days = 2
general_log_file = /var/log/mysql/mysql.log
general_log = 0
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 4000
innodb_flush_method = O_DIRECT
# ab MariaDB 10.6 notwendig
innodb_read_only_compressed=OFF
####
key_buffer_size = 128M
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
log_error = /var/log/mysql/mysql_error.log
log_slow_verbosity = query_plan
log_warnings = 2
long_query_time = 1
max_allowed_packet = 16M
max_binlog_size = 100M
max_connections = 200
max_heap_table_size = 64M
myisam_recover_options = BACKUP
myisam_sort_buffer_size = 512M
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
query_cache_limit = 2M
query_cache_size = 64M
query_cache_type = 1
query_cache_min_res_unit = 2k
read_buffer_size = 2M
read_rnd_buffer_size = 1M
skip-external-locking
skip-name-resolve
slow_query_log_file = /var/log/mysql/mariadb-slow.log
slow-query-log = 1
socket = /var/run/mysqld/mysqld.sock
sort_buffer_size = 4M
table_open_cache = 400
thread_cache_size = 128
tmp_table_size = 64M
tmpdir = /tmp
transaction_isolation = READ-COMMITTED
#unix_socket=OFF
user = mysql
wait_timeout = 600
[mysqldump]
max_allowed_packet = 16M
quick
quote-names
[isamchk]
key_buffer = 16M

Guarde y cierre el archivo y, a continuación, reinicie el servidor de base de datos:

service mysql restart

GLPI necesita trabajar con el servicio de bases de datos, ya sea MariaDB o MySQL. Para preparar la base de datos conectamos con el cliente de consola mysql y un usuario administrador:

~$ mysql -u root -p

En MySQL 5 ó MariaDB creamos el usuario así:
> create user glpi@localhost identified by 'password';

Creamos la base de datos para GLPI:
> create database glpi charset utf8 collate utf8_general_ci;

Concedemos permisos al usuario sobre la base:
> grant all privileges on glpi.* to glpi@localhost;

Además, el usuario también debe tener acceso a la tabla de nombres de zonas horarias de MySQL:
> grant select on mysql.time_zone_name to glpi@localhost;

> FLUSH privileges;

Y finalizamos la sesión:
> exit

Hemos creado usuario y base de datos con el mismo nombre (glpi) usando la clave password(ustedes pondrían su clave)

Como las tablas de zonas horarias de MySQL no suelen estar cargadas por defecto, las cargaremos ayudándonos de la herramienta mysql_tzinfo_to_sql:

root@glpi10:~# mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root -p mysql
Enter password:
Warning: Unable to load '/usr/share/zoneinfo//leap-seconds.list' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo//leapseconds' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo//tzdata.zi' as time zone. Skipping it.

Esas advertencias durante el proceso son perfectamente normales.

Instalación de PHP 8.0 (fpm):

Como pudimos apreciar en la tabla de compatibilidad que nos da la web oficial de GLPI, las versiones 9.5 a 10 son compatibles con PHP 8.0. Por lo que instalaremos esta versión y no la 8.1 que es muy reciente. También por si les interesa y no son amantes de estar en versiones tan altas por miedo a soporte y compatibilidad les doy el comando para que si desean usar PHP 7.4 la más estable.

**PHP:**
apt update -q4 && apt install -y php7.4-{fpm,curl,gd,mysql,cli,ldap,apcu,xmlrpc,mbstring,xml,intl,zip,bz2}

apt update -q4 && apt install -y php8.0-{fpm,curl,gd,mbstring,mysql,xml,intl,cli,ldap,xmlrpc,apcu,bz2,zip}

Ahora reinicie ambos servicios, nginx y PHP:

service php8.0-fpm restart && service nginx restart

Comprobamos que los 3 servicios estén corriendo

service nginx status
service php8.0-fpm status
service mariadb status

Si todo esta correcto pues pasamos a descargar nuestro GLPI. Como recomendación, sería una muy buena práctica hacer una salva de nuestro contenedor.

Instalación de GLPI:

Como dice el título del tutorial les mostrare la instalación de la versión 10 RC (release candidate) del GLPI. Se que muchos dirán que al ser una versión release candidate no es estable para producción, pero el procedimiento es el mismo tanto para esta versión como para una estable. Además, pronto la versión 10 será la definitiva y este tutorial seguirá siendo efectivo. Por lo tanto, les daré las 2 opciones. Así que procederemos a descargar la versión que nos interesa instalar:

wget -q https://github.com/glpi-project/glpi/releases/download/10.0.0-rc1/glpi-10.0.0-rc1.tgz  (release)

wget -q https://github.com/glpi-project/glpi/releases/download/9.5.7/glpi-9.5.7.tgz  (estable)

Procederemos a descompactar y ubicar nuestra web.

tar xzvf glpi-10.0.0-rc1.tgz -C /var/www/html/

tar xzvf glpi-9.5.7.tgz -C /var/www/html/

NOTA: Recordar que deben elegir entre una de las 2 versiones.

Procedemos a darle los permisos correspondientes

chown -R www-data: /var/www/html/glpi/

Creacion de la configuración para NGINX

 nano /etc/nginx/conf.d/nginx.conf

Dentro escribimos lo siguiente:

server {
        listen   80 default_server;
        #listen      443 ssl;
        root /var/www/html;
        index index.php;
        server_name glpi10.midominio.cu;
        charset utf-8;
        
                 
        # <- your SSL Settings here!
        #ssl_certificate /etc/ssl/glpi/server_crt.pem;
        #ssl_certificate_key /etc/ssl/glpi/server_key.pem;
        #ssl_trusted_certificate /etc/ssl/glpi/server_crt.pem;
        #ssl_session_timeout 1d;
        #ssl_session_cache shared:SSL:50m;
        #ssl_session_tickets off;

        location /api {
        rewrite ^/api/(.*)$ /apirest.php/$1 last;
        try_files $uri $uri/ /index.php?$query_string;
    }
        
              
        #prise en charge PHP
        location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_index index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param SERVER_NAME $host;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
                           }
}

Modificaremos los parámetros:

Comentar el parámetro listen 80 default_server y descomentar listen 443 ssl y todo lo relativo a la configuración SSL (<- your SSL Settings here!), si usaremos conexión segura SSL. Usando los certificados creados por ustedes o de letsencrypt.

server_name: Nombre de nuestro servidor

fastcgi_pass unix: Si usas php 8.0 (/var/run/php/php8.0-fpm.sock). Si usas php 7.4 (unix:/var/run/php/php7.4-fpm.sock)

Es el momento de instalar GLPI vía web. Para ello accedemos desde el navegador con la URL:

http://ip_del_glpi/glpi
http://dominio.cu/glpi

NOTA: Si usaron sus certificados (ssl 443) pues el enlace llevaría https://

Ahora les hablare del error php8.0-fpm.sock failed (13 permission denied) que me sucedió al querer acceder a la web de GLPI. Si al poner la URL no les abre la web y revisan los logs de NGINX y ven este error no se preocupen que es de fácil solución. El problema está dado por los permisos de usuario. PHP usa de grupo y usuario www-data y NGINX usa nginx. Si nos fijamos en la configuración del PHP viendo el contenido del fichero /etc/php/8.0/fpm/pool.d/www.conf podemos observar los permisos que vienen por defecto.

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www-data
group = www-data

.......................................................
; Note: This value is mandatory.
listen = /run/php/php8.0-fpm.sock
..............................................

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = www-data
listen.group = www-data
;listen.mode = 0660

Ahí se aprecia que www-data es el usuario y el grupo y que esta escuchado por socket usando php8.0-fpm.sock como mismo definimos en la configuración de nginx. Pero NGINX usa el usuario nginx el cual no tiene permiso por eso deniega el uso de fpm. ¿Como lo solucionamos? Pues muy fácil editaremos el usuario de NGINX

nano /etc/nginx/nginx.conf

Al principio de la configuración buscamos la línea:

user  nginx;
worker_processes  auto;

sustituimos por 

user  www-data;
worker_processes  auto;

Reiniciamos los servicios

service php8.0-fpm restart && service nginx restart

Y ya podremos acceder a la URL de GLPI, donde comenzaremos el proceso de instalación vía web. Transitaremos por 6 pasos hasta completar la instalación de la web. Luego de escoger idioma y de aceptar los términos de la licencia nos saldrán las siguientes pantallas:

Como es una instalación en limpio desde 0 elegiremos instalar. Se nos mostrará la lista de requerimientos de configuración del sistema para poder instalar GLPI.

Si has seguido los pasos previos a la instalación, se mostrará una larga lista de verificaciones correctas. En caso de que faltara algo puedes solucionarlo y recargar la página.

NOTA: Podemos ignorar la advertencia de permitir acceso web al directorio de archivos y repararlo luego.

A continuación, configuramos la conexión a la base de datos:

Especificaremos la dirección del servidor de bases de datos, en nuestro caso esta local o localhost. Obviamente también introduciremos el usuario y la contraseña que creamos anteriormente.

NOTA: En la imagen se observa el usuario root, pero el que definimos realmente es glpi.

Seleccionaremos la base de datos que también se nombra glpi y si todo está bien y tenemos acceso al servidor de datos nos dará conexión de datos correcta.

Una página informativa nos hará saber que la inicialización de la base de datos ha sido correcta:

En el siguiente paso tendremos que decidir si queremos enviar información estadística anónima para mejorar GLPI. Asimismo, tenemos la opción de rellenar una encuesta sobre GLPI:

Otra opción que nos ofrecerá el instalador será la de acceder a servicios de soporte profesional o incluso donaciones para el proyecto:

Por fin termina la instalación de GLPI y se nos muestra una lista de usuarios del sistema con sus contraseñas iniciales. Las cuales nos advierte cambiar una vez entremos por primera vez.

Al continuar se mostrará la página de inicio de sesión, donde sólo podremos usar alguno de los usuarios especificados anteriormente:

En este caso hemos accedido con el usuario administrador glpi (con contraseña glpi) y la página inicial nos muestra una serie de avisos:

Con respecto a la eliminación del instalador web es sencillo, ya que lo podemos realizar desde consola:

rm /var/www/html/glpi/install/install.php

Para cambiar las contraseñas iniciales de los usuarios podemos acudir a Administración/Usuarios

Desde la versión 9.5 de GLPI ya se incluye un mercado donde podremos descargar complementos(plugin). Ya no tendremos que ponerlos de forma manual como se hacía en versiones anteriores.

Como se aprecia en la imagen nos preguntan si queremos ver los complementos en la forma antigua o usar el mercado. Para poder usar el GLPI Market debemos primeramente registrarnos gratuitamente en el siguiente enlace. Una vez registrados vamos a la opción de Registro y a la derecha veremos una clave de registro con la cual podremos usar el mercado en nuestro GLPI.

Copiaremos dicha clave de registro y la usaremos en nuestro GLPI ya sea el 9.5 o el 10. Para ello iremos a Configuración/General/GLPI Networks y pegamos ahí la clave de registro que nos proporcionaron.

Ahora ya podemos acceder al mercado

Finalmente les muestro como quedo nuestro servidor GLPI donde se aprecia que usamos las últimas versiones al día de hoy.

Este proceso de instalación les servirá también el día que liberen la versión GLPI 10 stable. Espero les sirva y nos veremos en próximos tutoriales.

 

¿De cuánta utilidad te ha parecido este contenido?

Alexander Rivas Alpizar

Administrador de Redes EMPRESTUR Cienfuegos

Ver comentarios

  • Excelente, muchas gracias, muy bien explicado y comprobados los pasos, aún válidos, sólo unos pequeños ajustes.
    La ruta para nginx es diferente, el paquete se debe descomprimir a:

    tar xzvf glpi-10.0.2.tgz -C /usr/share/nginx/html/

    De otra parte, aunque cargaba bien la página de GLPI, probando, antes del ajuste de nginx.conf, sí cargaba el index.html, luego no, aunque no afectaba la funcionalidad, para comprobar que todo estaba bien, tuve que hacer este ajuste en nginx.conf (agregar index.html):

    #nano /etc/nginx/conf.d/nginx.conf
    index index.html index.php;

    También instalé y GLPI Inventory, con GLPI Agent, todo muy bien.
    En GLPI Agent, la ruta del servidor depende del modo de instalación.
    https://glpi-agent.readthedocs.io/en/latest/configuration.html

    Sería bueno actualizar el artículo hasta ese punto, creo que es parte de la funcionalidad esencial de GLPI, el llevar el inventario.

    Gracias nuevamente.

    • Como pudiste leer al principio del tutorial, la version 10 ya no necesitara de complementos externos para hacer inventario. Por lo que no es prioridad actualizar fusion ni ocs inventory para esta version. Hay que probar el inventario nativo que esta version trae cuando ya salga la version estable.
      alex out

Compartir
Publicado por
Alexander Rivas Alpizar
Etiquetas: glpilempphp 8

Entradas recientes

Alta disponibilidad de sus base de datos con Percona XtraDB Cluster en Kubernetes

Uno de los grandes retos al que nos podemos enfrentar cuando una aplicación crece, es…

8 meses hace

Home automation (Parte 3) – ESPHome

Qué es lo que deseo hacer en este capítulo? Básicamente un sonoff, quiero encender/apagar las…

1 año hace

Home automation (Parte 2) – Home Assistant

Hace algunos meses estoy escuchando hablar del proyecto Home Assistant (HA). En palabras literales del…

1 año hace

Home automation (Parte 1)

Desde hace varios meses vengo con la idea de automatizar la casa donde vivo. Poco…

1 año hace

Cocinando una imagen personalizada de OpenWRT

El artículo describe el uso para un caso particular de OpenWRT y la creación de…

1 año hace