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

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

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

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

Установка системы особых проблем не вызывает, если используется веб-сервер 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 -y
apt install php

Устанавливаем 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

Редактируем php.ini, расположенный в /etc/php/7.0/fpm/ или в
 /etc/php/7.2/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

Настраиваем 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 — она как раз и указывает, как именно слушать сервис.

В файл виртуального хоста 

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

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

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

# Для php7.2-fpm
systemctl restart nginx php7.2-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, так и у других встроенных учётных записей. 

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

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

4 thoughts on “Установка GLPI на nginx

  1. Dmitriy

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

    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;
    }
    }

    1. DiDim Автор записи

      А какая хотя бы ошибка? Посмотрите, что в логах nginx’а. Может пути не так прописаны.

  2. varney

    На 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; }

    1. DiDim Автор записи

      Попробовал сделать как сам же и написал, только установив прослушку на сокете, и… заработало. Ubuntu 18.04.2 + php 7.2 + nginx 1.14 + glpi 9.3.
      Возможно в каких-то пакетах что-то исправили. Надо потестить на других ОС.
      P.S. параметр «cgi.fix_pathinfo=1» здесь описан, как и «fastcgi_param SERVER_NAME $host;»
      P.P.S На Ubuntu 16.04.4, php 7.0, nginx 1.10 тоже норм. Пока вообще ничего не понятно. Будем считать эту статью просто хорошим мануалом 🙂

Добавить комментарий

Ваш e-mail не будет опубликован.