# Installer GLPI sur Ubuntu

{% embed url="<https://www.youtube.com/watch?v=Dc0dy1Z6MyM>" %}

***

Pour cette installation, nous avons besoin

* D'un serveur Linux Ubuntu 22.04 LTS
* D'un serveur web - Apache
* D'un interpréteur de code - PHP
* D'une plateforme de gestion de serveur de base de données - MariaDB dans ce cas

Nous séparons ce processus en 6 étapes :

1. Installation des composants
2. Configuration de la base de données
3. Préparation des fichiers et dossiers pour installer GLPI
4. Donner les bonnes permissions de dossier et fichiers sur linux pour installer GLPI
5. Configuration du serveur web et PHP
6. Démarrage de l'installation web

## 1 - Installation des composants

Avant de commencer, assurez-vous que votre serveur est à jour

```
apt update && apt upgrade
```

{% hint style="warning" %}
Si votre pare-feu est activé, vous devez autoriser les connexions ssh, http et https vers ce serveur. Selon vos politiques de sécurité.
{% endhint %}

Pour ce post, nous utilisons Apache 2, MariaDB Server, PHP et ses extensions respectives. Si votre système d'exploitation et vos dépôts sont mis à jour, la dernière version stable des extensions est déjà celle téléchargée.

```
apt install -y apache2 php php-{apcu,cli,common,curl,gd,imap,ldap,mysql,xmlrpc,xml,mbstring,bcmath,intl,zip,redis,bz2} libapache2-mod-php php-soap php-cas
apt install -y mariadb-server
```

* Après que tous les composants soient installés, nous devons suivre les étapes 2 - 6.

## 2 - Configuration de la Base de Données

MariaDB, par défaut est fourni sans mot de passe par défaut défini pour l'utilisateur root et avec quelques paramètres par défaut qui doivent être correctement configurés.

***

### Sécuriser l'Installation MariaDB

```
mysql_secure_installation
```

**Recommandation minimale**

* Changer le mot de passe root
* Supprimer les utilisateurs anonymes
* Interdire la connexion root à distance
* Supprimer la base de données de test
* Recharger les tables de privilèges

De plus, puisque GLPI est un outil ITSM global qui peut être utilisé par des personnes du monde entier en même temps, vous aimeriez activer la possibilité pour l'utilisateur du service de base de données GLPI de lire les informations de fuseau horaire depuis votre base de données mysql par défaut.

```
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql
```

***

### Créer un utilisateur et une base de données dédiés à GLPI

```
mysql -uroot -pmysql
CREATE DATABASE glpi;
CREATE USER 'glpi'@'localhost' IDENTIFIED BY 'yourstrongpassword';
GRANT ALL PRIVILEGES ON glpi.* TO 'glpi'@'localhost';
GRANT SELECT ON `mysql`.`time_zone_name` TO 'glpi'@'localhost';
FLUSH PRIVILEGES;
```

{% hint style="danger" %}
Choisissez un mot de passe sécurisé et fort pour votre utilisateur de service. C'est l'utilisateur que GLPI utilise pour accéder et sauvegarder des informations dans la Base de Données GLPI.
{% endhint %}

## 3 - Préparation des fichiers pour Installer GLPI

Après avoir installé les composants et créé une première base de données et un utilisateur de service pour recevoir les dossiers GLPI, vous téléchargerez la version \*.tgz la plus récente de GLPI et la stockerez dans le dossier racine principal d'apache.

{% hint style="success" %}
Vous pouvez toujours trouver la dernière version stable sur <https://glpi-project.org/download>
{% endhint %}

```
cd /var/www/html
wget https://github.com/glpi-project/glpi/releases/download/10.0.19/glpi-10.0.19.tgz
tar -xvzf glpi-10.0.19.tgz
```

***

### Répartition de la Hiérarchie du Système de Fichiers

Dans ce scénario nous stockons les informations GLPI dans différents dossiers et suivant la FHS où, généralement.

