GLPI Installation Script Link to heading


1. Prerequisites Link to heading

  • 1.1. Ubuntu 22.04 LTS server or Debian 12 installed
  • 1.2. Internet access for downloading and installing packages
  • 1.3. Root access to the server

2. Installation Link to heading

2.1. Update Link to heading

1sudo apt update && sudo apt dist-upgrade -y

2.2. Reconfigure time zone Link to heading

1sudo dpkg-reconfigure tzdata

2.3. Restart Link to heading

1sudo reboot

2.4. Install Apache, PHP, and MySQL Link to heading

 1sudo apt install -y \
 2	apache2 \
 3	mariadb-server \
 4	php \
 5	php-common \
 6	php-xml \
 7	php-cli \
 8	php-mbstring \
 9	php-zip \
10	php-curl \
11	php-gd \
12	php-ldap \
13	php-intl \
14	php-bcmath \
15	php-apcu \
16	php-imagick \
17	php-mysql \
18	php-bz2 \
19	libapache2-mod-php \
20	unzip \
21	wget

2.5. Create GLPI database Link to heading

1sudo mysql -e "CREATE DATABASE glpi"
2sudo mysql -e "GRANT ALL PRIVILEGES ON glpi.* TO 'glpi'@'localhost' IDENTIFIED BY 'P4ssw0rd'"
3sudo mysql -e "GRANT SELECT ON mysql.time_zone_name TO 'glpi'@'localhost'"
4sudo mysql -e "FLUSH PRIVILEGES"

2.6. Load time zones into MySQL Link to heading

1mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mysql -u root mysql

2.7. Disable Apache default site Link to heading

1sudo a2dissite 000-default.conf

2.8. Enable session.cookie_httponly Link to heading

1sudo sed -i 's/^session.cookie_httponly =/session.cookie_httponly = on/' /etc/php/8.2/apache2/php.ini && \
2	sudo sed -i 's/^;date.timezone =/date.timezone = America\/Sao_Paulo/' /etc/php/8.2/apache2/php.ini

Note: If an error occurs, the PHP version (e.g., 8.2) might have changed. To locate the php.ini file, run:

1sudo find /etc/php -type f -name "php.ini"

2.9. Create GLPI virtual host Link to heading

 1cat << EOF | sudo tee /etc/apache2/sites-available/glpi.conf
 2<VirtualHost *:80>
 3    ServerName glpi.localhost
 4
 5    DocumentRoot /var/www/glpi/public
 6
 7    # If you want to place GLPI in a subfolder of your site (e.g. your virtual host is serving multiple applications),
 8    # you can use an Alias directive. If you do this, the DocumentRoot directive MUST NOT target the GLPI directory itself.
 9    # Alias "/glpi" "/var/www/glpi/public"
10
11    <Directory /var/www/glpi/public>
12        Require all granted
13
14        RewriteEngine On
15
16        # Ensure authorization headers are passed to PHP.
17        # Some Apache configurations may filter them and break usage of API, CalDAV, ...
18        RewriteCond %{HTTP:Authorization} ^(.+)$
19        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
20
21        # Redirect all requests to GLPI router, unless file exists.
22        RewriteCond %{REQUEST_FILENAME} !-f
23        RewriteRule ^(.*)$ index.php [QSA,L]
24    </Directory>
25</VirtualHost>
26EOF

Note: Change ServerName for your environment

2.10. Enable virtual host Link to heading

1sudo a2ensite glpi.conf

2.11. Enable required Apache modules Link to heading

1sudo a2enmod rewrite

2.12. Restart Apache Link to heading

1sudo systemctl restart apache2

2.13. Download GLPI Link to heading

1wget -q https://github.com/glpi-project/glpi/releases/download/10.0.17/glpi-10.0.17.tgz

2.14. Extract GLPI Link to heading

1tar -zxf glpi-*

2.15. Move GLPI folder Link to heading

1sudo mv glpi /var/www/glpi

2.16. Set permissions for GLPI folder Link to heading

1sudo chown -R www-data:www-data /var/www/glpi/

