openDCIM部署指南:Linux下轻量级数据中心资产管理系统

发布时间:2026/10/18 19:37:00
openDCIM部署指南:Linux下轻量级数据中心资产管理系统
简介openDCIM是一款基于PHP开发的开源数据中心基础设施管理DCIM应用程序遵循GPL v3协议面向IT运维工程师、数据中心管理员及DevOps实践者用于统一纳管机柜、设备、电源、网络连接等物理资源适用于从单机房到多站点的中小型至中大型数据中心场景。资源包为ZIP格式大小31.29MB虽文件总数未提供但根据项目特性可推知包含核心PHP源码、SQL数据库初始化脚本、Web前端模板及配置文档等支撑完整部署与二次定制。已有567人学习下载体现其在开源DCIM轻量化方案中的实用关注度。用户可直接获取可运行的全功能代码基线含设备生命周期管理、机柜拓扑可视化逻辑、资产关联关系建模及权限分级控制模块便于快速搭建本地DCIM平台、理解典型数据中心元数据建模方法并基于源码开展定制化开发或教学演示。1. openDCIM 是什么一个能跑在普通 Linux 服务器上的 PHP 数据中心资产台账系统不是监控平台也不依赖虚拟化 API你手头有一批机柜、交换机、服务器、PDU、UPS还有几十张 Excel 表格记录着谁在哪个 U 位、网线连到哪、电源从哪路来、保修还剩几个月——但每次巡检都要手动比对、每次扩容都要翻三份文档、每次审计前通宵补录数据。openDCIM 就是为这种场景生的它不采集 SNMP 流量、不画拓扑图、不告警 CPU 过热但它能把「192.168.10.5 这台 Dell R750 的第 3 块硬盘已过保当前插在机柜 A03-12U上联至 SW-CORE-02 的 Gi1/0/23 口供电来自 PDU-A03-L1」这条信息用结构化方式存进 MySQL并通过 Web 界面点选完成录入、关联、导出和权限隔离。它用纯 PHP无框架 Bootstrap 3 jQuery 写成部署门槛低到只要一台装了 Apache/Nginx PHP 7.4 MySQL 5.7 的物理机或虚拟机就能跑起来它不开源监控能力但开源了完整的资产生命周期字段定义、机柜三维视图渲染逻辑、机房平面图标注接口、以及所有数据库表结构与关系约束。适合中小规模数据中心、托管机房、高校实验室机房、企业 IT 资产管理员——尤其适合那些被 Zabbix、Nagios、NetBox 吓退又觉得 Excel 已经崩坏到无法信任的实战派。2. 部署前必须搞清的三件事PHP 版本陷阱、MySQL 字符集硬要求、Apache 模块缺一不可openDCIM 不是 Laravel 或 Symfony 项目它没有composer install自动拉依赖也没有.env文件抽象配置。它的部署逻辑非常“古典”所有 PHP 文件直接扔进 Web 根目录靠config.php手动改数据库连接靠install.php页面触发建表。这意味着每一步都得亲手核对底层环境是否真正就绪。下面这三件事我见过太多人卡在第 2 步反复重装系统——不是代码问题是环境没对齐。2.1 PHP 版本与扩展7.4 是甜点8.0 会报错gd 和 mbstring 必须启用openDCIM 官方声明支持 PHP 7.2但实测中 PHP 8.0 会因mysql_*函数彻底移除而直接白屏它没做 PDO 抽象层。最稳的是 PHP 7.4.x如 7.4.33且必须启用以下扩展# Ubuntu/Debian 下检查并启用 sudo apt install php7.4-gd php7.4-mbstring php7.4-xml php7.4-curl php7.4-zip sudo phpenmod -v 7.4 gd mbstring xml curl zip提示phpinfo()页面里必须看到gd用于生成机柜 U 位图、mbstring处理中文机房名/备注时避免乱码、xml导出 XML 报表用。少一个安装页面就会卡在“Checking PHP extensions…”不动。2.2 MySQL 字符集utf8mb4 是唯一选项collation 必须为 utf8mb4_unicode_ciopenDCIM 的device表里有notes字段location表里有name字段实际使用中常填入含 emoji 的备注如“⚠️ 电源线老化待换”或带中文括号的机柜名如“A03-核心区主”。若 MySQL 初始化时用的是utf8实际是 utf8mb3插入时会静默截断后续搜索失效。必须在创建数据库时强制指定CREATE DATABASE opendcim CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;并在my.cnf中全局加固否则ALTER TABLE也救不回[client] default-character-set utf8mb4 [mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci init_connectSET NAMES utf8mb4 skip-character-set-client-handshake TRUE重启 MySQL 后执行SHOW VARIABLES LIKE character_set%;确保character_set_server和collation_server均为utf8mb4_unicode_ci。2.3 Apache 配置mod_rewrite 必须开启且 .htaccess 规则不能被覆盖openDCIM 的 URL 路由如/device/123/edit依赖 Apache 的mod_rewrite模块和根目录下的.htaccess文件。Nginx 用户需手动转换规则后文详述但 Apache 用户常踩的坑是虚拟主机配置里写了AllowOverride None导致.htaccess被忽略所有非/index.php的路径返回 404。检查并修正 Apache 虚拟主机配置以/var/www/opendcim为例Directory /var/www/opendcim Options Indexes FollowSymLinks AllowOverride All # 关键必须是 All不是 FileInfo 或 None Require all granted /Directory然后确认模块已加载sudo a2enmod rewrite sudo systemctl restart apache2验证方法访问http://your-ip/opendcim/test.php手动建个测试文件内容为?php echo $_SERVER[REQUEST_URI]; ?再访问http://your-ip/opendcim/device/123若输出/opendcim/device/123则 rewrite 生效若输出/opendcim/index.php则失败。3. 从零部署全流程下载、解压、建库、改配置、跑安装向导含 Nginx 替代方案部署不是复制粘贴命令而是理解每个动作在改什么。下面步骤基于 Ubuntu 22.04 Apache 2.4 MySQL 8.0 PHP 7.4 实测所有路径、文件名、参数均来自官方 release 包v7.3.1未做任何魔改。3.1 下载与解压认准 GitHub Release 页面别用 git clone 主干openDCIM 的main分支长期处于开发状态存在未合入的 SQL 变更和未修复的 XSS 漏洞。生产环境务必使用 GitHub Releases 页面 的稳定版 ZIP 包。截至 2024 年最新稳定版是v7.3.1发布于 2023-09-15大小约 12.4 MB包含完整www目录结构。# 进入 Web 根目录假设为 /var/www cd /var/www # 下载并解压注意解压后得到的是 opendcim-7.3.1/www/需把 www 里的内容提到根 sudo wget https://github.com/opendcim/opendcim/archive/refs/tags/v7.3.1.zip sudo unzip v7.3.1.zip sudo mv opendcim-7.3.1/www/* . sudo rm -rf opendcim-7.3.1 v7.3.1.zip # 设置权限Web 服务器需写入 config.php、logs/、uploads/ sudo chown -R www-data:www-data /var/www/opendcim sudo chmod -R 755 /var/www/opendcim sudo chmod 644 /var/www/opendcim/config.php sudo chmod 755 /var/www/opendcim/logs /var/www/opendcim/uploads逻辑说明config.php默认是只读的安装向导会尝试写入数据库配置logs/存错误日志如 SQL 失败堆栈uploads/存用户上传的机房平面图 PNG/JPEG。权限不对安装页会提示 “Cannot write to config.php”。3.2 创建数据库与用户最小权限原则拒绝 root 直连不要用rootlocalhost连接 openDCIM。应新建专用用户仅授予该库的SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP权限不需要GRANT OPTION或FILE。-- 登录 MySQL用 root mysql -u root -p -- 执行建库与用户 CREATE DATABASE opendcim CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER dcimuserlocalhost IDENTIFIED BY StrongPassw0rd!; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON opendcim.* TO dcimuserlocalhost; FLUSH PRIVILEGES; EXIT;参数说明密码必须含大小写字母数字符号openDCIM 安装页校验强度dcimuserlocalhost限定只能本机连接比%安全FLUSH PRIVILEGES是必须步骤否则权限不生效。3.3 修改 config.php填四行关键配置其他保持默认/var/www/opendcim/config.php是唯一需要手动编辑的配置文件。打开后找到以下四行约第 25–30 行按你的环境填写$DBHost localhost; // MySQL 服务器地址本地即 localhost $DBName opendcim; // 上一步创建的数据库名 $DBUser dcimuser; // 上一步创建的用户名 $DBPassword StrongPassw0rd!; // 对应密码保存后用php -l /var/www/opendcim/config.php检查语法避免多打空格或分号。若报错Apache 日志/var/log/apache2/error.log会记录PHP Parse error此时 Web 页面将空白。3.4 运行安装向导访问 /install.php按提示点三次“Next”浏览器访问http://your-server-ip/opendcim/install.php。页面会自动检测PHP 版本与扩展绿色对勾MySQL 连接输入刚建的dcimuser密码点 Test Connection目录可写性config.php,logs/,uploads/全部通过后点 “Next” 进入建表页。它会执行install.sql位于/var/www/opendcim/sql/中的 47 张表创建语句含外键约束。耗时约 3–8 秒完成后点 “Next” 进入初始用户设置页Admin Username建议用admin-dcim避免admin被爆破Admin Password必须满足 8 位大小写数字前端 JS 校验Email用于密码找回可填adminexample.com提交后页面显示 “Installation Complete”并给出登录链接/index.php。此时可删掉install.php安全起见sudo rm /var/www/opendcim/install.php3.5 Nginx 用户必看替代 Apache 的 rewrite 规则亲测可用若你用 Nginx需在 server 块中添加以下 location 规则放在root /var/www/opendcim;同级location / { try_files $uri $uri/ /index.php?$query_string; } # 阻止敏感文件被直接访问 location ~ ^/(config\.php|install\.sql|sql/|logs/|uploads/) { deny all; }然后重启 Nginxsudo systemctl restart nginx。验证方法同 Apache访问/device/123应正常显示设备编辑页而非 404。4. 首次登录后的五项必做配置语言、时区、机房、机柜、默认权限组安装完成只是起点。openDCIM 的强大在于可定制性但默认配置极简——不设时区会把所有时间戳记成 UTC不建机房会导致无法添加设备。以下是登录admin-dcim后必须立即做的五件事顺序不能乱。4.1 设置系统语言与时区中文界面 东八区时间戳登录后右上角点击用户名 → “My Account” → “Language” 下拉选 “Chinese (Simplified)” → Save。接着点左侧菜单 “Admin” → “System Settings” → 找到 “Time Zone” → 选 “Asia/Shanghai” → Save。为什么重要device表的last_update字段、log表的timestamp字段均依赖此设置。若为 UTC所有操作时间比本地快 8 小时审计时会混乱。4.2 创建机房Room定义物理空间边界“Admin” → “Rooms” → “Add New Room”Room Name填 “IDC-A01”机房编号唯一Description填 “主数据中心A 区一层”Floor填 “1”Map Image可上传一张机房平面图 PNG尺寸建议 1200×800太大拖慢页面Status选 “Active”保存后该机房会出现在左侧菜单 “Facilities” → “Rooms” 列表中。注意所有机柜Rack必须归属某个 Room否则无法创建。4.3 创建机柜Rack绑定物理载体定义 U 数与深度“Facilities” → “Racks” → “Add New Rack”Rack Name填 “A03-12U”建议含机房前缀便于搜索Room下拉选择刚建的 “IDC-A01”Height填 “42”标准机柜 U 数Width填 “19”英寸Depth填 “1100”毫米影响三维视图比例Status选 “Active”保存后点该机柜名称进入详情页顶部会显示 “U 1–42” 的可视化 U 位图灰色为空闲蓝色为占用。这是 openDCIM 最直观的价值点——不用开 CAD 就能看满配状态。4.4 创建设备类型Device Type标准化硬件型号库“Admin” → “Device Types” → “Add New Device Type”Manufacturer填 “Dell”Model填 “PowerEdge R750”Height填 “2”U 数Power Draw填 “500”瓦Description填 “双路 Intel Xeon Silver128GB RAM4×1TB NVMe”避坑点Height必须是整数1/2/4不能填 “1.5”Power Draw单位是瓦不是 kW。填错会导致机柜总功耗计算失真。4.5 配置默认权限组Permission Group最小权限交付“Admin” → “Permission Groups” → “Add New Group”Group Name填 “IT-Asset-Viewers”Description填 “仅查看设备与机柜不可编辑”勾选 “View Devices”, “View Racks”, “View Rooms”取消勾选所有 “Edit” 和 “Delete”点 “Save”然后点 “Users” → 找到需授权的用户 → 编辑 → “Permission Group” 下拉选此项为什么必须做openDCIM 默认只有 admin 用户新用户无任何权限。不设 Viewer 组同事登录后看到的是空首页以为系统坏了。5. 避坑指南五个血泪经验总结每一条都来自真实翻车现场部署和初期使用阶段最容易在看似 trivial 的地方卡住。这些坑我都在某高校实验室机房、某托管服务商客户现场、自己搭的测试环境里反复踩过。列在这里不是为了吓人是让你省下 3 小时 debug 时间。5.1 现象安装页卡在 “Checking database connection”Test Connection 按钮无响应原因MySQL 的bind-address默认为127.0.0.1但 openDCIM 的config.php里$DBHost若填localhostPHP 会尝试用 Unix socket 连接而某些 MySQL 8.0 安装默认禁用 socket或 socket 路径不对如/var/run/mysqld/mysqld.sock不存在。解决将$DBHost改为127.0.0.1强制走 TCP并确认 MySQL 的bind-address 127.0.0.1非::1或0.0.0.0。重启 MySQL 后重试。5.2 现象登录后首页空白Chrome 控制台报Uncaught ReferenceError: $ is not defined原因jQuery 未加载。openDCIM 的index.php末尾有script srcjs/jquery.min.js但该文件在www/js/目录下。若解压时没把www/里的内容提到根目录如误将整个opendcim-7.3.1/目录作为 Web 根路径就变成/opendcim-7.3.1/js/jquery.min.js404。解决检查浏览器 Network 标签页看jquery.min.js是否 404若是确认 Web 根目录结构为/var/www/opendcim/js/jquery.min.js而非嵌套多层。5.3 现象添加设备时“Rack” 下拉框为空无法选择机柜原因机柜Rack未关联到机房Room。openDCIM 的 UI 逻辑是先选 Room再动态加载该 Room 下的 Racks。若 Rack 的room_id字段为 0 或 NULL它就不会出现在任何 Room 的下拉列表中。解决进 phpMyAdmin查rack表确认room_id列值等于你创建的 Room 的id如 Room ID 是 1则room_id必须是 1若为 0执行UPDATE rack SET room_id 1 WHERE id X;X 为机柜 ID。5.4 现象上传机房平面图后Rack 详情页的 “Map View” 不显示图片只显示 “No map image defined”原因config.php中$mapPath变量未修改。默认值是images/maps/但 openDCIM 的images/目录在 Web 根下而上传的图片实际存到uploads/目录如/var/www/opendcim/uploads/room_1.png。系统找不到路径。解决打开config.php找到$mapPath images/maps/;改为$mapPath uploads/;。然后重新上传图片旧图不会自动迁移。5.5 现象导出 CSV 报表时中文字段如设备备注显示为乱码如 “某机柜”原因openDCIM 的导出脚本export.php输出时未声明 UTF-8 BOM 和 Content-Type。Excel 默认用 ANSI 解析 CSV遇到 UTF-8 字节流就乱码。解决编辑/var/www/opendcim/export.php在header(Content-Type: text/csv);下一行添加header(Content-Disposition: attachment; filenameopendcim-export- . date(Y-m-d) . .csv); echo \xEF\xBB\xBF; // UTF-8 BOM保存后重试导出。Excel 打开即正确显示中文。6. 进阶技巧用 SQL 直接批量导入设备、自定义报表字段、让机柜图显示品牌 LogoopenDCIM 的 Web 界面适合单台设备录入但面对 200 台服务器、50 台交换机手动点 200 次 “Add Device” 是反人类的。下面三个技巧是我给某跨平台系统做 DCIM 对接时沉淀下来的硬核方法不依赖插件纯原生能力。6.1 批量导入设备绕过 Web 表单用 INSERT INTO 直写 device 表附字段映射表openDCIM 的device表有 32 个字段但日常只需填 8 个核心字段即可入库并显示在首页。用INSERT INTO批量插入比 Web 表单快 100 倍且可写入 Web 界面不暴露的字段如purchase_date,warranty_expires。INSERT INTO device ( name, device_type_id, rack_id, height, top_unit, status, serial_no, notes, purchase_date, warranty_expires, last_update ) VALUES (SRV-APP-01, 5, 12, 2, 20, in-use, ABC123456, 生产应用服务器, 2023-03-15, 2025-03-14, NOW()), (SW-CORE-01, 8, 3, 1, 10, in-use, XYZ789012, 核心交换机万兆上联, 2022-08-22, 2026-08-21, NOW());字段说明表关键字段含义与取值来源字段名含义如何获取示例值name设备名称自定义建议含业务前缀SRV-APP-01device_type_id设备类型 ID查device_type表的id字段5对应 Dell R750rack_id机柜 ID查rack表的id字段12对应 A03-12UheightU 高度整数1/2/42top_unit顶部 U 位从机柜底部算起如放 2U 设备在 20–21U则填2020status状态必须是预设值in-use,spare,retired,staging,offlinein-useserial_no序列号设备背面标签ABC123456purchase_date采购日期YYYY-MM-DD格式2023-03-15执行方式用 phpMyAdmin 或mysql -u dcimuser -p opendcim batch_insert.sql批量执行。插入后Web 界面刷新即可见。6.2 自定义报表字段修改 report_device.php增加“保修剩余月数”列openDCIM 自带的设备报表report_device.php只显示基础字段。但运维最关心“这台设备还能用多久”。我们可以在报表 SQL 中加一列计算字段编辑/var/www/opendcim/report_device.php找到$sql SELECT d.name, ...开头的 SQL 语句在SELECT子句末尾添加, CASE WHEN d.warranty_expires IS NOT NULL AND d.warranty_expires CURDATE() THEN FLOOR(DATEDIFF(d.warranty_expires, CURDATE()) / 30) ELSE 0 END AS warranty_months并在 HTML 表头th中加th保修剩余月数/th在循环输出行中加td?php echo $row[warranty_months]; ?/td。效果报表导出 CSV 时该列自动计算并显示整数月数如14无需人工查日历。6.3 让机柜三维图显示品牌 Logo替换 rackview.php 中的 SVG 模板openDCIM 的机柜 U 位图rackview.php?id12是用 PHP 动态生成 SVG。默认只画矩形和文字但我们可以注入image标签显示 Logo。编辑/var/www/opendcim/rackview.php找到echo svg xmlnshttp://www.w3.org/2000/svg ...开头的行在/svg之前插入// 在 U 位图顶部居中加 Dell Logo假设 logo.png 放在 images/logos/ 目录 echo image hrefimages/logos/dell.png x50% y10 width80 height30 transformtranslate(-40,0) /;注意x50%需配合transformtranslate(-40,0)实现水平居中-40 是宽度一半y10控制垂直位置图片需提前放入images/logos/并设好权限chmod 644。从那以后我每次给客户部署 openDCIM都会在config.php里加一行注释// Last updated: 2024-06-15 —— 为 Dell R750 添加 warranty_months 报表列并把batch_insert.sql和rackview-logo.patch一起打包进交付物。不是为了炫技是让半年后的自己或接手的同事一眼看懂这个实例改过什么、为什么这么改。希望帮到你。本文还有配套的精品资源点击获取