Установка GLPI на nginx

GLPI — аббревиатура для Gestionnaire libre de parc informatique (Свободный менеджер ИТ-инфраструктуры), является системой работы с заявками и инцидентами, а также для инвентаризации компьютерного оборудования (компьютеры, программное обеспечение, принтеры и т.д.). Имеет расширенные функции, такие как работа системы отслеживания почты с уведомлением и методы, для создания базы данных с основной информацией о топологии сети. Более подробно можно узнать на википедии.

UPD от 28.11.2018: В связи с выходом Ubuntu 18, php стал использоваться версии 7.2 вместо 7.0. Написал оба варианта.

UPD от 12.03.2019: Как оказалось, можно не менять тип прослушки сервиса. Но это не точно. Требуются дополнительные исследования

UPD от 28.11.2018: Добавил немного данных и для Debian 10. Как и оказалось, можно не менять тип прослушки сервиса. Но оставлю старый вариант.

Установка системы особых проблем не вызывает, если используется веб-сервер Apache. В случае использования nginx в связке с php-fpm вылезают подводные камни, а точнее только один — при установке на шаге ввода данных для подключения к БД вылезает ошибка «None or Invalid host in HTTP_REFERER. Reload previous page before doing action again.»

В многочисленных ссылках, услужливо предлагаемых поисковиками при поиске вышеуказанной фразы, мне всегда попадались только записи закрытых ошибок со страниц разработчиков на гитхабе и на их форуме.

Я долго бился над этой проблемой, пока не нашёл франкоязычную статью1 про установку glpi, где ясно было написано, что сервис php-fpm необходимо заставить слушать по TCP порту 9000, а не через unix-сокет. (ну как ясно — просто было написано какой файл нужно отредактировать 🙂 )

Далее вольный пересказ той статьи с учётом того, что ОС — не Debian, а Ubuntu Server 18 (для Ubuntu Server 16 вся разница состоит в дефолтном php-fpm версии 7.0, о чём будет сказано ниже).

Установка и настройка Web-сервера

Устанавливаем пакеты, составляющие основу web-сервера2.

apt install nginx -y
apt install php-fpm php-mysql mysql-server php-ldap \
php-imap php-apcu php-xmlrpc php-curl php-xml php-mbstring \
php-gd php-intl php-cas php-zip php-bz2 -y
apt install php

Для Debian вместо пакета mysql-server ставится пакет default-mysql-server

Устанавливаем php последним по той просто причине, что при установке вместе с остальными пакетами, он тянет за собой apache. А нам он и не нужен совсем.

При необходимости настраиваем защиту MySQL как в этой статье

mysql_secure_installation

Далее создаём пользователя и БД для GLPI

mysql -uroot -p
create database glpidb;
grant all privileges on glpidb.* to glpiuser@localhost identified by 'your_strong_pass';

Выходим из оболочки MySQL

\q

Настраиваем PHP

Редактируем файл /etc/php/7.0/fpm/pool.d/www.conf или /etc/php/7.2/fpm/pool.d/www.conf для смены типа прослушки сервиса.

# Для php7.0-fpm
sed -i -e "s/\/run\/php\/php7.0-fpm.sock/127.0.0.1:9000/g" \
/etc/php/7.2/fpm/pool.d/www.conf

# Для php7.2-fpm
sed -i -e "s/\/run\/php\/php7.2-fpm.sock/127.0.0.1:9000/g" \
/etc/php/7.2/fpm/pool.d/www.conf

# Для php7.3-fpm
sed -i -e "s/\/run\/php\/php7.3-fpm.sock/127.0.0.1:9000/g" \
/etc/php/7.3/fpm/pool.d/www.conf

Редактируем php.ini, расположенный в /etc/php/7.x/fpm/, отключая уязвимость

# Для php7.0-fpm
sed -i -e "s/\;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" \
/etc/php/7.0/fpm/php.ini

# Для php7.2-fpm
sed -i -e "s/\;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" \
/etc/php/7.2/fpm/php.ini

# Для php7.3-fpm
sed -i -e "s/\;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" \
/etc/php/7.3/fpm/php.ini

Настраиваем nginx для GLPI

Обычно для обработки php я просто в файлах конфигурации хостов ссылаюсь на шаблон конфигурации php, лежащий в /etc/nginx/templates/, поэтому если такой директории нет, то создадим её.

mkdir /etc/nginx/templates

и положим туда файл

nano /etc/nginx/templates/php-fpm.conf

с таким содержимым:

location ~ .php$ {
    try_files $uri = 404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SERVER_NAME $host;
}
location ~ /.ht {
    deny all;
}

Обратите внимание на директиву fastcgi_pass — она как раз и указывает, как именно слушать сервис. Если хотите оставить как есть или не меняли тип прослушки, то используйте директиву

    fastcgi_pass unix://run/php/php7.3-fpm.sock;

Далее, в файл виртуального хоста 

nano /etc/nginx/sites-enabled/default

(в данном случае можно использовать default), в секцию server вписываем