2.17. Finalize setup via command line Link to heading

1sudo php /var/www/glpi/bin/console db:install \
2	--default-language=en_US \
3	--db-host=localhost \
4	--db-port=3306 \
5	--db-name=glpi \
6	--db-user=glpi \
7	--db-password=P4ssw0rd

3. Security Adjustments Link to heading

3.1. Remove installation file Link to heading

1sudo rm /var/www/glpi/install/install.php

3.2. Securely move GLPI folders Link to heading

1sudo mv /var/www/glpi/files /var/lib/glpi
2sudo mv /var/www/glpi/config /etc/glpi
3sudo mkdir /var/log/glpi && sudo chown -R www-data:www-data /var/log/glpi

3.3. Secure configuration (conf-dir) Link to heading

1cat << EOF | sudo tee /var/www/glpi/inc/downstream.php
2<?php
3define('GLPI_CONFIG_DIR', '/etc/glpi/');
4if (file_exists(GLPI_CONFIG_DIR . '/local_define.php')) {
5   require_once GLPI_CONFIG_DIR . '/local_define.php';
6}
7EOF

3.4. Secure configuration (data-dir) Link to heading

1cat << EOF | sudo tee /etc/glpi/local_define.php
2<?php
3define('GLPI_VAR_DIR', '/var/lib/glpi');
4define('GLPI_LOG_DIR', '/var/log/glpi');
5EOF

4. First Steps Link to heading

  • 4.1. Access GLPI via a web browser
  • 4.2. Create a new user with super-admin profile
  • 4.3. Remove default users (glpi, normal, post-only, tech)
    • 4.3.1. Move them to the trash
    • 4.3.2. Permanently delete them
  • 4.4. Configure the system’s access URL: Configuration -> General -> General Configuration -> Application URL

GLPI Installation Script (Bash Version) Link to heading

  1#!/bin/bash
  2# GLPI Installation Script for Ubuntu 22.04 / Debian 12
  3# Author: [Pedro Buffon]
  4# Date: [26/12/2024]
  5
  6# Variables
  7DB_NAME="glpi"
  8DB_USER="glpi"
  9DB_PASSWORD="P4ssw0rd"
 10TIMEZONE="America/Sao_Paulo"
 11GLPI_VERSION="10.0.17"
 12GLPI_URL="https://github.com/glpi-project/glpi/releases/download/$GLPI_VERSION/glpi-$GLPI_VERSION.tgz"
 13GLPI_DIR="/var/www/glpi"
 14SERVER_NAME="domain.name"
 15PHPMEMORY="1024M"
 16OPCACHE_MEMORY="1024"
 17
 18# 1. Prerequisites
 19echo "[1/16] Updating System Packages..."
 20sudo apt update && sudo apt dist-upgrade -y
 21
 22# 2. Configure Timezone
 23echo "[2/16] Configuring Timezone..."
 24sudo dpkg-reconfigure tzdata
 25
 26# 3. Install Required Packages
 27echo "[3/16] Installing Apache, PHP, and MySQL..."
 28sudo apt install -y \
 29    apache2 \
 30    mariadb-server \
 31    php \
 32    php-common \
 33    php-xml \
 34    php-cli \
 35    php-mbstring \
 36    php-zip \
 37    php-curl \
 38    php-gd \
 39    php-ldap \
 40    php-intl \
 41    php-bcmath \
 42    php-apcu \
 43    php-imagick \
 44    php-mysql \
 45    php-bz2 \
 46    libapache2-mod-php \
 47    unzip \
 48    wget
 49
 50# 4. Create Database
 51echo "[4/16] Creating MySQL Database and User..."
 52sudo mysql -e "CREATE DATABASE $DB_NAME"
 53sudo mysql -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASSWORD'"
 54sudo mysql -e "GRANT SELECT ON mysql.time_zone_name TO '$DB_USER'@'localhost'"
 55sudo mysql -e "FLUSH PRIVILEGES"
 56
 57# 5. Load Time Zones into MySQL
 58echo "[5/16] Loading Time Zones into MySQL..."
 59mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mysql -u root mysql
 60
 61# 6. Disable Apache Default Site
 62echo "[6/16] Disabling Default Apache Site..."
 63sudo a2dissite 000-default.conf
 64
 65# 7. Update PHP Settings
 66echo "[7/16] Configuring PHP..."
 67sudo sed -i 's/^session.cookie_httponly =/session.cookie_httponly = on/' /etc/php/8.2/apache2/php.ini
 68sudo sed -i 's/^;date.timezone =/date.timezone = '$TIMEZONE'/' /etc/php/8.2/apache2/php.ini
 69sudo sed -i 's/^;memory_limit =/memory_limit = '$PHPMEMORY'/' /etc/php/8.2/apache2/php.ini
 70sudo sed -i 's/^;opcache.memory_consumption=/opcache.memory_consumption='$OPCACHE_MEMORY'/' /etc/php/8.2/apache2/php.ini
 71
 72# 8. Create Virtual Host
 73echo "[8/16] Creating Apache Virtual Host for GLPI..."
 74cat << EOF | sudo tee /etc/apache2/sites-available/glpi.conf
 75<VirtualHost *:80>
 76    ServerName $SERVER_NAME
 77    DocumentRoot $GLPI_DIR/public
 78    <Directory $GLPI_DIR/public>
 79        Require all granted
 80        RewriteEngine On
 81        RewriteCond %{HTTP:Authorization} ^(.+)$
 82        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 83        RewriteCond %{REQUEST_FILENAME} !-f
 84        RewriteRule ^(.*)$ index.php [QSA,L]
 85    </Directory>
 86</VirtualHost>
 87EOF
 88
 89# 9. Enable Virtual Host and Apache Modules
 90echo "[9/16] Enabling Apache Modules..."
 91sudo a2ensite glpi.conf
 92sudo a2enmod rewrite
 93
 94# 10. Restart Apache
 95echo "[10/16] Restarting Apache..."
 96sudo systemctl restart apache2
 97
 98# 11. Download and Install GLPI
 99echo "[11/16] Downloading and Installing GLPI..."
