GLPI 11 unter Linux (Debian/Ubuntu) installieren: Schritt für Schritt

Eine praxiserprobte Schritt-für-Schritt-Installation von GLPI 11 unter Debian 12/13 oder Ubuntu 24.04: PHP und die zwei php.ini, auf die es ankommt, MariaDB mit Zeitzonen, downstream.php, um config und files aus dem Webroot zu holen, Cron über CLI und Checkliste nach der Installation.

In diesem Artikel9 Abschnitte

GLPI 11 unter Linux zu installieren ist unkompliziert – bis zu der Zeile, in der Sie config/ und files/ aus dem Webroot verschieben und der Installer die Datenbank „nicht mehr findet“. Dies ist die Schritt-für-Schritt-Anleitung, die wir bei der Bereitstellung von GLPI für Kunden verwenden: die echten Befehle, die zwei php.ini, auf die es wirklich ankommt, die Datei, die den häufigsten Fehler der manuellen Installation verhindert, und die Checkliste nach der Installation, die Ihre Umgebung absichert.

Bevor Sie beginnen: Dimensionieren Sie den Server

GLPI 11 läuft auf dem klassischen LAMP-Stack: Apache (oder Nginx) + PHP 8.1 oder höher + MariaDB 10.5+ (oder MySQL 8). Unter Debian 12 ist PHP 8.2 Standard, unter Ubuntu 24.04 LTS PHP 8.3 – beide sind geeignet. Was sich zwischen einem Pilotprojekt und einer Umgebung mit Hunderten von Technikern wirklich ändert, sind RAM und Ausführungsmodell von PHP (mod_php vs. PHP-FPM). Diese Matrix verwenden wir zur Dimensionierung:

ProfilAktive BenutzerRAMvCPUPHP-Modell
Pilot / POCbis 202 GB2mod_php genügt
Kleinbis 1004 GB2PHP-FPM + OPcache
Mittel100 bis 4008 GB4Eigener PHP-FPM, SSD-Speicher
Groß400+16 GB+4+Datenbank auf separatem Host

1. System, Webserver, PHP und Erweiterungen

Aktualisieren Sie Ihr System und installieren Sie alles auf einmal. Die Erweiterungen sind nicht optional: GLPI prüft jede einzelne auf der Seite mit den Systemanforderungen.

apt update && apt upgrade -y
apt install -y apache2 mariadb-server \
  php php-{mysql,curl,gd,intl,xml,mbstring,zip,bz2,ldap,apcu,bcmath} \
  libapache2-mod-php certbot python3-certbot-apache

Debian 13 (Trixie) und GLPI 11.0.11: Wir haben im Oktober 2026 mit PHP 8.4 und MariaDB 11.8 getestet, und die Installation läuft mit zwei Anpassungen, die im obigen Befehl bereits enthalten sind, bis zum Ende durch. Paket php-imap existiert unter Debian 13 nicht (PHP 8.4 hat diese Erweiterung aus dem Kern entfernt, und GLPI 11 braucht sie nicht). Außerdem ist Erweiterung bcmath in GLPI 11 Pflicht: Ohne php-bcmath bricht db:install mit „bcmath extension is missing“ ab. Derselbe Befehl gilt für Debian 12 und Ubuntu 24.04.

Der häufige Fehler an dieser Stelle ist, php-intl zu vergessen: Die Paketinstallation läuft durch, aber GLPI blockiert bei der Prüfung der Anforderungen, und Datumsformatierung sowie Internationalisierung funktionieren nicht. php-ldap und php-imap sind nur nötig, wenn Sie Active Directory und den E-Mail-Empfänger (Collector) anbinden wollen, aber wenn Sie sie gleich mitinstallieren, müssen Sie später nichts nachinstallieren.

2. Die zwei php.ini, auf die es ankommt

An diesem Punkt unterscheidet sich eine Installation, die „funktioniert“, von einer, die auch nachts funktioniert. PHP hält getrennte Konfigurationen je SAPI vor: Apache liest /etc/php/8.2/apache2/php.ini, aber der Cron von GLPI läuft über die Kommandozeile und liest /etc/php/8.2/cli/php.ini. Passen Sie beide mit denselben Werten an:

memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 300
max_input_vars = 5000
session.cookie_httponly = On
date.timezone = America/Sao_Paulo
; lembre-se: este mesmo arquivo existe em .../cli/php.ini

