
1. 为什么选择Docker部署iTopiTop作为一款开源的IT服务管理平台能帮企业高效处理故障工单、资产管理和服务请求。传统部署方式需要手动安装PHP、MySQL、Web服务器等组件光是环境配置就能让新手抓狂。我去年帮客户部署iTop时光是解决PHP扩展兼容问题就花了整整两天。Docker的环境隔离特性完美解决了这个问题。通过容器化部署你可以5分钟完成安装一条命令拉取预装好所有依赖的镜像零污染主机环境所有组件封装在容器内卸载只需删除容器版本自由切换测试不同版本的iTop就像切换Docker镜像标签一样简单实测在2核4G的云服务器上用Docker部署的iTop能稳定支持50人团队并发使用。启动容器后内存占用仅800MB比传统方式节省30%资源。2. 部署前的准备工作2.1 硬件配置建议虽然iTop官方推荐2核CPU4GB内存的配置但根据我的压力测试20人以下团队1核2G足够阿里云t6实例实测流畅50人团队建议2核4G并启用OPcache100人以上需要单独优化MySQL容器配置存储方面特别注意df -h /var/lib/docker确保Docker存储目录剩余空间大于10GBiTop的数据库会随着工单积累不断膨胀。2.2 软件环境检查首先更新系统基础组件sudo apt update sudo apt upgrade -y验证Docker环境docker --version # 需要20.10 docker-compose --version # 建议v2.2如果使用CentOS系统需要先关闭SELinuxsudo setenforce 0 sudo sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config注意生产环境建议使用Docker官方存储库安装避免使用系统自带的旧版本3. 两种部署方案详解3.1 快速体验方案内置数据库适合快速验证功能的开发测试场景docker run -d \ -p 8080:80 \ -v itop_data:/var/www/html \ --name itop_prod \ vbkunin/itop:latest关键参数说明-v itop_data:/var/www/html将配置数据持久化到Docker卷:latest标签可能不稳定生产环境建议指定具体版本号首次启动后执行docker logs itop_prod | grep MySQL password会输出内置数据库的随机密码记得保存。3.2 生产环境方案外置MySQL先启动MySQL容器docker run -d \ --name itop_mysql \ -v mysql_data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDYourStrongPassword \ -e MYSQL_DATABASEitop \ -e MYSQL_USERitop \ -e MYSQL_PASSWORDItopPassword \ mysql:5.7 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ci然后启动iTop容器并链接数据库docker run -d \ -p 80:80 \ --link itop_mysql:mysql \ -e MYSQL_HOSTmysql \ -e MYSQL_USERitop \ -e MYSQL_PASSWORDItopPassword \ -e MYSQL_DATABASEitop \ vbkunin/itop:3.0.1这种架构的优势数据库可单独备份维护支持后续扩展为集群部署MySQL性能参数可独立优化4. 初始化配置实战访问http://服务器IP进入安装向导第一步语言选择中文翻译在3.0版本后已比较完善如果发现翻译缺失可以手动导入语言包到/var/www/html/dictionaries第二步数据库配置内置数据库方案直接点击下一步外置数据库需填写主机名mysql容器链接的别名端口3306数据库名itop账号密码与启动参数一致第三步管理员账户建议不要使用默认的admin账号开启双因素认证更安全关键配置项工单编号前缀建议按年份-部门-类型设置如2023-OPS-INC默认时区务必选择Asia/Shanghai邮件SMTP配置建议使用阿里云企业邮箱5. 运维管理技巧5.1 数据备份方案使用crontab设置每日自动备份0 2 * * * docker exec itop_mysql mysqldump -uitop -pItopPassword itop | gzip /backup/itop_$(date \%Y\%m\%d).sql.gz同时备份配置文件tar czvf /backup/itop_conf_$(date \%Y\%m\%d).tar.gz /var/lib/docker/volumes/itop_data/_data5.2 性能优化建议修改php.ini配置opcache.enable1 opcache.memory_consumption128 realpath_cache_size4096K调整MySQL容器启动参数--innodb_buffer_pool_size1G --innodb_log_file_size256M5.3 常见故障排查问题1登录页面卡顿docker stats itop_prod # 查看资源占用 docker exec itop_prod top # 检查容器内进程问题2工单无法保存docker logs itop_prod | grep -i error df -h # 检查磁盘空间问题3邮件通知失效测试SMTP连接docker exec -it itop_prod bash telnet smtp.mxhichina.com 256. 高级部署方案6.1 使用Docker Compose编排创建docker-compose.ymlversion: 3 services: db: image: mysql:5.7 volumes: - mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: itop MYSQL_USER: itop MYSQL_PASSWORD: itoppass command: - --character-set-serverutf8mb4 - --collation-serverutf8mb4_unicode_ci app: image: vbkunin/itop:3.0.1 depends_on: - db ports: - 80:80 environment: MYSQL_HOST: db MYSQL_USER: itop MYSQL_PASSWORD: itoppass MYSQL_DATABASE: itop volumes: - itop_data:/var/www/html volumes: mysql_data: itop_data:启动命令docker-compose up -d6.2 集群化部署方案对于大型企业建议数据库使用云服务商的RDSiTop容器配合Nginx实现负载均衡使用Redis缓存会话数据Nginx配置示例upstream itop { server itop1:80; server itop2:80; } server { listen 80; location / { proxy_pass http://itop; proxy_set_header Host $host; } }7. 安全加固措施容器层面docker update --restarton-failure:3 itop_prod docker run --security-opt no-new-privileges ...应用层面定期修改/var/www/html/conf/production/config-itop.php中的加密盐值禁用默认的setup安装目录docker exec itop_prod mv /var/www/html/setup /var/www/html/setup.bak网络层面使用云安全组限制只允许办公网络IP访问为管理后台配置单独的访问端口我在客户现场部署时曾遇到通过工单附件上传webshell的攻击案例。后来通过以下方法加固在Nginx层限制上传文件类型定期扫描/var/www/html目录的文件哈希值使用Docker的只读挂载选项