100wget -q $GLPI_URL
101tar -zxf glpi-*
102sudo mv glpi $GLPI_DIR
103sudo chown -R www-data:www-data $GLPI_DIR
104
105# 12. Secure Directories
106echo "[12/16] Securing GLPI Directories..."
107sudo mv $GLPI_DIR/files /var/lib/glpi
108sudo mv $GLPI_DIR/config /etc/glpi
109sudo mkdir /var/log/glpi && sudo chown -R www-data:www-data /var/log/glpi
110
111# 13. Update Downstream Configuration
112echo "[13/16] Updating Downstream Configuration..."
113cat << EOF | sudo tee $GLPI_DIR/inc/downstream.php
114<?php
115define('GLPI_CONFIG_DIR', '/etc/glpi/');
116if (file_exists(GLPI_CONFIG_DIR . '/local_define.php')) {
117   require_once GLPI_CONFIG_DIR . '/local_define.php';
118}
119EOF
120
121cat << EOF | sudo tee /etc/glpi/local_define.php
122<?php
123define('GLPI_VAR_DIR', '/var/lib/glpi');
124define('GLPI_LOG_DIR', '/var/log/glpi');
125EOF
126
127# 14. Install GLPI Database
128echo "[14/16] Installing GLPI Database..."
129sudo php $GLPI_DIR/bin/console db:install \
130    --default-language=en_US \
131    --db-host=localhost \
132    --db-port=3306 \
133    --db-name=$DB_NAME \
134    --db-user=$DB_USER \
135    --db-password=$DB_PASSWORD
136
137# 15. Remove Installation File
138echo "[15/16] Securing GLPI Installation..."
139sudo rm $GLPI_DIR/install/install.php
140
141# 16. Finish Installation
142echo "[16/16] GLPI Installation Complete! Access via http://$SERVER_NAME"
143
144exit 0

Save this script as install_glpi.sh, make it executable, and run:

1chmod +x install_glpi.sh
2sudo ./install_glpi.sh