GLPI部署、运维和管理使用手册
GLPI(Gestionnaire Libre de Parc Informatique 法语)是一款基于PHP/MySQL的开源IT服务管理平台,遵循GNU GPL协议。其核心功能覆盖IT资产全生命周期管理、服务台工单系统、网络设备发现及远程维护,并支持通过插件扩展CMDB配置管理、合同生命周期追踪等专业模块。系统采用RBAC角色权限模型,可适配多分支机构的分布式IT架构,同时内置的自动化报表引
GLPI部署、运维和管理使用手册
作者建议
我将文档发布到了多个平台,不同的平台阅读体验不同,排版也可能有区别,本人强烈建议直接点击下面的链接查看原始文档,因为下面的链接是原始文档,阅读体验极佳,排版美观,有目录结构,您可以很容易找到您想要阅读的章节。另外,文档一直持续更新,不断完善,内容更加准确且与时俱进。原始文档始终是最新版本的,其它平台中的文档可能已经过时了。
单击查看原始文档:《GLPI部署、运维和管理使用手册》
原创不易,如果对您有帮助,还请您一键三连[抱拳]
有任何问题都可以联系作者,文末有作者联系方式,欢迎交流。
以下是正文
什么是GLPI
GLPI(Gestionnaire Libre de Parc Informatique 法语)是一款基于PHP/MySQL的开源IT服务管理平台,遵循GNU GPL协议。其核心功能覆盖IT资产全生命周期管理、服务台工单系统、网络设备发现及远程维护,并支持通过插件扩展CMDB配置管理、合同生命周期追踪等专业模块。系统采用RBAC角色权限模型,可适配多分支机构的分布式IT架构,同时内置的自动化报表引擎能生成符合ITIL标准的运维分析数据。因其高度可定制性,广泛应用于政府机构、教育单位及中大型企业,既满足基础运维需求,亦可通过二次开发实现与现有OA、财务系统的深度集成。
官方网站和官方文档
部署GLPI
截至本人写作本文时,最新版本的GLPI版本号为10.0.18
部署在k8s上
支持通过helm部署,具体操作请参考此文glpi 0.1.0 · vdiogov/glpi-conteiner
注意:glpi官方并没有发布容器镜像,上面的链接是第三方制作的容器镜像
官方教程中的部署方法
官方的部署方法比较麻烦,各种依赖需要手工安装,新手通常都会卡在这一步,建议通过helm部署在k8s上,更快更便捷
请查看官方文档:GLPI installation — GLPI documentation
访问GLPI
部署成功后,即可通过浏览器访问GLPI
本人是通过helm部署的,并且通过ingress暴露端口,第一次打开网站,提示登录,默认的glpi管理员用户名为glpi,密码一样
创建用户
可以直接创建本地glpi用户,也可以将LDAP(如Microsoft AD)中的用户批量导入glpi中
glpi本地用户
如果是创建glpi本地用户,则直接按照下图所示操作即可
域用户(从Microsoft AD中导入用户)
参考资料:Command line tools — GLPI documentation
LDAP directories — Documentation GLPI 10.0
调整用户权限
创建用户后可以更改权限,一个用户可以属于多个配置文件
编辑看板(dashboard)
进入看板,单击下图箭头所示的按钮即可编辑看板,看板中的组件是非常丰富的
安装glpi客户端
glpi客户端支持Windows、Linux和macos系统
一般部署好glpi后,首先是要安装glpi客户端,大家使用glpi,多数情况下是为了进行资产管理,如PC、网络设备、服务器、各种办公设备(如打印机、投影仪等),那如何批量安装glpi客户端呢?
如果企业部署了Microsoft活动目录域服务,则可以通过组策略批量安装。有些企业可能部署了终端管理软件,例如ipguard、sccm或者VMware workspaceOne,也可以利用这些终端管理软件自带的批量安装软件功能实现。
获取官方glpi客户端安装程序
参考资料:Windows installer — GLPI Agent 1.14 documentation
glpi-project/glpi-agent: GLPI Agent
glpi客户端安装程序下载网址:glpi-project/glpi-agent: GLPI Agent
从下图可以看到github上提供了多种类型的安装程序
本节介绍下载Windows版本的glpi客户端安装程序
直接单击此链接下载1.14版本的客户端安装程序https://github.com/glpi-project/glpi-agent/releases/download/1.14/GLPI-Agent-1.14-x64.msi 请始终下载最新版本
找到glpi应用程序的URL地址
手工安装glpi客户端
以管理身份运行Powershell,然后运行下行命令
#注意:<URL>要替换为实际的glpi服务器url,本教程的url为http://10.65.37.239:31763
#RUNNOW=1指的是安装完成后立即收集资产信息并发送到glpi服务器
GLPI-Agent-1.14-x64.msi /quiet RUNNOW=1 SERVER=<URL>
通过组策略(软件安装策略)批量安装glpi客户端
通组策略批量安装glpi客户端也有多种方式,本小节介绍的是利用软件安装策略批量化无感安装
使用组策略中的软件安装策略
这种方法,编辑组策略很方便,但是要先修改官方的msi程序包,这是因为软件安装策略并不支持添加命令行参数,而我们必须要指定glpi服务器的url才行,关于如何修改msi程序包,请继续往下看。
修改官方的msi安装包
修改msi包的软件有很多,例如微软开发的免费软件orca,本文使用的是Advanced installer,这是一款非常强大的程序包创建工具,也可以直观地修改msi包,例如更改默认安装目录,更改属性值等等。
Advanced installer安装就不介绍了,直接讲述如何修改msi包,本文以修改1.14版本的安装包为例,官方下载的安装包文件名为:GLPI-Agent-1.14-x64.msi
打开Advanced installer软件,然后单击“文件”–open,再选择需要修改的msi安装包,打开后就可以进行各种更改了,本文修改的项有:
设置参数server和runnow的值,这两个参数默认值分别是empty和0;server参数指定glpi服务器的地址,runnow参数设置为1表示安装完glpi agent后立即开始资产盘点并将资产信息发给glpi服务器端。
默认情况下,安装包只添加"feat_DEPLOY,feat_COLLECT"这两个功能(注意feat_AGENT默认也是添加的,这是最基础的功能),我改为添加所有功能,也就是以下5个功能都添加:
feat_AGENT: to restrict to the minimum installation with agent and Inventory task
feat_NETINV: to select NetDiscovery and NetInventory tasks for installation
feat_DEPLOY: to select Deploy task for installation
feat_COLLECT: to select Collect task for installation
feat_WOL: to select WakeOnLan task for installation
具体修改方法如下图
接下来说明如何更改msi包,使得默认添加所有功能,这个修改并不在properties页面,而是在table editor页面,下图红框中选中的feature的level值默认并不是3,改为3就意味着默认安装此项功能,如果仔细分析,会发现原始msi包中,默认安装的功能的level值为3,所以可以推导出level值为3则表示默认安装此项功能。(有些包不仅要修改level值,还需要修改attribute值)
关于这个feature,具体可以参考这篇文章功能表 - Win32 apps | Microsoft Learn
更改完成后,单击“文件”–“Save as”另存为一个msi包,这样可以不用覆盖原始msi包,我命名为GLPI-Agent-1.14-x64._Custom_V1.1.msi
将修改后的msi安装程序放入共享文件夹
需要先搭建文件服务器,并创建共享文件夹,将之前下载的glpi客户端安装程序放入共享文件夹中。具体操作就不赘述了,下图是我准备好的共享文件夹
接下来创建组策略对象(GPO),打开组策略管理器,右击“组策略对象”,选择“新建”,然后给新建的GPO命名
编辑刚刚新建的GPO,然后按照下图所示操作
如此,就完成了组策略对象的创建和编辑,接下来还要应用给计算机才能生效,如果要应用给域内所有计算机,可以直接将此GPO链接到域中,如下图所示:
特别提示:建议先找一两台电脑测试,确保无误后,再应用于域内所有计算机
验证
加入域的计算机过一段时间(默认情况下是0值180分钟中的随机值)会自动更新组策略,如果想立即更新组策略,可以在相应计算机上运行下行命令
gpupdate /force
上述命令执行成功后,Windows系统会自动安装glpi客户端,成功安装后,就可以在glpi管理网页中查看到此计算机的详细资产和状态信息了,也可以在计算机已安装软件类别中发现glpi客户端
扩展阅读:组策略中的软件安装策略的两种部署类型(已分配和已发布)有什么区别呢?
区别点**** | **已分配(Assigned)** | **已发布(Published)** |
---|---|---|
安装性质 | 强制 | 可选 |
应用对象 | 用户或计算机 | 仅用户 |
触发时机 | 登录/启动时预装,或首次使用触发 | 用户手动安装或文件关联触发 |
卸载权限 | 用户通常不可卸载 | 用户可自行卸载 |
适用场景 | 必需软件(如Office、杀毒软件、glpi客户端、准入认证客户端等) | 可选工具(如PDF阅读器、办公辅助工具等) |
通过组策略中的计划任务批量安装glpi客户端
本小节介绍的是利用计划任务策略批量化无感安装,这种方式的好处是无需修改官方的msi安装包,而且对于未使用域账户登录计算机的情况也没有影响,当然了,为了使下载msi安装包更顺利,建议先搭建一个web服务器,将此web服务器作为一个下载站
准备好web服务器
首先要将官方的msi安装包放入web服务器中,然后验证是否能正常通过url下载
Start-BitsTransfer -Source http://<此处填写实际的web服务器ip地址或域名>/GLPI-Agent-1.14-x64.msi
如果能正常下载说明web服务器配置正常
创建并编辑组策略
如下图所示,我这边还用到了项目级目标,查询计算机是否已经安装了glpi客户端,如果已安装,则不执行相应的计划任务,这里需要输入产品代码,关于如何查询msi安装包的产品代码,可以看我写的另外一篇文章:《查看或修改msi包》
验证
验证的步骤与上一节是一样的。
从glpi中筛选所需的信息
这一小节的内容非常实用,大家用glpi主要就是为了便于进行资产管理,比如想要查询哪些电脑安装了盗版软件,哪些电脑的配置偏低等等。如果直接从glpi导出的话,格式很乱,所有的数据都是在一个单元格中的,很难处理,为了解决这个问题,我特地编写了Powershell脚本,可以实现一键查询安装了特定软件的计算机清单
筛选安装了特定软件的电脑清单Powershell脚本
如果你部署glpi时,mysql的版本是8.0或者更高,则用下面的脚本
<#
.SYNOPSIS
查询GLPI数据库中安装了指定软件(ABAQUS/SIMPACK)的计算机清单
.DESCRIPTION
此脚本用于:
1. 连接GLPI MySQL数据库(仅支持MySQL 8和更高的版本)
2. 查询所有安装了ABAQUS或SIMPACK软件的计算机
3. 将查询结果导出为Excel文件(包含自动换行和边框格式)
4. 输出文件保存路径
.NOTES
此脚本仅适用于MySQL 8和更高版本的数据库,低版本可能无法正常运行
.OUTPUTS
生成Excel文件: D:\所有安装了特定软件(ABQUES、SIMPACK)的计算机清单_YYYYMMDD-HHMMSS.xlsx
#>
# 导入所需的模块
Import-Module ImportExcel
$date = Get-Date -Format "yyyyMMdd-HHmmss" # 获取当前时间,按照指定格式
$softwarename = "ABAQUS、SIMPACK" #这里指定想要查询的软件的名称,不用完全匹配,只要软件名称包含其中的字符即可
# 设置输出路径
$Download_Path_xlsx = "D:\所有安装了特定软件($softwarename)的计算机清单_$date.xlsx"
$Download_Path_csv = "D:\所有安装了特定软件($softwarename)的计算机清单_$date.csv"
# 打开 MySQL 连接
Open-MySqlConnection -ConnectionName glpidatabase -ConnectionString "server=<次此处输入实际的mysql服务器ip地址>;database=<此处输入实际的glpi数据库名称>;uid=<glpi数据库的用户名>;pwd=<数据库密码>;"
# 执行 SQL 查询
#下发的sql语句中,where语句是最为关键的,要将OR gs1.name LIKE后面的值换成你想要查询的软件名称(不用完全匹配),这里我查询的是两个软件,可以再加,可以同时查询多个软件
$results = Invoke-SqlQuery -ConnectionName glpidatabase -Query "WITH st AS (
SELECT
s1.items_id,
GROUP_CONCAT(gs1.name SEPARATOR 'CHAR(10)') AS software_name
FROM
(
SELECT
*
FROM
glpi_items_softwareversions
WHERE
itemtype = 'Computer'
) s1
LEFT JOIN glpi_softwareversions gs ON s1.softwareversions_id = gs.id
LEFT JOIN glpi_softwares gs1 ON gs.softwares_id = gs1.id
WHERE
gs1.name LIKE '%'
OR gs1.name LIKE '%SIMPACK%'
OR gs1.name LIKE '%ABAQUS%'
GROUP BY
s1.items_id
)
SELECT
gc.id,
gc.name AS hostname,
gc.users_id,
gc.serial,
gc.contact,
gc.date_creation,
gc.last_inventory_update,
gc.last_boot,
st.software_name
FROM
glpi_computers gc
JOIN st ON gc.id = st.items_id
"
# 替换 CHAR(10) 为实际的换行符
$results | ForEach-Object {
$_.software_name = $_.software_name -replace 'CHAR\(10\)', "`n"
}
# 导出到 Excel
$excel = $results | Export-Excel -Path $Download_Path_xlsx -AutoSize -AutoFilter -WorksheetName "安装了特定软件的计算机清单" -PassThru
# 获取工作表
$worksheet = $excel.Workbook.Worksheets["安装了特定软件的计算机清单"]
# 设置自动换行
$worksheet.Cells["A1:I1000"].Style.WrapText = $true
# 设置边框
$borderStyle = [OfficeOpenXml.Style.ExcelBorderStyle]::Thin
$borderColor = [System.Drawing.Color]::Black
# 遍历单元格,只对有值的单元格设置边框
foreach ($row in 1..1000) {
foreach ($col in 1..9) { # A 到 I 列
$cell = $worksheet.Cells[$row, $col]
if (-not [string]::IsNullOrEmpty($cell.Text)) {
$cell.Style.Border.Top.Style = $borderStyle
$cell.Style.Border.Top.Color.SetColor($borderColor)
$cell.Style.Border.Bottom.Style = $borderStyle
$cell.Style.Border.Bottom.Color.SetColor($borderColor)
$cell.Style.Border.Left.Style = $borderStyle
$cell.Style.Border.Left.Color.SetColor($borderColor)
$cell.Style.Border.Right.Style = $borderStyle
$cell.Style.Border.Right.Color.SetColor($borderColor)
}
}
}
# 保存 Excel 文件
$excel.Save()
# 关闭 MySQL 连接
Close-SqlConnection -ConnectionName glpidatabase
# 打印导出的 xlsx 文件的具体路径
Write-Output "导出的 xlsx 文件路径: $Download_Path_xlsx"
导出的Excel文件是这样的,可以看到,排版是很清晰的,有些电脑同时安装了那两个软件,也是在同一行中显示了,很直观
如果mysql的版本为5.0或更低,则使用下面的Powershell脚本
<#
.SYNOPSIS
查询GLPI数据库中安装了指定软件(ABAQUS/SIMPACK)的计算机清单
.DESCRIPTION
此脚本用于:
1. 连接GLPI MySQL数据库(仅支持MySQL 5版本)
2. 查询所有安装了ABAQUS或SIMPACK软件的计算机
3. 将查询结果导出为Excel文件(包含自动换行和边框格式)
4. 输出文件保存路径
.NOTES
此脚本仅适用于MySQL 5版本的数据库,其他版本可能无法正常运行
.OUTPUTS
生成Excel文件: D:\所有安装了特定软件(ABQUES、SIMPACK)的计算机清单_YYYYMMDD-HHMMSS.xlsx
#>
# 导入所需的模块
Import-Module ImportExcel
$date = Get-Date -Format "yyyyMMdd-HHmmss" # 获取当前时间,按照指定格式
$softwarename = "ABAQUS、SIMPACK"
# 设置输出路径
$Download_Path_xlsx = "D:\所有安装了特定软件($softwarename)的计算机清单_$date.xlsx"
$Download_Path_csv = "D:\所有安装了特定软件($softwarename)的计算机清单_$date.csv"
# 打开 MySQL 连接
Open-MySqlConnection -ConnectionName glpidatabase -ConnectionString "server=<次此处输入实际的mysql服务器ip地址>;database=<此处输入实际的glpi数据库名称>;uid=<glpi数据库的用户名>;pwd=<数据库密码>;"
# 执行 SQL 查询
$results = Invoke-SqlQuery -ConnectionName glpidatabase -Query "
SELECT
gc.id,
gc.name AS hostname,
gc.users_id,
gc.serial,
gc.contact,
gc.date_creation,
gc.last_inventory_update,
gc.last_boot,
(
SELECT GROUP_CONCAT(gs1.name SEPARATOR '\n')
FROM glpi_items_softwareversions s1
LEFT JOIN glpi_softwareversions gs ON s1.softwareversions_id = gs.id
LEFT JOIN glpi_softwares gs1 ON gs.softwares_id = gs1.id
WHERE s1.itemtype = 'Computer'
AND s1.items_id = gc.id
AND (
-- gs1.name LIKE '%'
gs1.name LIKE '%SIMPACK%'
OR gs1.name LIKE '%ABAQUS%'
)
) AS software_name
FROM
glpi_computers gc
WHERE EXISTS (
SELECT 1
FROM glpi_items_softwareversions s1
LEFT JOIN glpi_softwareversions gs ON s1.softwareversions_id = gs.id
LEFT JOIN glpi_softwares gs1 ON gs.softwares_id = gs1.id
WHERE s1.itemtype = 'Computer'
AND s1.items_id = gc.id
AND (
-- gs1.name LIKE '%'
gs1.name LIKE '%SIMPACK%'
OR gs1.name LIKE '%ABAQUS%'
)
)"
# 替换 CHAR(10) 为实际的换行符
$results | ForEach-Object {
$_.software_name = $_.software_name -replace 'CHAR\(10\)', "`n"
}
# 导出到 Excel
$excel = $results | Export-Excel -Path $Download_Path_xlsx -AutoSize -AutoFilter -WorksheetName "安装了特定软件的计算机清单" -PassThru
# 获取工作表
$worksheet = $excel.Workbook.Worksheets["安装了特定软件的计算机清单"]
# 设置自动换行
$worksheet.Cells["A1:I1000"].Style.WrapText = $true
# 设置边框
$borderStyle = [OfficeOpenXml.Style.ExcelBorderStyle]::Thin
$borderColor = [System.Drawing.Color]::Black
# 遍历单元格,只对有值的单元格设置边框
foreach ($row in 1..1000) {
foreach ($col in 1..9) { # A 到 I 列
$cell = $worksheet.Cells[$row, $col]
if (-not [string]::IsNullOrEmpty($cell.Text)) {
$cell.Style.Border.Top.Style = $borderStyle
$cell.Style.Border.Top.Color.SetColor($borderColor)
$cell.Style.Border.Bottom.Style = $borderStyle
$cell.Style.Border.Bottom.Color.SetColor($borderColor)
$cell.Style.Border.Left.Style = $borderStyle
$cell.Style.Border.Left.Color.SetColor($borderColor)
$cell.Style.Border.Right.Style = $borderStyle
$cell.Style.Border.Right.Color.SetColor($borderColor)
}
}
}
# 保存 Excel 文件
$excel.Save()
# 关闭 MySQL 连接
Close-SqlConnection -ConnectionName glpidatabase
# 打印导出的 xlsx 文件的具体路径
Write-Output "导出的 xlsx 文件路径: $Download_Path_xlsx"
如何将AI聊天机器人集成至glpi中
可以将ragflow、dify等工具创建的AI助理集成至glpi中,我为此专门开发了一个glpi插件,详情请查看此文:《ragflow与glpi无缝集成的开源插件》
受欢迎的glpi插件
glpi是支持插件的,可以通过插件扩展glpi的功能,glpi插件市场上有很多社区开发的插件,比较常用的是下面这些,详细的插件使用说明请查看各插件的手册。
数据中心资产管理
glpi提供了毕竟直观的数据中心视图,可以利用这个功能直观了解有多少个数据中心,每个数据中心有哪些机房(房间),每个机房有多少机柜(能直接展示机房俯视图视图),以及每个机柜安装了哪些设备,这些设备的详细信息都可以查询到,十分便利。
glpi与zabbix集成
参考资料:Source of README.md - Zabbix - ZABBIX GIT
glpi对于ITIL很专业,用它来创建处理工单是很合适的。zabbix十分擅长监控。能不能将两者结合,取长补短呢?比如zabbix发现某台服务器挂了,自动通知glpi,然后glpi自动创建合适的工单,发给相关的IT工程师处理。这个是可以实现的,当然方法有很多,比较简单的方法是直接用zabbix内置的webhook功能,zabbix本身就能与glpi实现一定程度的集成。具体实现可以参考上面的官方文档
关注我们,获取更多IT开发运维实用工具与技巧!
github用户名: iamtornado
github个人首页: https://github.com/iamtornado
电子邮箱: 1426693102@qq.com
个人微信:tornadoami(也可以通过下面的二维码加我,之后我将您邀请进入AI技术交流群)
QQ群: 715152187
微信公众号: AI发烧友
更多推荐
所有评论(0)