Chapitre 2 - Installation de GLPI

Installation du serveur, de la base de données, de PHP et d’Apache.

Installation d’Apache, PHP et MariaDB

3.1 Installer Apache, MariaDB et PHP

sudo apt install -y \
  apache2 mariadb-server cron \
  libapache2-mod-php8.2 \
  php8.2 php8.2-cli php8.2-common php8.2-opcache \
  php8.2-mysql php8.2-curl php8.2-gd php8.2-intl \
  php8.2-bcmath php8.2-mbstring php8.2-xml \
  php8.2-zip php8.2-bz2 php8.2-ldap php8.2-apcu \
  curl wget ca-certificates tar unzip ldap-utils netcat-openbsd

Activer et démarrer les services :

sudo systemctl enable --now apache2 mariadb
sudo systemctl status apache2 mariadb --no-pager

Contrôler PHP :

php -v
php -m | sort

Les modules importants doivent inclure au minimum bcmath, curl, dom, fileinfo, gd, intl, mbstring, mysqli, openssl, session, xml et zlib.


3.2 Sécuriser MariaDB

sudo mariadb-secure-installation

Recommandations :

Sur Debian, le compte MariaDB root utilise généralement l’authentification locale par socket. Il n’est pas obligatoire de lui attribuer un mot de passe si l’accès administrateur se fait avec sudo mariadb.


Documentation GLPI 11 — Debian 12, Apache, PHP 8.2 et MariaDB.

Base de données et fuseaux horaires

3.3 Créer la base GLPI

Ouvrir MariaDB :

sudo mariadb

Exécuter les requêtes suivantes en remplaçant le mot de passe :

CREATE DATABASE glpi
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

CREATE USER 'glpi'@'localhost'
  IDENTIFIED BY 'MOT_DE_PASSE_BDD_TRES_LONG';

GRANT ALL PRIVILEGES ON glpi.* TO 'glpi'@'localhost';

FLUSH PRIVILEGES;
EXIT;

Tester le compte :

mariadb -u glpi -p -e "SHOW DATABASES;"

Le compte doit voir la base glpi.


3.4 Charger les fuseaux horaires dans MariaDB

Cette étape permet à GLPI de proposer correctement les fuseaux horaires :

sudo mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mariadb mysql
sudo systemctl restart mariadb

Vérification :

sudo mariadb mysql -e \
  "SELECT Name FROM time_zone_name WHERE Name='Europe/Paris';"

Avec GLPI 11, il ne faut pas accorder au compte applicatif des droits globaux sur les tables système MariaDB.


Documentation GLPI 11 — Debian 12, Apache, PHP 8.2 et MariaDB.

Téléchargement et organisation des répertoires

3.5 Télécharger GLPI

Toujours télécharger l’archive officielle glpi-VERSION.tgz. Les archives GitHub nommées Source code ne contiennent pas toutes les dépendances nécessaires et ne doivent pas être utilisées.

cd /tmp
GLPI_VERSION="11.0.8"
wget "https://github.com/glpi-project/glpi/releases/download/${GLPI_VERSION}/glpi-${GLPI_VERSION}.tgz"
tar -xzf "glpi-${GLPI_VERSION}.tgz"
sudo mv glpi /var/www/glpi

Vérifier la présence des fichiers :

ls -la /var/www/glpi
ls -la /var/www/glpi/public

3.6 Séparer le code, la configuration et les données

Créer les répertoires persistants :

sudo mkdir -p \
  /etc/glpi \
  /var/lib/glpi/files \
  /var/lib/glpi/marketplace \
  /var/log/glpi

Copier les données initiales :

sudo cp -a /var/www/glpi/config/. /etc/glpi/
sudo cp -a /var/www/glpi/files/. /var/lib/glpi/files/

Créer /var/www/glpi/inc/downstream.php :

sudo tee /var/www/glpi/inc/downstream.php >/dev/null <<'PHP'
<?php
define('GLPI_CONFIG_DIR', '/etc/glpi/');

if (file_exists(GLPI_CONFIG_DIR . '/local_define.php')) {
    require_once GLPI_CONFIG_DIR . '/local_define.php';
}
PHP

Créer /etc/glpi/local_define.php :

sudo tee /etc/glpi/local_define.php >/dev/null <<'PHP'
<?php
define('GLPI_VAR_DIR', '/var/lib/glpi/files');
define('GLPI_LOG_DIR', '/var/log/glpi');
define('GLPI_MARKETPLACE_DIR', '/var/lib/glpi/marketplace');
PHP

Appliquer les permissions :