include /etc/nginx/templates/*.conf;
access_log /var/log/nginx/default_access.log;
error_log /var/log/nginx/default_error.log;

В этом же файле в строку index должна быть добавлена поддержка php

index index.php index.html index.htm index.nginx-debian.html;

Проверяем конфигурацию nginx

nginx -t

Если пишет, что команда не найдена, то добавьте строку в файл .profile

nano ~/.profile

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Если всё нормально, то перезапускаем сервисы php-fpm и nginx

# Для php7.0-fpm
systemctl restart nginx php7.0-fpm

# Для php7.2-fpm
systemctl restart nginx php7.2-fpm

# Для php7.3-fpm
systemctl restart nginx php7.3-fpm

Установка и настройка GLPI

Переходим в корень веб-сервера, путь к которому указан в файле конфигурации виртуального хоста.

cd /var/www/html

Качаем последнюю версию релиза GLPI

wget https://github.com/glpi-project/glpi/releases/download/9.3.3/glpi-9.3.3.tgz

Распаковываем архив

tar -xzvf glpi-9.3.3.tgz

Удаляем скачанный архив

rm glpi-9.3.3.tgz

Меняем владельца распакованных файлов на пользователя веб-сервера.

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

И заходим на http://ваш_IP/glpi

Стартовое окно установки. Выбор языка
Главное окно установки
Принимаем лицензионное соглашение
Выбираем Install, чтобы начать новую установку
Убеждаемся, что все требования выполнены. Этих вполне достаточно
Вводим данные, которые заносили при создании нового пользователя glpi в базе данных
Выбираем созданную базу данных и начинаем ждать

После довольно продолжительного времени появится форма авторизации. Если вместо этого будет 504 ошибка (а она скорее всего будет), то просто зайдите снова по адресу http://ваш_IP/glpi и ткните ссылку на возврат к странице авторизации. Введите там учётные данные по-умолчанию логин: glpi, пароль: glpi. 

 На главной странице появится уведомление о том, что надо удалить файл install/install.php 

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

и сменить пароли как у учётной записи glpi, так и у других встроенных учётных записей. 

Также ещё можно настроить cron для задач glpi, введя команду

crontab -e

и там дополнить задачи следующей командой

* * * * * /usr/bin/php /var/www/html/glpi/front/cron.php &>/dev/null

Небольшие правки

В панели упраления пользователя можно встретить надпись «Access to timezone database (mysql) is not allowed» или «Доступ к базе данных часовых поясов (mysql) не разрешён». Если вам хочется видеть список часовых поясов, то, как говорится в пояснении от glpi, делайте это на свой страх и риск.

Итак, для начала перенесите системные часовые пояса в базу данных, выполнив следующую команду

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -p -u root mysql

Чтобы перечислить возможные часовые пояса, пользователь базы данных GLPI должен иметь доступ на чтение в mysql.таблицу time_zone_name. Предполагая, что ваш пользователь — glpiuser@localhost, запускайте следующее

mysql -p -u root
GRANT SELECT ON `mysql`.`time_zone_name` TO 'glpiuser'@'localhost';
FLUSH PRIVILEGES;
\q

На этом всё.

Установка GLPI на nginx завершена

  1. https://memo-linux.com/installer-glpi-sous-debian-9-avec-nginx-php7-et-mariadb/
  2. Все операции проводятся под рутом
Подписаться
Уведомить о
guest

6 комментариев
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Doc
Doc
8 месяцев назад

Коллеги подскажите , кто нибудь настроил связку nginx + php8 + kerberos
? у меня ни в какую не хочет пускать по SSO
если заходишь с доменной машины показывает стандартную страницу логина, если с не доменной то сначала требует виндовой авторизации , а потом снова стандартную страницу авторизации GLPI 
То есть авторизация ntlm в NGiNX проходит? а вот SSO не отрабатывает
 
вот кусок конфиги от ngnix
  auth_gss on;
  auth_gss_realm TEST.LOCAL;
  auth_gss_keytab /etc/test.keytab;
  auth_gss_service_name HTTP/sd.test.ru;
  auth_gss_allow_basic_fallback on;

Dmitriy
Dmitriy
4 лет назад

Добро дня.
Подскажите как исправить корректно через сокет работу.

Debian 9.8
nginx 1.15.11

Мой кофиг в /etc/nginx/site-available/glpi
server {
listen 80; # порт, прослушивающий nginx
server_name localhost; # доменное имя, относящиеся к текущему виртуальному хосту
root /var/www/glpi; # каталог в котором лежит проект, путь к точке входа

index index.php;
# add_header Access-Control-Allow-Origin *;

# serve static files directly
location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
access_log off;
expires max;
log_not_found off;
}

location / {
# add_header Access-Control-Allow-Origin *;
try_files $uri $uri/ /index.php?$query_string;
}

location ~* \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; # подключаем сокет php-fpm
fastcgi_index index.php;
fastcgi_param SERVER_NAME $host;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Мой кофиг в /etc/nginx/site-available/glpi
user www-data;
worker_processes 4;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 768;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main ‘$remote_addr — $remote_user [$time_local] «$request» ‘
‘$status $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «$http_x_forwarded_for»‘;

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

# include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

location ~ /\.ht {
deny all;
}
}

Doc
Doc
8 месяцев назад
Ответить на  Dmitriy

я что-то у Вас в конфиге вообще не вижу ссылки на сокет
типа  fastcgi_pass unix:/run/php-fpm/www.sock;

varney
varney
5 лет назад

На FreeBSD-11.2 + PHP 7.2 + Nginx 1.14 + GLPI 9.3
«про установку glpi, где ясно было написано, что сервис php-fpm необходимо заставить слушать по TCP порту 9000, а не через unix-сокет»
все прекрасно взлетело через unix-сокет, главное нужно было в php.ini поправить: cgi.fix_pathinfo=1 и в nginx.conf добавить в секкцию: location ~ .php$ { …. fastcgi_param SERVER_NAME $host; }