* **/etc/glpi** : pour les fichiers de configuration de GLPI (config\_db.php, config\_db\_slave.php) ;
* **/var/www/html/glpi** : pour le code source de GLPI (en lecture seule), servi par Apache;
* **/var/lib/glpi** : pour les fichiers variables de GLPI (session, documents uploadés, cache, cron, plugins, …);
* **/var/log/glpi** : pour les fichiers de log de GLPI.

Pour s'assurer que GLPI trouvera ces fichiers, nous devons indiquer dans deux fichiers différents où ces dossiers sont sur le système :

***

### Le fichier Downstream

Le fichier `downstream.php` est responsable d'instruire l'application GLPI où le `GLPI_CONFIG_DIR` - le répertoire de configuration de GLPI - est stocké. Rappelez-vous, nous devons indiquer `/etc/glpi` comme le nouveau dossier pour les fichiers de configuration. GLPI comprend qu'un fichier appelé `downstream.php` à l'intérieur du dossier `inc` a ces instructions.

* Créer le fichier `downstream.php`

```
vim /var/www/html/glpi/inc/downstream.php
```

* Déclarer le nouveau dossier de fichier de configuration - vous pouvez insérer ce contenu dans ce fichier que vous avez créé

```
<?php
define('GLPI_CONFIG_DIR', '/etc/glpi/');
if (file_exists(GLPI_CONFIG_DIR . '/local_define.php')) {
require_once GLPI_CONFIG_DIR . '/local_define.php';
}
```

* Maintenant vous pouvez déplacer les dossiers de leur répertoire actuel vers les nouveaux répertoires :

```
mv /var/www/html/glpi/config /etc/glpi
mv /var/www/html/glpi/files /var/lib/glpi
mv /var/lib/glpi/_log /var/log/glpi
```

Après avoir déclaré le nouveau **`GLPI_CONFIG_DIR`** avec le **`downstream.php`**, naviguez vers ce nouveau répertoire **`/etc/glpi`** et créez un nouveau fichier appelé local\_define.php. Ce fichier est responsable d'instruire GLPI où les autres répertoires sont stockés.

Nous changeons le dossier documents ( **`files`** ) et le dossier logs ( **`files/_log`** ) vers leur nouveau répertoire.

* Créer le fichier `local_define.php`

```
vim /etc/glpi/local_define.php
```

* Collez le suivant dans ce fichier

```
<?php
define('GLPI_VAR_DIR', '/var/lib/glpi');
define('GLPI_DOC_DIR', GLPI_VAR_DIR);
define('GLPI_CACHE_DIR', GLPI_VAR_DIR . '/_cache');
define('GLPI_CRON_DIR', GLPI_VAR_DIR . '/_cron');
define('GLPI_GRAPH_DIR', GLPI_VAR_DIR . '/_graphs');
define('GLPI_LOCAL_I18N_DIR', GLPI_VAR_DIR . '/_locales');
define('GLPI_LOCK_DIR', GLPI_VAR_DIR . '/_lock');
define('GLPI_PICTURE_DIR', GLPI_VAR_DIR . '/_pictures');
define('GLPI_PLUGIN_DOC_DIR', GLPI_VAR_DIR . '/_plugins');
define('GLPI_RSS_DIR', GLPI_VAR_DIR . '/_rss');
define('GLPI_SESSION_DIR', GLPI_VAR_DIR . '/_sessions');
define('GLPI_TMP_DIR', GLPI_VAR_DIR . '/_tmp');
define('GLPI_UPLOAD_DIR', GLPI_VAR_DIR . '/_uploads');
define('GLPI_INVENTORY_DIR', GLPI_VAR_DIR . '/_inventories');
define('GLPI_THEMES_DIR', GLPI_VAR_DIR . '/_themes');
define('GLPI_LOG_DIR', '/var/log/glpi');
```

## 4 - Permissions de Dossier et Fichier

Voici une suggestion de permissions pour votre installation GLPI

