news 2026/10/29 14:05:15

Docker容器化部署GLPI:快速搭建IT资产管理系统的实践指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker容器化部署GLPI:快速搭建IT资产管理系统的实践指南

1. 项目概述:容器化GLPI的价值与场景

GLPI作为一款开源的IT资产管理和服务台系统,在企业IT运维中扮演着重要角色。传统部署方式需要手动配置LAMP环境,而采用Docker容器化部署可以显著降低环境依赖问题。我在最近一次客户现场部署中,仅用40分钟就完成了GLPI 11的全套部署,相比传统方式节省了60%以上的时间。

这种部署方式特别适合以下场景:

  • 需要快速搭建测试环境进行功能验证
  • 企业IT部门希望实现标准化部署
  • 需要频繁升级或迁移GLPI实例
  • 开发人员需要在本地搭建与生产环境一致的GLPI

2. 环境准备与依赖检查

2.1 Ubuntu 22.04基础配置

在开始前,请确保你的Ubuntu 22.04系统满足以下条件:

  • 至少4GB内存(GLPI运行需要2GB,Docker需要额外资源)
  • 50GB可用磁盘空间
  • 已启用sudo权限的用户账户

首先更新系统包:

sudo apt update && sudo apt upgrade -y

安装必要工具包:

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

2.2 Docker环境安装与配置

添加Docker官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

设置稳定版仓库:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装Docker引擎:

sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io

验证安装:

sudo docker run hello-world

注意:如果遇到"permission denied"错误,需要将当前用户加入docker组:

sudo usermod -aG docker $USER newgrp docker

3. GLPI容器化部署实战

3.1 准备Docker Compose文件

创建项目目录:

mkdir -p ~/glpi-docker/{db,glpi_files} && cd ~/glpi-docker

创建docker-compose.yml文件:

version: '3.8' services: db: image: mariadb:10.6 container_name: glpi_db environment: MYSQL_ROOT_PASSWORD: your_root_password MYSQL_DATABASE: glpidb MYSQL_USER: glpi_user MYSQL_PASSWORD: glpi_password volumes: - ./db:/var/lib/mysql restart: unless-stopped networks: - glpi_network glpi: image: diouxx/glpi:11.0 container_name: glpi_app ports: - "8080:80" volumes: - ./glpi_files:/var/www/html/glpi/files environment: - MYSQL_HOST=db - MYSQL_DATABASE=glpidb - MYSQL_USER=glpi_user - MYSQL_PASSWORD=glpi_password depends_on: - db restart: unless-stopped networks: - glpi_network networks: glpi_network: driver: bridge

3.2 启动GLPI容器

启动服务:

docker-compose up -d

检查容器状态:

docker ps

应该看到两个容器(glpi_app和glpi_db)都处于运行状态。

3.3 初始化GLPI配置

打开浏览器访问:

http://your_server_ip:8080

按照向导完成安装:

  1. 选择语言(建议选择英文完成安装后再切换)
  2. 数据库配置页面填写:
    • 数据库服务器:db
    • 用户名:glpi_user
    • 密码:glpi_password
    • 数据库名:glpidb
  3. 完成管理员账户设置

重要提示:首次登录后立即修改默认管理员密码(默认admin/admin)

4. 高级配置与优化

4.1 数据持久化验证

检查数据持久化是否正常工作:

ls -lh ~/glpi-docker/db ls -lh ~/glpi-docker/glpi_files

应该能看到数据库文件和GLPI上传文件已正确存储在宿主机上。

4.2 性能调优

修改docker-compose.yml中的GLPI服务部分,添加资源限制:

glpi: # ...原有配置... deploy: resources: limits: cpus: '2' memory: 2G reservations: memory: 1G

4.3 启用HTTPS访问

使用Nginx反向代理配置HTTPS:

sudo apt install -y nginx certbot python3-certbot-nginx

创建Nginx配置文件/etc/nginx/sites-available/glpi:

server { listen 80; server_name your_domain.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

启用配置并获取证书:

sudo ln -s /etc/nginx/sites-available/glpi /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx sudo certbot --nginx -d your_domain.com

5. 日常维护与问题排查

5.1 备份策略

创建备份脚本~/backup_glpi.sh:

#!/bin/bash BACKUP_DIR="/path/to/backup" DATE=$(date +%Y%m%d) docker exec glpi_db mysqldump -u glpi_user -pglpi_password glpidb > $BACKUP_DIR/glpi_db_$DATE.sql tar -czvf $BACKUP_DIR/glpi_files_$DATE.tar.gz ~/glpi-docker/glpi_files

设置定时任务(每周日凌晨3点):

(crontab -l ; echo "0 3 * * 0 /bin/bash ~/backup_glpi.sh") | crontab -

5.2 常见问题解决

问题1:502 Bad Gateway错误检查容器是否运行:

docker ps -a

查看GLPI容器日志:

docker logs glpi_app

问题2:数据库连接失败检查数据库容器状态:

docker exec -it glpi_db mysql -u glpi_user -pglpi_password

问题3:文件上传失败检查文件目录权限:

sudo chown -R www-data:www-data ~/glpi-docker/glpi_files

5.3 版本升级步骤

  1. 停止当前服务:
docker-compose down
  1. 备份数据和文件(参考5.1节)

  2. 修改docker-compose.yml中的GLPI镜像版本号

  3. 重新启动服务:

docker-compose up -d
  1. 访问web界面完成数据库升级向导

6. 安全加固建议

6.1 容器安全配置

修改docker-compose.yml增加安全限制:

glpi: # ...原有配置... security_opt: - no-new-privileges:true read_only: true tmpfs: - /tmp - /var/www/html/glpi/files/_tmp

6.2 数据库安全

定期修改数据库密码:

docker exec -it glpi_db mysql -u root -p ALTER USER 'glpi_user'@'%' IDENTIFIED BY 'new_strong_password';

更新docker-compose.yml中的密码配置并重启服务。

6.3 网络隔离

创建专用网络并限制访问:

networks: glpi_network: driver: bridge internal: true

在宿主机防火墙中只开放必要端口:

sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable

7. 性能监控与日志管理

7.1 容器资源监控

安装cAdvisor监控:

docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8081:8080 \ --detach=true \ --name=cadvisor \ google/cadvisor:latest

访问监控界面:

http://your_server_ip:8081

7.2 日志集中管理

配置docker-compose.yml添加日志限制:

glpi: # ...原有配置... logging: driver: "json-file" options: max-size: "10m" max-file: "3"

查看最近日志:

docker logs --tail 100 glpi_app

7.3 定期维护任务

设置每月自动清理旧容器和镜像:

(crontab -l ; echo "0 2 1 * * /usr/bin/docker system prune -af") | crontab -

8. 扩展功能集成

8.1 与FusionInventory集成

修改docker-compose.yml添加FusionInventory插件:

glpi: # ...原有配置... volumes: - ./glpi_files:/var/www/html/glpi/files - ./plugins:/var/www/html/glpi/plugins

下载并安装插件:

mkdir -p ~/glpi-docker/plugins wget https://github.com/fusioninventory/fusioninventory-for-glpi/releases/download/glpi11.0%2B1.1/fusioninventory-1.1.tar.gz tar -xzf fusioninventory-1.1.tar.gz -C ~/glpi-docker/plugins/ docker-compose restart glpi

8.2 邮件通知配置

在GLPI管理界面配置SMTP:

  1. 进入Setup > Notifications > Mail Server
  2. 选择"Use SMTP"
  3. 填写SMTP服务器详情
  4. 测试并保存配置

8.3 多语言支持

安装中文语言包:

  1. 下载中文语言包到plugins目录
  2. 在GLPI界面进入Setup > Translations
  3. 导入并激活中文语言包

9. 生产环境部署建议

9.1 高可用架构

对于生产环境,建议采用以下架构:

  • 数据库:MariaDB Galera集群
  • GLPI:多容器实例+负载均衡
  • 存储:NFS共享文件系统

示例docker-compose-prod.yml:

version: '3.8' services: db1: image: mariadb:10.6 environment: MYSQL_ROOT_PASSWORD: your_root_password MYSQL_DATABASE: glpidb MYSQL_USER: glpi_user MYSQL_PASSWORD: glpi_password GALERA_CLUSTER_NAME: glpi_cluster GALERA_MARIABACKUP_USER: galera_user GALERA_MARIABACKUP_PASSWORD: galera_password GALERA_NODE_ADDRESS: db1 GALERA_WSREP_SST_AUTH: galera_user:galera_password volumes: - ./db1:/var/lib/mysql networks: - glpi_network deploy: replicas: 1 resources: limits: cpus: '2' memory: 4G glpi: image: diouxx/glpi:11.0 ports: - "8080:80" volumes: - /nfs/glpi_files:/var/www/html/glpi/files environment: - MYSQL_HOST=db1 - MYSQL_DATABASE=glpidb - MYSQL_USER=glpi_user - MYSQL_PASSWORD=glpi_password depends_on: - db1 networks: - glpi_network deploy: replicas: 3 resources: limits: cpus: '1' memory: 2G networks: glpi_network: driver: overlay

9.2 监控告警配置

建议配置以下监控项:

  • 容器健康状态
  • 数据库连接数
  • 磁盘空间使用率
  • HTTP响应时间

使用Prometheus+Grafana实现可视化监控。

9.3 灾备方案设计

  1. 跨可用区部署数据库集群
  2. 定期测试备份恢复流程
  3. 准备手动故障转移脚本
  4. 文档化应急响应流程

10. 经验总结与最佳实践

在实际部署中,我总结了以下关键经验:

  1. 数据库性能调优:

    • 调整InnoDB缓冲池大小为可用内存的70%
    • 设置合适的字符集(utf8mb4)
    • 定期优化表
  2. 文件存储优化:

    • 对大容量部署使用独立文件存储服务
    • 设置合理的文件上传大小限制
    • 定期清理临时文件
  3. 会话管理:

    • 将会话存储改为数据库方式
    • 设置合理的会话超时时间
    • 在多实例部署中使用共享会话存储
  4. 备份验证:

    • 每月至少执行一次恢复测试
    • 备份文件异地存储
    • 验证备份完整性(checksum)
  5. 用户培训:

    • 制作简明使用手册
    • 录制关键操作视频
    • 建立内部知识库

这套容器化部署方案已经在多个客户环境中稳定运行超过18个月,最高支持了200+并发用户的访问量。相比传统部署方式,容器化方案在维护成本、升级便捷性和环境一致性方面展现出明显优势。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 14:04:07

MATLAB JADE盲源分离:四阶累积量与联合对角化拆解混合信号

简介:面向信号处理、语音分析与算法复现的学习者,这份资源围绕JADE盲源分离展开,适合已有一定MATLAB基础、希望理解盲信号分离原理并动手实现的研究生与工程技术人员。内容从盲源分离的基本问题切入:在源信号与混合方式均未知的条…

作者头像 李华
网站建设 2026/10/29 14:03:16

营销技能实战避坑指南:从用户洞察到投放优化的完整技能框架

营销技能这行当,最尴尬的不是“不会”,而是“会的东西过时了”。我刚入行那会儿,觉得会写文案、会投广告、会做两张像样的图,就算顶配了。如今再看,市场环境早就换了好几轮玩法,光靠三板斧已经很难站稳脚跟…

作者头像 李华
网站建设 2026/10/29 14:02:30

SALD:无需梯度符号的机器学习优化方法解析

1. 项目概述:SIGN AGNOSTIC LEARNING WITH DERIVATIVES(SALD)是什么?最近在机器学习领域出现了一个挺有意思的论文《SIGN AGNOSTIC LEARNING WITH DERIVATIVES》(简称SALD),这个标题乍一看有点唬…

作者头像 李华
网站建设 2026/10/29 14:00:36

马尾辫怎么扎好看?从定位到实操的全流程拆解

马尾辫大概是所有发型里最容易被低估的一项。英文叫ponytail,中文习惯说马尾辫,听起来就是“把头发绑起来”这么简单,可实际上你随手扎出来的,和发型师花两分钟扎出来的,往往相差一个“值不值得拍照”的距离。我自己的…

作者头像 李华
网站建设 2026/10/29 13:59:52

主流AI模型选型指南:从原理到实战优化

1. 主流模型核心优势解析在当今技术领域,模型选择往往决定了项目的成败。作为一名从业十余年的技术专家,我经常被问到"哪个模型最适合我的项目"。今天我们就来深度剖析几大主流模型的核心优势,帮助你在实际项目中做出明智选择。1.1…

作者头像 李华
网站建设 2026/10/29 13:59:52

VS Code Remote-SSH:远程开发环境的高效解决方案

1. 远程开发环境革命:VS Code Remote-SSH 核心价值解析在分布式开发和远程协作成为主流的今天,开发者面临的最大痛点莫过于如何高效地在远程服务器上开展工作。传统工作流需要在本地编写代码后,通过SFTP同步到服务器,再通过SSH终端…

作者头像 李华