Im laufenden Betrieb ist die Hauptursache für „die automatischen Aktionen laufen nicht mehr“ fast nie der System-Cron: Es ist ein memory_limit von 128M in der php.ini der CLI, der die Inventarsynchronisierung oder den Massenversand von Benachrichtigungen blockiert, während der Wert für Apache längst auf 256M stand und niemand Verdacht schöpfte. Bearbeiten Sie beide Dateien.

3. MariaDB, Datenbank und Zeitzone

Führen Sie mysql_secure_installation aus und legen Sie die Datenbank mit utf8mb4 an (Sonderzeichen und Emojis hängen davon ab):

mysql -u root -p
CREATE DATABASE glpi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'glpi'@'localhost' IDENTIFIED BY 'SuaSenhaForte';
GRANT ALL PRIVILEGES ON glpi.* TO 'glpi'@'localhost';
FLUSH PRIVILEGES;

Ein Detail, welches sich erst später zeigt: Die Zeitzonenauswahl von GLPI bleibt leer, bis Sie die Zeitzonentabellen von MariaDB importieren und dem GLPI-Benutzer Leserechte erteilen. Erledigen Sie dies jetzt:

# Importa as tabelas de fuso; sem isto o seletor de timezone fica vazio
mariadb-tzinfo-to-sql /usr/share/zoneinfo | mysql -u root mysql
mysql -u root -e "GRANT SELECT ON mysql.time_zone_name TO 'glpi'@'localhost'; FLUSH PRIVILEGES;"

4. Holen Sie config, files und logs aus dem Webroot – und sagen Sie GLPI, wo sie liegen

Laden Sie GLPI 11 herunter und entpacken Sie es:

cd /tmp
wget https://github.com/glpi-project/glpi/releases/download/11.0.11/glpi-11.0.11.tgz
tar -xzf glpi-11.0.11.tgz -C /var/www/
chown -R www-data:www-data /var/www/glpi

Aus Sicherheitsgründen dürfen sensible Daten nicht unter dem Webroot liegen. Verschieben Sie sie:

mkdir -p /etc/glpi /var/lib/glpi/files /var/log/glpi
mv /var/www/glpi/config/* /etc/glpi/
mv /var/www/glpi/files/*  /var/lib/glpi/files/
chown -R www-data:www-data /etc/glpi /var/lib/glpi /var/log/glpi

Hier liegt der häufigste Fehler der manuellen Installation: die Verzeichnisse zu verschieben, ohne GLPI mitzuteilen, wohin. Die Folge: Der Installer legt config/ und files/ im Webroot neu an, Sie schränken die Berechtigungen am falschen Ort ein und bleiben weiterhin exponiert. Der richtige Weg ist, inc/downstream.php anzulegen – diese Datei wird sowohl von Apache als auch von der CLI gelesen und löst damit Web und Cron auf einmal:

<?php // /var/www/glpi/inc/downstream.php
define('GLPI_CONFIG_DIR', '/etc/glpi');
define('GLPI_VAR_DIR',    '/var/lib/glpi/files');
define('GLPI_LOG_DIR',    '/var/log/glpi');

5. Virtual Host, HTTPS und DocumentRoot in public/

Ihr DocumentRoot zeigt auf /var/www/glpi/public, niemals auf die Wurzel der Installation – dies ist seit GLPI 10 Pflicht und verhindert, dass config und files über das Web ausgeliefert werden.

<VirtualHost *:80>
    ServerName glpi.cliente.com.br
    DocumentRoot /var/www/glpi/public   # nunca /var/www/glpi

    <Directory /var/www/glpi/public>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
a2ensite glpi.conf && a2enmod rewrite
a2dissite 000-default.conf
systemctl reload apache2
certbot --apache -d glpi.cliente.com.br

6. Per Kommandozeile installieren und Cron konfigurieren

Ist downstream.php angelegt, schreibt db:install die config_db.php bereits nach /etc/glpi – Sie müssen keine Variable exportieren:

php /var/www/glpi/bin/console db:install \
  --db-host=localhost --db-name=glpi \
  --db-user=glpi --db-password='SuaSenhaForte' \
  --default-language=pt_BR --no-interaction

GLPI verarbeitet Benachrichtigungen, Inventar und automatische Aktionen über einen externen Cron. Planen Sie ihn minütlich ein – GLPI entscheidet selbst, was bei jedem Aufruf läuft, je nach Häufigkeit der einzelnen Aufgaben:

echo "* * * * * www-data /usr/bin/php /var/www/glpi/front/cron.php &>/dev/null" > /etc/cron.d/glpi

Stellen Sie danach unter Einrichten > Automatische Aktionen den Ausführungsmodus auf CLI um. Bleibt der interne Modus aktiv (Auslösung beim Zugriff eines Benutzers), fallen die Aufgaben nachts und am Wochenende aus – genau dann, wenn Inventar und Backups laufen sollen.

7. Nach der Installation: die Checkliste, die Ihre Umgebung absichert

  1. Entfernen Sie den Installer: rm /var/www/glpi/install/install.php. Achtung: Jedes Upgrade legt diese Datei neu an – entfernen Sie sie nach jedem Update erneut.
  2. Ändern Sie die Passwörter der vier Standardbenutzer: glpi, tech, normal und post-only.
  3. Konfigurieren Sie SMTP unter Einrichten > Benachrichtigungen und senden Sie eine Test-E-Mail.
  4. Prüfen Sie, ob der Installer nicht mehr erreichbar ist und der Cron gelaufen ist:
# Instalador ainda acessível? (esperado: 404)
curl -s -o /dev/null -w "%{http_code}\n" https://glpi.cliente.com.br/install/install.php
-- O cron externo está rodando? (lastrun deve ser recente)
SELECT name, state, lastrun FROM glpi_crontasks ORDER BY lastrun DESC LIMIT 5;

Was wir prüfen, wenn wir ein GLPI von Dritten übernehmen

Wenn wir den Betrieb einer Umgebung übernehmen, die ein anderes Team installiert hat, ist die Diagnose immer dasselbe Trio: Gibt es inc/downstream.php, oder existieren zwei Verzeichnisse config nebeneinander (ein aktives und ein Phantom, in dem jemand wirkungslos Änderungen vornimmt)? Entspricht memory_limit der CLI dem Wert von Apache? Und steht der Modus der automatischen Aktionen auf CLI oder hängt er am Benutzerzugriff? Diese drei Punkte erklären die meisten Meldungen à la „GLPI ist langsam“ und „Benachrichtigungen kommen nicht an“, die uns erreichen – und keiner davon zeigt sich bei einer Installation, die nur durch Klicken in der Oberfläche während der Geschäftszeiten getestet wurde.

Sie brauchen ein GLPI 11, eingerichtet und betreut mit dieser Sorgfalt, ohne Altlasten aus der Installation zu übernehmen? Lernen Sie den Betrieb von GLPI-Umgebungen durch NexTool kennen.


Geprüft vom Team von NexTool Solutions.

Häufig gestellte Fragen

PHP 8.1 oder höher. Unter Debian 12 ist 8.2 Standard und unter Ubuntu 24.04 LTS 8.3, beide werden unterstützt. Zu den Pflichterweiterungen gehören intl, mysqli, curl, gd, mbstring, xml und zip; ldap und imap sind nur für Active Directory und den E-Mail-Empfänger nötig.

Ja. Apache liest die php.ini der SAPI apache2, aber front/cron.php läuft in der CLI und liest die php.ini der CLI. Wer nur eine anpasst, lässt halb GLPI (automatische Aktionen, Masseninventar, Benachrichtigungen) mit falschem Speicherlimit und falschem Timeout laufen.

Dort definieren Sie GLPI_CONFIG_DIR, GLPI_VAR_DIR und GLPI_LOG_DIR neu, um config, files und logs aus dem Webroot zu holen. Da die Datei sowohl vom Web als auch von der CLI gelesen wird, sehen db:install und Cron dieselben Pfade. Ohne sie bricht ein Verschieben der Verzeichnisse die Installation.

GLPI liest die Zeitzonen aus den time_zone-Tabellen von MariaDB, die standardmäßig nicht befüllt sind. Führen Sie mariadb-tzinfo-to-sql aus, um sie zu importieren, und erteilen Sie dem GLPI-Benutzer SELECT auf mysql.time_zone_name.

Bis etwa 100 Benutzer genügt mod_php mit OPcache. Darüber isoliert PHP-FPM die Worker, verbessert die Speichernutzung und erlaubt es, die Parallelität unabhängig von Apache einzustellen. In größeren Umgebungen ist es die Standardwahl.

Im Produktivbetrieb ja. Ohne TLS werden Zugangsdaten im Klartext über das Netzwerk übertragen. Verwenden Sie Let's Encrypt (Certbot). Hinter einem Reverse Proxy stellen Sie sicher, dass das Session-Cookie das Flag Secure trägt und der Header X-Forwarded-Proto als vertrauenswürdig gilt.

Brauchen Sie Hilfe?