```
chown root:root /var/www/html/glpi/ -R
chown www-data:www-data /etc/glpi -R
chown www-data:www-data /var/lib/glpi -R
chown www-data:www-data /var/log/glpi -R
chown www-data:www-data /var/www/html/glpi/marketplace -Rf
find /var/www/html/glpi/ -type f -exec chmod 0644 {} \;
find /var/www/html/glpi/ -type d -exec chmod 0755 {} \;
find /etc/glpi -type f -exec chmod 0644 {} \;
find /etc/glpi -type d -exec chmod 0755 {} \;
find /var/lib/glpi -type f -exec chmod 0644 {} \;
find /var/lib/glpi -type d -exec chmod 0755 {} \;
find /var/log/glpi -type f -exec chmod 0644 {} \;
find /var/log/glpi -type d -exec chmod 0755 {} \;
```

## 5 - Configurer le Serveur Web

Pour que GLPI fonctionne en douceur, sans avoir besoin d'URLs complexes, nous recommandons d'utiliser un nom DNS pour votre serveur et de créer un Virtual Host pour rediriger toutes les requêtes venant vers votre instance cherchant cette entrée DNS précédemment créée vers le bon chemin dans votre configuration Apache. Plus d'informations sur la configuration du serveur web [peuvent être trouvées ici](https://glpi-install.readthedocs.io/en/latest/prerequisites.html#web-server)

***

### How to create a VirtualHost dedicated to GLPI?

* Create a file on `/etc/apache2/sites-available/glpi.conf`

```
/etc/apache2/sites-available/glpi.conf
```

{% hint style="info" %}
If you need, you can change the file name to your webserver standards.
{% endhint %}

* In this file, you will add the following content:

```
# Start of the VirtualHost configuration for port 80

<VirtualHost *:80>
    ServerName yourglpi.yourdomain.com
    # Specify the server's hostname
    DocumentRoot /var/www/html/glpi/public
    # The directory where the website's files are located
    # Start of a Directory directive for the website's directory
    <Directory /var/www/html/glpi/public>
        Require all granted
        # Allow all access to this directory
        RewriteEngine On
        # Enable the Apache rewrite engine
        # Ensure authorization headers are passed to PHP.
        # Some Apache configurations may filter them and break usage of API, CalDAV, ...
        RewriteCond %{HTTP:Authorization} ^(.+)$
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
        # Redirect all requests to GLPI router, unless the file exists.
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
    </Directory>
    # End of the Directory directive for /var/www/glpi/public
</VirtualHost>

# End of the VirtualHost configuration for port 80
```

{% hint style="info" %}
The variables can be changed to your standards, file locations or folder names
{% endhint %}

* **ServerName** if you have a public URL, you can type it here
* **DocumentRoot** if you will store GLPI in a different page, change it too.

After the Virtual Host file is created you should disable the default apache site configuration, enable the rewrite module and reload the new vhost file.

`a2dissite 000-default.conf` # Disable default apache site\
`a2enmod rewrite` # enable the rewrite module\
`a2ensite glpi.conf` # enable the new apache virtual host settings for your glpi instance\
`systemctl restart apache2`

***

### Set up the PHP.ini file

{% hint style="info" %}
We recommend to use always the latest supported PHP release for better performance.
{% endhint %}

For GLPI to work properly it is recommended to change the following parameters on your php.ini file

* Open the php.ini file

```
vim /etc/php/8.1/apache2/php.ini
```

Change the following parameters

* `upload_max_filesize = 20M` Maximum size for uploaded files is set to 20 megabytes.
* `post_max_size = 20M` Maximum size for POST data (e.g., form submissions) is also set to 20 megabytes.
* `max_execution_time = 60` Maximum execution time for a PHP script is set to 60 seconds.
* `max_input_vars = 5000` Maximum number of input variables (e.g., form fields) a script can accept is 5000.
* `memory_limit = 256M` The maximum amount of memory a single PHP script can use is 256 megabytes.
* `session.cookie_httponly = On` Sets the "HttpOnly" attribute for session cookies
* `date.timezone = America/Sao_Paulo` Sets the default timezone for PHP to yours.

To add your timezone, please refer to the official [list of supported timezones for PHP](https://www.php.net/manual/en/timezones.php)

## 6 - Start Web Installation

Once the installation and configuration of dependencies are done, the installation can continue on a web browser with access to this same server. Open a Web browser and type the DNS record you have created for this server.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.glpi-project.org/tutorials/fr/procedures/install_glpi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
