GLPI+Docker实战:从零搭建企业级IT HelpDesk和资产管理后台(避坑指南)
当企业IT基础设施规模超过50台设备时,Excel表格管理资产的方式就会暴露出致命缺陷——版本混乱、权限失控、变更记录缺失。我曾见证过一家快速扩张的科技公司,因为资产台账不清晰导致年度审计时发现价值20万的设备"消失",最终在离职员工的储物柜里找回。这正是我们需要GLPI这类专业IT资产管理系统的现实意义。
本文将带你用Docker搭建一个生产级GLPI平台,重点解决三个核心诉求:资产全生命周期追踪、标准化故障处理流程和知识沉淀体系。不同于简单的安装教程,我们会深入企业落地场景,特别标注了Docker化部署中7个高频踩坑点,比如时区同步导致工单时间错乱、MariaDB字符集引发的特殊符号存储异常等实际案例。
1. 环境规划与架构设计
在按下docker-compose up之前,合理的架构设计能避免后期70%的运维问题。根据企业用户规模,我推荐两种部署方案:
| 用户规模 | 容器配置 | 数据库方案 | 备份策略 |
|---|---|---|---|
| <100人 | 2核4G + 单容器部署 | 内置MariaDB | 每日全量SQL导出 |
| 100-500人 | 4核8G + GLPI与数据库分离部署 | 独立MySQL集群 | Binlog+每日差异备份 |
网络拓扑要点:
- 对外暴露端口建议改用8443而非8080,避免与常见服务冲突
- 数据库容器需要单独配置
innodb_buffer_pool_size(建议物理内存的70%) - 文件存储挂载时务必添加
:z标签(如/data/glpi:/var/www/html:z)解决SELinux权限问题
典型问题案例:某客户直接使用默认的docker-compose.yml导致上传附件失败,根本原因是SELinux限制了容器对宿主机目录的写入。修正方案:
# 检查SELinux状态 getenforce # 临时设置宽容模式 setenforce 0 # 永久修改需编辑/etc/selinux/config2. 容器化部署关键步骤
2.1 优化版docker-compose配置
这是经过20+次部署验证的增强版配置,主要改进包括:
- 增加了healthcheck确保服务依赖顺序
- 配置了合理的资源限制
- 内置了时区同步方案
version: "3.8" services: glpi-db: image: mariadb:10.7 container_name: glpi-db healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 5s timeout: 5s retries: 3 deploy: resources: limits: memory: 2G environment: - MARIADB_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - MARIADB_DATABASE=glpi - MARIADB_USER=glpi - MARIADB_PASSWORD=${DB_PASSWORD} - TZ=Asia/Shanghai volumes: - glpi_db_data:/var/lib/mysql - ./config/mysql.cnf:/etc/mysql/conf.d/custom.cnf glpi-app: image: diouxx/glpi:latest depends_on: glpi-db: condition: service_healthy ports: - "8443:80" environment: - TZ=Asia/Shanghai - GLPI_DB_HOST=glpi-db - GLPI_DB_NAME=glpi - GLPI_DB_USER=glpi - GLPI_DB_PASSWORD=${DB_PASSWORD} volumes: - glpi_app_data:/var/www/html - /etc/localtime:/etc/localtime:ro volumes: glpi_db_data: glpi_app_data:2.2 初始化安装后的必做配置
完成网页安装向导后,立即执行以下操作:
- 时区校验:在"配置 > 通用设置"中确认时间显示正确
- 最大上传限制:修改
/var/www/html/glpi/.htaccess中的php_value upload_max_filesize - 计划任务配置:设置
crontab -e添加:*/5 * * * * docker exec glpi-app php /var/www/html/glpi/front/cron.php
常见问题:如果发现工单状态不会自动更新,通常是计划任务未正确执行。可以通过手动运行以下命令测试:
docker exec -it glpi-app php /var/www/html/glpi/front/cron.php --force3. 企业级功能集成实战
3.1 LDAP/AD域集成配置
对于已有域环境的企业,推荐使用LDAP集成而非本地账号。关键配置参数:
| 参数项 | 示例值 | 注意事项 |
|---|---|---|
| LDAP服务器地址 | ldap://dc01.company.com | 建议使用域名而非IP |
| 搜索基准DN | OU=Users,DC=company,DC=com | 精确到OU层级提高查询效率 |
| 登录名字段 | sAMAccountName | 对应AD中的用户名字段 |
| 同步时间间隔 | 3600(秒) | 生产环境建议不超过2小时 |
调试技巧:先在命令行测试LDAP查询是否正常:
ldapsearch -x -H ldap://dc01.company.com -b "OU=Users,DC=company,DC=com" -D "CN=glpi_sync,OU=ServiceAccounts,DC=company,DC=com" -w "P@ssw0rd" "(sAMAccountName=testuser)"3.2 邮件通知系统配置
工单系统的核心价值在于及时响应,邮件通知配置要点:
- 发送方式选择:
- 小型企业:直接使用SMTP
- 中大型企业:通过邮件网关(如Postfix中继)
- 防垃圾邮件策略:
- 设置
Reply-To头为工单专属地址 - 添加SPF/DKIM记录
- 设置
- 模板定制:修改
/var/www/html/glpi/inc/notificationmail.class.php实现HTML邮件
测试命令(容器内执行):
php /var/www/html/glpi/scripts/sendtestmail.php -t admin@company.com -s smtp.office365.com -p 587 -u notify@company.com -a "P@ssw0rd" --ssl-tls4. 运维监控与性能优化
4.1 健康检查指标体系
建立以下监控项确保系统稳定运行:
关键指标监控表
| 指标名称 | 正常阈值 | 检查命令 |
|---|---|---|
| 数据库连接数 | < max_connections*0.8 | SHOW STATUS LIKE 'Threads_connected' |
| 活动工单数量 | < 500 | SELECT COUNT(*) FROM glpi_tickets |
| 附件存储空间 | < 90% | df -h /var/www/html/glpi/files |
| 计划任务最后执行时间 | < 10分钟 | SELECT MAX(date) FROM glpi_crontasks |
4.2 备份恢复方案
采用3-2-1备份原则实现:
- 数据库每日全备:
docker exec glpi-db mysqldump -u root -p${DB_ROOT_PASSWORD} --single-transaction glpi | gzip > /backup/glpi_db_$(date +%F).sql.gz - 文件增量备份:
rsync -az --delete /docker/volumes/glpi_app_data/ /backup/glpi_files/ - 灾难恢复演练:
# 数据库恢复 zcat /backup/glpi_db_2023-08-01.sql.gz | docker exec -i glpi-db mysql -u root -p${DB_ROOT_PASSWORD} glpi # 文件恢复 rm -rf /docker/volumes/glpi_app_data/_data/* cp -a /backup/glpi_files/* /docker/volumes/glpi_app_data/_data/
实际案例:某客户服务器硬盘故障后,用上述方案在15分钟内完成了全系统恢复,仅丢失最后2小时的工单数据。