Расскажу про установку системы GLPI на операционную систему CentOS. Удобней системы для ведения ИТ-инфраструктуры я не встречал. Кроме ведения заявок можно контролировать рабочие станции, вести справочную документацию и много чего ещё делать.
Содержание:
Введение
Практически сразу начав заниматься обслуживанием компьютерной техники я столкнулся с необходимостью вести учет всех поступивших заявок по обслуживанию в удобном виде.
Основные причины по которым я пришел к выводу что такая система необходима следующие:
- Удобное ведение поступивших заявок — заявки поступившие в систему не забываются и не надо вести дополнительных блокнотов;
- Хронология каждой заявки — в процессе решения собирается вся необходимая информация в одном месте;
- История заявок — в случае проблем с заказчиком всегда можно посмотреть все события по заявке и освежить в памяти события которые со временем забываются.
Требования к системе предъявлялись следующие:
- Свободная система работающая на свободных операционных системах;
- Система должна активно развиваться и иметь возможность простого обновления;
- Система должна работать на популярном языке программирования;
- Возможность удобной подачи заявки и последующего ведения;
- Ведение в одной системе разных организаций;
- Гибкое администрирование уровня доступа пользователей;
- Создание базы знаний для пользователей;
- Использование доменных пользователей;
- Личный планировщик заданий.
Перепробовал большое количество разных систем, но остановился на GLPI, так как эта система максимально удовлетворяет всем моим требованиям и позиционирует себя как свободный менеджер ИТ-инфраструктуры.
Основное что меня порадовало в системе GLPI это:
- Систему GLPI можно установить на простой хостинг как обычный сайт так как он написан на PHP (при условии что можно сделать некоторые специфические настройки);
- Настроек очень много и это позволяет реализовать практические любые пожелания;
- Простота и продуманность обновления;
- Информативность по выполняемым действиям очень радует, так как можно посмотреть подробную историю как действий пользователей так и автоматических заданий;
- Расширение возможностей с помощью большого количества дополнений;
- Почти во всех настройках есть история изменений где можно посмотреть кто и что делал;
- Делать резервные копии базы данных перед серьезными настройками в системе GLPI.
Если сравнить по функционалу и подходу разработчиков, то система похожа на популярную систему мониторинга Zabbix.
Еще один из главных аргументов которые меня склонили к окончательному выбору системы это то что в разработке принимает активное участие Remi Collet и ведет поддержку GLPI в своем репозитории.
В статье вы узнаете полную версию установки на операционную систему CentOS c нуля.
Подготовка сервера
Дальнейшая информация в статье подразумевает что вы воспользовались статьёй CentOS 8 установка и настройка.
Скачивание последней версии GLPI
Создадим корневую папку и папку для логов для сайта:
mkdir -p /var/www/support.sevo44.ru/log -p -- создаст все отстутствующие папки в пути
Идем на сайт GLPI и смотрим последнюю версию версию.
В нашем случаем последняя стабильная версия GLPI version 9.4.4.
Переходим в корневую папки для сайта и скачиваем туда архив с исходниками GLPI:
cd /var/www/support.sevo44.ru wget https://github.com/glpi-project/glpi/releases/download/9.4.4/glpi-9.4.4.tgz
Устанавливаем архиватор tar, если его нет:
dnf install tar
Распаковываем архив:
tar zxvf glpi-9.4.4.tgz
Переименовываем папку glpi в www:
mv glpi www
Переходим к настройки программного обеспечения необходимого для работы GLPI.
Настройка доступа по SFTP
Настроим удобный и безопасный доступ к файлам сайта.
Более подробно про настройку SFTP вы можете из статьи SFTP настройка для веб хостинга.
Создадим пользователя которому дадим права на файлы ресурса.
В нашем случае мы настраиваем доступ к сайту support.sevo44.ru. Добавим пользователя с нужными параметрами и создадим ему пароль:
useradd -s /sbin/nologin support.sevo44.ru passwd support.sevo44.ru
Добавляем пользователя nginx в группу support.sevo44.ru:
usermod -aG support.sevo44.ru nginx
Открываем конфигурационный файл ssh находящийся по пути /etc/ssh/sshd_config. Комментируем один параметр и добавим необходимый код:
vim /etc/ssh/sshd_config = необходимые изменения и добавления = # Закоментируем параметр #Subsystem sftp /usr/lib64/misc/sftp-server # Для работы sftp Subsystem sftp internal-sftp # Для support.sevo44.ru Match User support.sevo44.ru X11Forwarding no AllowTcpForwarding no AllowAgentForwarding no PermitTunnel no ForceCommand internal-sftp ChrootDirectory /var/www/support.sevo44.ru # /support.sevo44.ru
Перезапускаем службу sshd:
systemctl restart sshd
Назначаем владельцем содержимого сайта пользователя которого мы создали выше:
chown -R support.sevo44.ru:support.sevo44.ru /var/www/support.sevo44.ru/
Возвращаем обратно рута владельцем корня сайта:
chown root. /var/www/support.sevo44.ru/ chown root. /var/www/support.sevo44.ru/log/
Все папки в пути /var/www/support.sevo44.ru/ должны быть пользователя root!
Только в таком варианте все будет корректно работать!
Для безопасности запретим пользователю редактировать папку log.
Редактирование будет возможно только в папке WWW где находятся все файлы сайта!
Даем необходимые права на папки и файлы
Найдём в папке /var/www/support.sevo44.ru/www все файлы (f) и выставим им права 644 а для всех папок (d) выставим права 755:
find /var/www/support.sevo44.ru/www -type f -exec chmod 644 {} \; find /var/www/support.sevo44.ru/www -type d -exec chmod 755 {} \;
Подключаемся по sftp и если подключились продолжаем настройку дальше.
Установка PHP
Устанавливать версию PHP будем с репозитория Remi Collet. Более подробно как работать c репозиторием можно из статьи PHP от Remi для CentOS.
Подключаем репозиторий и активируем версию php 7.2:
dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm dnf module reset php dnf module enable php:remi-7.2
Подключаем расширенный вариант репозитория Remi:
yum-config-manager --disable remi-safe yum-config-manager --enable remi
С репозитория Remi можно установить GLPI, но настроен он будет для работы с Apache.
Установим Php версии 7.2 со всеми необходимыми пакетами. Возможно их больше чем необходимо, но именно они устанавливаются если устанавливать используя репозиторий Remi:
dnf install php php-psr-container php-symfony-common php-jsonlint php-mysqlnd php-composer-semver php-psr-simple-cache php-bcmath php-htmLawed php-intl php-sabre-xml2 php-zendframework-zend-stdlib php-symfony-config php-Monolog php-phpmailer6 php-symfony-browser-kit php-zendframework-zend-serializer php-symfony-event-dispatcher php-symfony3-debug php-pecl-imagick php-json php-fedora-autoloader php-process php-pdo php-container-interop php-symfony-class-loader php-symfony-process php-symfony-finder php-cli php-fpm php-symfony-css-selector php-symfony-expression-language php-composer-ca-bundle php-composer-spdx-licenses php-psr-cache php-sabre-uri2 php-seld-phar-utils php-ldap php-pecl-selinux php-iamcal-lib-autolink php-symfony-polyfill php-pecl-zip php-tidy php-imap php-xmlrpc php-mbstring php-zendframework-zend-servicemanager php-symfony-yaml php-symfony-dependency-injection php-simplepie php-elvanto-litemoji php-paragonie-random-compat php-sabre-vobject4 php-symfony-dom-crawler php-symfony-http-foundation php-zendframework-zend-json php-zendframework-zend-cache php-symfony-console php-symfony-http-kernel php-symfony3-common php-symfony3-console php-tcpdf php-common php-PsrLog php-pecl-apcu php-symfony-filesystem php-symfony-debug php-composer-xdebug-handler php-markdown php-sebastian-diff3 php-opcache php-xml php-zendframework-zend-eventmanager php-IDNA_Convert php-justinrainbow-json-schema5 php-scssphp php-true-punycode php-zendframework-zend-i18n php-gd php-symfony-var-dumper php-pear-CAS
На сайте разработчика GLPI вы можете посмотреть какие требования предъявляются для php.
Внесем необходимые изменения в файл настроек php.ini:
vim /etc/php.ini = необходимые изменения = # Запрет на исполнение произвольного кода на сервере с правами php процесса при загрузке файла. cgi.fix_pathinfo=0 # Необходимая временная зона date.timezone = "Europe/Moscow"
Запускаем php-fpm и добавляем в автозагрузку:
systemctl enable --now php-fpm
Запускать php-fpm будем через unix сокет. Для этого переименуем конфиг /etc/php-fpm.d/www.conf, создадим новый и приводим к следующему виду:
mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf_orig vim /etc/php-fpm.d/www.conf = необходимый код = [www] user = nginx group = nginx listen = /run/php-fpm/www.sock listen.mode = 0660 listen.owner = nginx listen.group = nginx pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 ;pm.process_idle_timeout = 10s; ;pm.max_requests = 500
Назначим каталогу /var/lib/php правильное владение:
chown -R root:nginx /var/lib/php
Перезапускаем php-fpm командой:
systemctl restart php-fpm
Проверяем, стартовал ли указанный сокет:
ll /run/php-fpm/www.sock
srw-rw---- 1 nginx nginx 0 фев 13 10:35 /run/php-fpm/www.sock
Всё успешно настроено.
Создадим отдельный пул для php-fpm, который будет обслуживать сайт support.sevo44.ru на котором и будет работать GLPI. Удобно когда для каждого сайта используется независимый пул в котором можно выставить необходимые значения.
Переходим в нужную папку, копируем существующий конфигурационный файл и делаем необходимые изменения:
cd /etc/php-fpm.d/ cp www.conf support.sevo44.ru.conf vim /etc/php-fpm.d/support.sevo44.ru.conf = необходимые параметры = [support.sevo44.ru] user = support.sevo44.ru group = support.sevo44.ru listen = /run/php-fpm/support.sevo44.ru.sock listen.mode = 0660 listen.owner = support.sevo44.ru listen.group = support.sevo44.ru pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 ;pm.process_idle_timeout = 10s; ;pm.max_requests = 500
Перезапускаем:
systemctl restart php-fpm
Проверяем работу пула:
ll /run/php-fpm/support.sevo44.ru.sock
= вывод команды =
srw-rw---- 1 support.sevo44.ru support.sevo44.ru 0 ноя 10 16:34 /run/php-fpm/support.sevo44.ru.sock
Все работает как надо и в настройках Nginx для сайта мы укажем этот пул.
Установка NGINX
Более подробно как работать c Nginx можно из статьи NGINX установка и настройка.
Создадим файл использующий стабильный репозиторий:
vim /etc/yum.repos.d/nginx.repo = необходимый код = [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Устанавливаем:
dnf install nginx
Добавляем в автозагрузку и запускаем:
systemctl enable --now nginx
Проверяем работу:
curl http://localhost = вывод команды = <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
Для удобства всегда правлю файл сайта по умолчанию для понимания к какому серверу подключился:
vim /usr/share/nginx/html/index.html = необходимый код = <!DOCTYPE html> <html> <head> <title>Welcome!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome!</h1> <p>If you see this page, the nginx web server is successfully installed and working.</p> <p><em>lemp.sevo44.loc</em></p> </body> </html>
Переименуем главный конфигурационный файл Nginx и создадим новый с нужными параметрами:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf_orig vim /etc/nginx/nginx.conf = необходимый код c пояснениями= # Пользователь и группа, от имени которых будет запущен процесс user nginx nginx; # Число воркеров в новых версиях рекомендовано устанавливать параметр auto worker_processes auto; # Уровни лога debug, info, notice, warn, error, crit, alert или emerg # перечислены в порядке возрастания важности. При установке определённого уровня # в лог попадают все сообщения указанного уровня и уровней большей важности. # Например, при стандартном уровне error в лог попадают сообщения уровней error, crit, alert и emerg. # Если параметр не задан, используется error. error_log /var/log/nginx/error.log warn; # Файл в котором будет храниться идентификатор основного процесса pid /var/run/nginx.pid; events { # Максимальное количество соединений одного воркера worker_connections 1024; # Метод выбора соединений (для FreeBSD будет kqueue) use epoll; # Принимать максимально возможное количество соединений multi_accept on; } http { # Отключить вывод версии nginx в ответе server_tokens off; # Указываем файл с mime-типами и указываем тип данных по-умолчанию 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 эффективнее чем read+write sendfile on; # Ограничивает объём данных, который может передан за один вызов sendfile(). # Нужно для исключения ситуации когда одно соединение может целиком захватить воркер sendfile_max_chunk 128k; # Отправлять заголовки и начало файла в одном пакете tcp_nopush on; tcp_nodelay on; # Параметр задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера keepalive_timeout 65; # Сбрасывать соединение если клиент перестал читать ответ reset_timedout_connection on; # Разрывать соединение по истечению таймаута при получении заголовка и тела запроса client_header_timeout 3; client_body_timeout 5; # Разрывать соединение, если клиент не отвечает в течение 3 секунд send_timeout 3; # Задание буфера для заголовка и тела запроса client_header_buffer_size 2k; client_body_buffer_size 256k; # Ограничение на размер тела запроса client_max_body_size 12m; # Подключение дополнительных конфигов include /etc/nginx/conf.d/*.conf; }
Проверяем правильность настроек Nginx:
nginx -t = вывод команды = nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Всё хорошо. Выполняем обновление правил без перезагрузки Nginx:
nginx -s reload
Конфигурационный файл Nginx для GLPI
Создаем фал Nginx для работы GLPI:
vim /etc/nginx/conf.d/support.sevo44.ru.conf = необходимый код = ### support.sevo44.ru server { listen 80; server_name support.sevo44.ru www.support.sevo44.ru; root /var/www/support.sevo44.ru/www/; index index.php index.html index.htm; access_log /var/www/support.sevo44.ru/log/support.sevo44.ru-access.log; error_log /var/www/support.sevo44.ru/log/support.sevo44.ru-error.log; # Для записи в log реальных ip при использовании прокси nginx set_real_ip_from 10.10.0.1; real_ip_header X-Real-IP; # Без него не грузит файлы больше 1 метра client_max_body_size 10m; keepalive_timeout 60; add_header Strict-Transport-Security 'max-age=604800'; location / { try_files $uri $uri/ =404; autoindex on; } location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ { access_log off; expires max; } location /api { rewrite ^/api/(.*)$ /apirest.php/$1 last; } location ~ \.php$ { try_files $uri = 404; fastcgi_index index.php; fastcgi_pass unix:/run/php-fpm/support.sevo44.ru.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SERVER_NAME $host; fastcgi_param HTTPS on; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_param PHP_VALUE " memory_limit = 64M file_uploads = on max_execution_time = 600 session.auto_start = off session.use_trans_sid = 0 "; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { #allow all; deny all; log_not_found off; access_log off; } location ~ /\.ht { deny all; } }
В моем варианте сигнал проксируется с помощью Nginx прокси. Сертификат получаем на проксирующем сервере.
Более подробно про получение сертификата можно из статьи SSL бесплатный для сайта Nginx.
Проверяем и перезапускаем в случае успеха:
nginx -t = вывод команды = nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful nginx -s reload
Установка MariaDB
Более подробно о там как работать с базой данных можно из статьи MariaDB оптимизация и установка.
Добавим необходимый репозиторий создав файл с кодом:
vim /etc/yum.repos.d/mariadb.repo = необходимый код = # MariaDB 10.4 CentOS repository list - created 2019-10-24 18:16 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos8-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Установим MariaDB:
dnf install boost-program-options dnf install MariaDB-server MariaDB-client --disablerepo=AppStream
Запустим и добавим в автозагрузку:
systemctl enable --now mariadb
Произведем начальную настройку:
/usr/bin/mysql_secure_installation
Для удобства работы с базой вы можете установить PhpMyAdmin и создать там базу или воспользоватся статьёй MariaDB работа из консоли и создать базу данных в консоли.
Установка и начальная настройка GLPI
Сам процесс установки и начальной настройке прост и понятен. Все дальнейшие «сюрпризы» и нюансы будут при настройке системы для работы.
Система настолько гибкая что порой начинаешь путаться во всех её возможных схемах работы.
Главное делайте бэкап базы данных средствами самой GLPI и тогда сможете сэкономить много своего времени.
Установка GLPI
Разработчики для безопасности рекомендуют вынести некоторые папки за рамки веб сервера для безопасности и об это рассказано тут.
В данном примере я не выношу папки за пределы веб сервера, хотя на практике это использую. Лишняя безопасность еще никому не вредила.
Запускаем установку введя в браузере адрес сайта.
Выбираем язык:
Соглашаемся с лицензией:
Выбираем вариант установить:
Смотрим результат проверок:
На предупреждение не обращаем внимания так как мы не вынесли некоторые папки за пределы веб сервера по рекомендации разработчиков.
Вводим данные от базы данных:
Выбираем созданную ранее базу данных:
Проверка подключения к базе данных прошла успешно:
Соглашаемся с отправкой статистики использования если уважаем свободное программное обеспечение:
Если посмотрите по ссылке какие данные отправятся то увидите что ничего секретного там нет.
Продолжаем и при желании открываем страницу на которой сказано как можно помочь материально проекту:
В результате увидим сообщение об удачной установке и список всех пользователей по умолчанию с паролями:
Вот таким видом нас встретит страница авторизации GLPI:
Вот так выглядит главная страница при авторизации GLPI:
По рекомендации удаляем указанный файл и меняем пароль у пользователя glpi. У остальных пользователей или меняем пароль или просто отключаем их.
Настройка CRON для GLPI
Добавление в cron правильной команды один из главных моментов в GLPI, так как он будет обрабатывать все автоматические задачи.
Добавим файл с необходимым кодом:
vim /etc/cron.d/glpi = необходимый код = # GLPI core # Run cron to execute task even when no user connected */5 * * * * root /usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php
Где указаны следующие параметры:
- */5 * * * * — задание выполняется каждые 5 минут;
- support.sevo44.ru — пользователь которому принадлежит файл;
- /usr/bin/php — с помощью чего обрабатывать файл;
- /var/www/support.sevo44.ru/www/front/cron.php — путь до необходимого файла.
После добавления обязательно нужно проверить как он выполняется. Посмотрим логи cron:
cat /var/log/cron = часть вывода кода = Nov 10 21:57:01 support.sevo44.loc CROND[527]: (root) CMD (/usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php) Nov 10 21:58:01 support.sevo44.loc CROND[540]: (root) CMD (/usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php) Nov 10 21:59:01 support.sevo44.loc CROND[556]: (root) CMD (/usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php)
Из вывода видно что задачи успешно выполняются каждую минуту.
Ротация логов
В системе GLPI присутствует свой хороший механизм логирования, но держать логи на уровне сайта не помешает.
Настроим сразу ротацию логов что бы при необходимости было удобно их просматривать.
Создадим необходимый файл:
vim /etc/logrotate.d/sites = необходимый код = /var/www/support.sevo44.ru/log/*.log { daily missingok rotate 52 compress delaycompress notifempty create 644 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }
Согласно кода ротация будет проводится раз в день, и хранить архивы будет 52 дня. Файлы будут сжиматься и иметь права 644.
Backup сайта GLPI
После настройки настоятельно рекомендую настроить резервное копирование файлов и базы данных. Посмотреть о том как я произвожу резервное копирование в подобных случаях можно из статьи Backup надежный и безопасный.
Изменения в файлах GLPI
Обычно я сторонник не вносить изменения в файлы разработчика, но в данном случае мне они кажутся разумными и снимают ненужные вопросы от пользователей системы.
Произведем изменении графики:
- pics/favicon.ico — иконка сайта;
- pics/fd_logo.png — логотип справа после авторизации;
- pics/login_logo_glpi.png — логотип при авторизации.
Берем оригинальные файлы и не меняя разрешения делаем новые картинки. Для создания иконки сайта существуют куча онлайн сайтов и Вы можете воспользоваться ими.
Изменим заголовок сайта до авторизации:
index.php
=== примерно 76 строка ===
echo '<head><title>'.__('CЭВО:Техподдержка - Аутентификация').'</title>'."\n";
Изменим заголовок сайта после авторизации:
inc/html.class.php
=== примерно 1203 строка ===
echo "<!DOCTYPE html>\n";
echo "<html lang=\"{$CFG_GLPI["languages"][$_SESSION['glpilanguage']][3]}\">";
echo "<head><title>CЭВО:Техподдержка - ".$title."</title>";
echo "<meta charset=\"utf-8\">";
Замена в теме письма GPLI на Ticket:
inc/notificationtargetticket.class.php
=== примерно 63 строка ===
if (empty($perso_tag)) {
$perso_tag = 'Ticket';
}
return sprintf("[$perso_tag #%07d] ", $this->obj->getField('id'));
}
return parent::getSubjectPrefix();
}
Убираем внизу сообщений информацию Automatically generated by GLPI:
inc/notificationtemplate.class.php === По поиску в 2 местах меняем === Automatically generated by GLPI ---> Сгенерировано автоматически
Обновление GLPI
Механизм обновления разработчиками продуман и хорошо документируется. При правильном подходе проблем с обновлением не возникнет. Например, мне без проблем удается обновлять уже в течении трех лет.
Перед обновление обязательно посмотрите какие у Вас установлены плагины и проверьте будут ли они работать в новой версии. В случае если плагина для новой версии еще нет Вам необходимо отказаться от его использования или повременить с обновлением GLPI.
Не забудьте проверить какие требования к программному обеспечению новой версии GLPI.
Перед обновление обязательно делайте резервную копию файлов и базы данных.
Перед началом обновления всегда ставлю пароль на открытие сайта средствами Nginx. Это позволит вам избежать случая когда пользователь который хочет зайти на портал увидит там страницу с обновлением и начнет выполнять действия за вас 🙂
О том как сделать доступ к сайту по паролю средствами Nginx Вы можете посмотреть тут.
Посмотреть какая последняя версия и сохранить себе путь можно на странице Downloads сайта разработчика.
Переходим в корневую папку, скачиваем туда новую версию и распаковываем:
cd /var/www/support.sevo44.ru wget https://github.com/glpi-project/glpi/releases/download/9.5.3/glpi-9.5.3.tgz tar zxvf glpi-9.5.3.tgz
В результате у вас появиться папка glpi.
В папке www удаляем всё кроме нескольких папок:
-
files — все файлы что загружали;
-
plugins — все плагины;
-
config — настройки db.
Теперь всё что есть в папке glpi переносим в папку www. Например, я для подобных целей использую MC.
После того как всё перенесено необходимо выставить правильного пользователя и правильные права на файлы с папками:
chown -R support.sevo44.ru:support.sevo44.ru /var/www/support.sevo44.ru/www/ find /var/www/support.sevo44.ru/www -type f -exec chmod 644 {} \; find /var/www/support.sevo44.ru/www -type d -exec chmod 755 {} \;
Переходим на сайт и видим информацию об обновлении.
В данном обновление необходимо настроить работу с временными зонами и в документации про это сказано.
Инициализируем данные часовых поясов из часовых поясов нашей системы:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -p -u root mysql
Enter password: пароль пользователя root mariadb
Дадим необходимые права на чтение:
mysql -u root -p
Enter password: пароль пользователя root mariadb
GRANT SELECT (`Name`) ON `mysql`.`time_zone_name` TO 'support.sevo44.ru'@'%';
Query OK, 0 rows affected (0.082 sec)
FLUSH PRIVILEGES;
\q
Перезапустим сервис баз данных:
systemctl restart mariadb
Больше ошибок нет и переходим к обновлению базы данных.
Нажимаем кнопку «Обновление» и получим примерно такую картину:
Мы видим что обновление произошло с 9.4.4 до 9.5.3 и указало какие действия необходимо сделать.
В данном случае нам сказано что необходимо выполнить консольную команду которая преобразует в базе данных все необходимые поля относящиеся к временным зонам.
Произведем необходимые действия:
cd /var/www/support.sevo44.ru/www/bin php console glpi:migration:timestamps === вывод команды === Found 185 table(s) requiring migration. Do you want to continue ? [Yes/no]y 185/185 [============================] 100% Migration done.
Возможно после обновления расширений необходимо будет повторить действие которое описано выше.
В заключении, необходимо обновить плагины, если это необходимо, и зайти на страницу с автоматическими заданиями. Возможно какие то задания будут в зависшем состоянии и их необходимо перезапустить на странице настроек конкретного задания.
Не забываем произвести изменения в файлах GLPI если это делалось ранее.
Заключение
Надеюсь статья оказалась понятной и информативной. Рассмотрены все основные моменты по установке, начальной настойке и последующего обновления системы GLPI. В следующей статье я обязательно поделюсь нюансами с которыми столкнулся при настройке системы. Некоторые моменты не логичны возможно по причине не правильного перевода, но в целом система очень удобна в работе.
С данным конфигом nginx glpi работает неверно, а именно интеграция с официальным приложением GAPP невозможна.
Спасибо за инструкцию!
К сожалению, с данными настройками возникает ошибка с API. Ошибка связана с конфигами nginx.
Вот рабочий вариант:
### site.ru
server {
listen 80;
listen [::]:80 default_server;
server_name site.ru http://www.site.ru;
root /var/www/site.ru/www/;
index index.php index.html index.htm;
access_log /var/www/site.ru/log/access_log.log;
error_log /var/www/site.ru/log/error_log.log;
# Include phpmyadmin
#include /etc/nginx/snippets/phpMyAdmin.conf;
set_real_ip_from 10.10.0.1;
real_ip_header X-Real-IP;
client_max_body_size 10m;
keepalive_timeout 60;
add_header Strict-Transport-Security ‘max-age=604800’;
location / {
try_files $uri $uri/ =404;
autoindex on;
}
location /api {
rewrite ^/api/(.*)$ /apirest.php/$1 last;
}
location ~[^/]\.php(/|$) {
fastcgi_pass unix:/run/php-fpm/site.ru.sock;
# regex to split $ uri to $ fastcgi_script_name and $ fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.*)$;
# Check that the PHP script exists before passing it
#try_files $fastcgi_script_name = 404;
# Bypass the fact that try_files resets $ fastcgi_path_info
# # see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# allow directory index
fastcgi_index index.php;
}
location /pma {
alias /usr/share/phpMyAdmin/;
location ~ /(libraries|setup) {
#location ~ /(libraries) {
return 404;
}
location ~ ^/pma/(.*\.php)$ {
alias /usr/share/phpMyAdmin/$1;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
location ~* ^/pma/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
alias /usr/share/phpMyAdmin/$1;
}
}
}
Добрый день, в настройках glpi «настройки — общие — значения по умолчанию» в графе «внешний вид — временная зона» висит предупреждение «Доступ к базе данных часовых поясов (mysql) не разрешен.»
подскажите как это исправить?
Смотрите права пользователя.
спасибо за статью!
я новичок в linux системах… по мануалам установил Centos 7 а на нем Apache server 7.4.8. PHP 7.4.8 MSQL MariaDB server 10.5.4 и собственно сам GLPI 9.5.0
GLPI дает ошибку/предупреждение
«Доступ к базе данных часовых поясов (mysql) не разрешен./Access to timezone database (mysql) is not allowed»
как это поправить, как дать GLPI этот доступ?
в php.ini часовая зона прописана
при выполнении команды SELECT NOW() в mysql выводит правильное время …
Не подскажу. За установку по моей статье я могу дать подсказку а по чужим я пас. Явно проблема с правами доступа…
Подскажите как настроить сквозную аунтефикацию для glpi в centos 8
Не подскажу. Знаю что это можно сделать, но не настраивал.
Спасибо )
Полезная публикация.
Интересное решение осветили, ждем следующей статьи. Спасибо!
Про установку GLPI статей много и установить не сложно, но вот из за огромного количества возможностей с настройкой и возникают сложности по началу. Следующая статья будет гораздо интересней, так как будет показано практическое применение.