sudo chown -R root:root /var/www/glpi
sudo find /var/www/glpi -type d -exec chmod 0755 {} \;
sudo find /var/www/glpi -type f -exec chmod 0644 {} \;

sudo chown -R www-data:www-data \
  /etc/glpi \
  /var/lib/glpi \
  /var/log/glpi

sudo find /etc/glpi /var/lib/glpi /var/log/glpi \
  -type d -exec chmod 0750 {} \;
sudo find /etc/glpi /var/lib/glpi /var/log/glpi \
  -type f -exec chmod 0640 {} \;

Le code de GLPI est en lecture seule pour Apache. Les répertoires contenant la configuration, les documents, le cache, les journaux et la Marketplace restent accessibles en écriture à www-data.


Documentation GLPI 11 — Debian 12, Apache, PHP 8.2 et MariaDB.

Configuration de PHP et Apache

3.7 Configurer PHP

Créer /etc/php/8.2/apache2/conf.d/99-glpi.ini :

sudo tee /etc/php/8.2/apache2/conf.d/99-glpi.ini >/dev/null <<'INI'
date.timezone = Europe/Paris
memory_limit = 512M
max_execution_time = 600
max_input_vars = 5000
post_max_size = 64M
upload_max_filesize = 64M

session.cookie_httponly = On
session.cookie_samesite = Lax

opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
INI

Lorsque l’instance est accessible uniquement en HTTPS, ajouter :

session.cookie_secure = On

Redémarrer Apache :

sudo systemctl restart apache2

Contrôler les valeurs chargées :

php -i | grep -E \
  'date.timezone|memory_limit|upload_max_filesize|post_max_size'

3.8 Configurer le VirtualHost Apache

Créer /etc/apache2/sites-available/glpi.conf :

<VirtualHost *:80>
    ServerName glpi.dreamsaphir.fr

    DocumentRoot /var/www/glpi/public

    <Directory /var/www/glpi/public>
        Options FollowSymLinks
        AllowOverride None
        Require all granted

        RewriteEngine On

        # Transmettre l'en-tête Authorization à GLPI.
        RewriteCond %{HTTP:Authorization} ^(.+)$
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

        # Envoyer les requêtes vers le routeur GLPI,
        # sauf lorsqu'un fichier existe réellement.
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/glpi-error.log
    CustomLog ${APACHE_LOG_DIR}/glpi-access.log combined
</VirtualHost>

Activer le site et la réécriture :

sudo a2enmod rewrite
sudo a2ensite glpi.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Le résultat de apache2ctl configtest doit être :

Syntax OK

Documentation GLPI 11 — Debian 12, Apache, PHP 8.2 et MariaDB.

Finalisation de l’installation et comptes par défaut

3.9 Vérifier les prérequis GLPI

Toujours lancer les commandes de la console GLPI avec le compte du serveur Web afin d’éviter la création de fichiers appartenant à root :

cd /var/www/glpi
sudo -u www-data php bin/console glpi:system:check_requirements

Corriger toutes les erreurs obligatoires avant de poursuivre.


3.10 Terminer l’installation depuis le navigateur

Ouvrir :

http://glpi.dreamsaphir.fr

Puis :

  1. choisir le français ;
  2. accepter la licence ;
  3. sélectionner Installer ;
  4. saisir le serveur MariaDB localhost ;
  5. saisir l’utilisateur glpi et son mot de passe ;
  6. sélectionner la base glpi ;
  7. terminer l’installation.

Installation alternative en ligne de commande

cd /var/www/glpi
sudo -u www-data php bin/console db:install \
  --default-language=fr_FR \
  --db-host=localhost \
  --db-name=glpi \
  --db-user=glpi \
  --db-password

L’option --db-password sans valeur demande le mot de passe de façon interactive et évite de l’enregistrer dans l’historique du shell.


3.11 Comptes créés par défaut

Identifiant Mot de passe initial Profil
glpi glpi Super-Admin
tech tech Technicien
normal normal Utilisateur
post-only postonly Libre-service

Immédiatement après la première connexion :

  1. créer un compte administrateur nominatif ;
  2. tester ce nouveau compte ;
  3. changer le mot de passe du compte glpi et le désactiver si possible ;
  4. supprimer ou désactiver les comptes tech, normal et post-only s’ils ne sont pas utilisés ;
  5. activer l’authentification multifacteur pour les comptes privilégiés.

Il peut être utile de conserver un compte administrateur local de secours, avec un mot de passe long conservé dans un coffre-fort et utilisé uniquement en cas de panne de l’annuaire.



Documentation GLPI 11 — Debian 12, Apache, PHP 8.2 et MariaDB.