# 云睿资产管理系统 **维护团队**:云睿资产开源社区 **版本**:2.1.1 | **更新**:2026-06-22 面向数据中心(IDC)运维与资产管理场景,提供机房、机柜、设备全生命周期管理,支持 3D 可视化、工单流转、耗材库存、资产盘点与 RBAC 权限控制。 | 层级 | 技术选型 | |------|----------| | 后端 | Node.js 20 + Express + Sequelize | | 前端 | React 18 + Vite + Ant Design + Three.js | | 数据库 | SQLite(开发默认)/ MySQL 8.0(生产推荐) | | 部署 | Docker Compose / PM2 + Nginx / 本地开发 | --- ## 目录 - [快速开始](#快速开始) - [操作手册](#操作手册) - [1. 系统概述](#1-系统概述) - [2. 环境要求](#2-环境要求) - [3. 安装与启动](#3-安装与启动) - [4. 登录与账号](#4-登录与账号) - [5. 界面与模块导航](#5-界面与模块导航) - [6. 业务模块操作指南](#6-业务模块操作指南) - [7. 典型业务流程](#7-典型业务流程) - [8. 系统管理](#8-系统管理) - [9. 日常运维](#9-日常运维) - [10. 常见问题与排查](#10-常见问题与排查) - [11. 附录](#11-附录) - [贡献指南](#贡献指南) - [许可证](#许可证) --- ## 快速开始 ### 方式一:Docker 全栈部署(推荐) 适用于已安装 Docker 的服务器,一键启动前端、后端与 MySQL。 ```bash # 克隆项目 git clone https://code.xinmi.cloud/yunrui_asset.git cd yunrui_asset # 配置 JWT 密钥(生产环境必填) # PowerShell 生成示例: # node -e "console.log(require('crypto').randomBytes(64).toString('hex'))" set JWT_SECRET=你的强随机密钥 # 启动全部服务(构建镜像) docker compose -f docker-compose.full.yml up -d --build # 写入示例数据(可选,含演示账号与机房/设备/工单) docker exec yunrui_asset-backend node scripts/seed-example-data.js ``` | 服务 | 默认地址 | 说明 | |------|----------|------| | 前端 | http://localhost:12000 | Nginx 托管 SPA,代理 `/api` | | 后端 API | http://localhost:12001 | 容器内端口 8000 | | API 文档 | http://localhost:12000/api-docs | Swagger 交互文档 | | 健康检查 | http://localhost:12001/health | 后端存活探测 | | MySQL | localhost:12006 | 库名 `yunrui_management` | | 角色 | 用户名 | 密码 | 获取方式 | |------|--------|------|----------| | 管理员(演示) | `admin` | `admin123` | 执行 `seed-example-data.js` 后可用 | | 管理员(全新) | 自行注册 | 自行设定 | 首个注册账号自动成为管理员 | > 生产环境请立即修改默认密码与 MySQL 根密码(`MYSQL_ROOT_PASSWORD`)。 **Docker 预构建镜像**(`docker-compose.prod.yml`,从仓库拉取,无需本地 build): ``` ghcr.io/xinmi/yunrui_asset-backend:latest ghcr.io/xinmi/yunrui_asset-frontend:latest ``` ### 方式二:本地开发 ```bash git clone https://code.xinmi.cloud/yunrui_asset.git cd yunrui_asset npm run install:all cp backend/.env.example backend/.env cd backend && node scripts/init-database.js && cd .. npm start ``` | 服务 | 地址 | |------|------| | 前端 | http://localhost:3000 | | 后端 API | http://localhost:8000 | | API 文档 | http://localhost:8000/api-docs | ### 项目结构 ``` yunrui_asset/ ├── frontend/ # React 前端(Vite) ├── backend/ # Express 后端(models / routes / scripts) ├── deploy/ # PM2、Nginx 部署配置 ├── docs/ # 补充文档与截图目录 ├── docker-compose.full.yml # 全栈 Docker(推荐) ├── docker-compose.prod.yml # 预构建镜像生产部署 ├── install.js # 一键安装脚本 └── README.md # 本操作手册(权威文档) ``` **源码地址**:https://code.xinmi.cloud/yunrui_asset --- ## 操作手册 ### 1. 系统概述 #### 1.1 产品简介 云睿资产管理系统(界面品牌名:**云睿资产**)用于统一管理多机房、多机柜下的服务器、网络、存储等设备,覆盖设备上架、端口接线、故障工单、耗材出入库、资产盘点、数据备份与操作审计等场景,并通过 3D 机柜视图与机房平面图辅助空间规划。 #### 1.2 核心能力 | 模块 | 能力说明 | |------|----------| | 数据看板 | 设备/机柜/功率统计与趋势图表 | | 机房管理 | 多机房、平面图编辑、机柜网格布局 | | 机柜管理 | 机柜 CRUD、批量导入导出、3D 可视化 | | 设备管理 | 全生命周期、自定义字段、批量导入导出 | | 端口与接线 | 设备端口、网卡绑定、线缆连接追踪 | | 工单管理 | 故障报修、分类、统计、全流程状态 | | 耗材管理 | 库存、SN 追踪、分类、操作日志归档 | | 资产盘点 | 盘点计划、任务执行、盘盈设备审核 | | 空闲设备 | 设备转入空闲、重新激活上架 | | 系统管理 | 用户/角色 RBAC、系统设置、备份、操作日志 | | API 文档 | Swagger 在线调试 | #### 1.3 技术架构 ``` ┌─────────────┐ /api、/uploads ┌─────────────┐ │ 浏览器 │ ◄──────────────────────► │ Nginx/前端 │ │ React SPA │ │ (端口 80) │ └─────────────┘ └──────┬──────┘ │ 反向代理 ┌──────▼──────┐ │ Express API │ │ (端口 8000) │ └──────┬──────┘ │ ┌─────────────────┼─────────────────┐ │ │ │ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │ MySQL 8 │ │ SQLite │ │ uploads/ │ │ (生产推荐) │ │ (开发默认) │ │ logs/ 备份 │ └─────────────┘ └─────────────┘ └─────────────┘ ``` --- ### 2. 环境要求 | 项 | 要求 | |----|------| | 操作系统 | Windows 10+、macOS 12+、Linux | | Node.js | ≥ 20.10.0(见 `.nvmrc`) | | npm | ≥ 6.0.0(推荐 10.x) | | Docker | 20.10+(Docker 部署时) | | Docker Compose | v2+ | | 内存 | 最低 4 GB,推荐 8 GB+ | | 磁盘 | 最低 2 GB,推荐 10 GB+ | **生产环境额外要求**: | 项 | 要求 | |----|------| | 数据库 | MySQL 8.0+ | | Web 服务器 | Nginx 1.18+(非 Docker 部署时) | | 进程管理 | PM2 5.x+(非 Docker 部署时) | | JWT 密钥 | 生产环境必须在 `.env` 或环境变量中设置 `JWT_SECRET` | --- ### 3. 安装与启动 #### 3.1 Docker 全栈(`docker-compose.full.yml`) 三个容器:MySQL、Backend、Frontend(Nginx + 静态资源)。 ```bash # 启动 docker compose -f docker-compose.full.yml up -d --build # 查看状态 docker compose -f docker-compose.full.yml ps # 查看后端日志 docker logs -f yunrui_asset-backend # 停止 docker compose -f docker-compose.full.yml down ``` **常用环境变量**(可在项目根目录 `.env` 或命令行覆盖): | 变量 | 默认值 | 说明 | |------|--------|------| | `FRONTEND_PORT` | `12000` | 前端映射端口 | | `BACKEND_PORT` | `12001` | 后端映射端口 | | `MYSQL_PORT` | `12006` | MySQL 映射端口 | | `MYSQL_DATABASE` | `yunrui_management` | 数据库名 | | `MYSQL_ROOT_PASSWORD` | `xinmi_password` | MySQL root 密码 | | `JWT_SECRET` | (无默认) | **生产必填** | 数据持久化:MySQL 数据卷 `yunrui_asset-mysql-data`;上传文件映射 `backend/uploads`;日志映射 `backend/logs`;备份映射 `backend/backups`。 #### 3.2 Docker 预构建镜像(`docker-compose.prod.yml`) 适用于 CI 已构建好的镜像,无需本地编译: ```bash cp .env.example .env # 编辑 .env 设置 BACKEND_IMAGE、FRONTEND_IMAGE、backend/.env 数据库等 docker compose -f docker-compose.prod.yml up -d ``` 前端默认映射 **80** 端口;后端通过 Nginx 内部网络访问,不直接暴露。 #### 3.3 Linux 一键安装 ```bash git clone https://code.xinmi.cloud/yunrui_asset.git cd yunrui_asset ./install.sh # 或远程一键:curl -fsSL https://code.xinmi.cloud/yunrui_asset/raw/branch/main/install.sh | bash ``` `install.sh` 自动检测发行版、安装 Node.js 20.x,并调用 `install.js` 完成依赖安装、数据库初始化与 Nginx/PM2 配置。 #### 3.4 Windows / 手动安装 ```powershell git clone https://code.xinmi.cloud/yunrui_asset.git cd yunrui_asset node install.js # 或:npm run deploy ``` 手动步骤: ```bash npm run install:all cp backend/.env.example backend/.env # 编辑 backend/.env:JWT_SECRET、DB_TYPE 等 cd backend && node scripts/init-database.js && cd .. npm start ``` #### 3.5 安装脚本常用参数 ```bash # 非交互安装,使用 MySQL node install.js -y --db=mysql # 指定后端端口 node install.js -y --port=8000 # 跳过前端构建或 Nginx 配置 node install.js -y --skip-build --skip-nginx ``` 更新与卸载: ```bash node update.js # 拉取代码、备份、迁移、重启 node uninstall.js # 交互式卸载 ``` --- ### 4. 登录与账号 #### 4.1 登录方式 1. 浏览器访问前端地址(Docker 默认 `http://localhost:12000`,本地开发 `http://localhost:3000`)。 2. 使用账号密码登录;未登录时自动跳转 `/login`。 3. 登录后 JWT Token 保存在浏览器,空闲超时后自动退出(时长可在系统设置中配置)。 ![image-20260623102522626](images/image-20260623102522626.png) #### 4.2 账号与角色 | 场景 | 用户名 | 密码 | 说明 | |------|--------|------|------| | 示例数据 | `admin` | `admin123` | 执行种子脚本后可用 | | 全新部署 | 自行注册 | 自行设定 | **第一个**注册账号自动获得管理员角色 | | 后续用户 | 自行注册 | 自行设定 | 默认待管理员审核(`pending` 状态) | **预置角色**(种子脚本或「用户管理」中初始化): | 角色编码 | 角色名 | 权限范围 | |----------|--------|----------| | `admin` | 管理员 | 全部权限(`*`) | | `operator` | 运维人员 | 设备/机柜/机房/耗材读写 | | `viewer` | 只读用户 | 设备/机柜/机房/耗材只读 | > 生产环境部署后请立即修改 `admin123`,并为用户分配最小必要角色。 #### 4.3 写入示例数据 ```bash # Docker 环境 docker exec yunrui_asset-backend node scripts/seed-example-data.js # 本地开发(backend 目录,需配置数据库连接) cd backend && npm run seed ``` 示例数据包含:2 个机房、4 个机柜、7 台设备、3 个业务、1 个库房、3 种耗材、3 条工单。脚本**幂等**,重复执行不会重复插入;强制重写可设 `SEED_FORCE=1`。 --- ### 5. 界面与模块导航 登录后左侧为功能菜单,顶部右侧显示当前用户与退出按钮。 | 一级菜单 | 子页面 | 路由 | |----------|--------|------| | 仪表盘 | 数据看板 | `/` | | 机房管理 | 机房管理 | `/rooms` | | | 机柜管理 | `/racks` | | | 3D 机柜可视化 | `/visualization-3d` | | | 机房平面图 | `/floor-plan` | | 资产管理 | 设备管理 | `/devices` | | | 空闲设备 | `/idle-devices` | | | 字段管理 | `/fields` | | | 端口管理 | `/ports` | | | 接线管理 | `/cables` | | 耗材管理 | 耗材统计 | `/consumables-stats` | | | 耗材列表 | `/consumables` | | | 分类管理 | `/consumables-categories` | | | 操作日志 | `/consumables-logs` | | 工单管理 | 工单列表 | `/tickets` | | | 故障分类 | `/ticket-categories` | | | 统计报表 | `/ticket-statistics` | | 资产盘点 | 盘点计划 | `/inventory` | | | 盘盈设备 | `/pending-devices` | | 系统管理 | 用户管理 | `/users` | | | 系统设置 | `/settings` | | | 数据备份 | `/backup` | | | 操作日志 | `/operation-logs` | | | 关于系统 | `/about` | ![image-20260623102535356](images/image-20260623102535356.png) --- ### 6. 业务模块操作指南 #### 6.1 数据看板 **路径**:`/` **功能概述**:汇总机房、机柜、设备数量与状态分布,展示功率与趋势图表。 | 元素 | 说明 | |------|------| | 统计卡片 | 设备总数、在线/离线、机柜利用率等 | | 图表 | 按类型、状态、机房的分布与趋势 | | 刷新 | 进入页面自动加载,可手动刷新 | ![image-20260623102540102](images/image-20260623102540102.png) #### 6.2 机房与机柜管理 **路径**:`/rooms`、`/racks` **功能概述**:维护机房基础信息、机柜规格与在机房中的行列位置;支持批量导入导出。 | 元素 | 说明 | |------|------| | 机房 | 名称、位置、面积、容量、网格行列 | | 机柜 | 名称、U 高、最大功率、所属机房、行列坐标 | | 平面图 | `/floor-plan` 拖拽编辑机柜布局 | ![image-20260623102549318](images/image-20260623102549318.png) #### 6.3 3D 机柜可视化 **路径**:`/visualization-3d` **功能概述**:Three.js 三维展示机柜内设备 U 位占用,支持旋转、缩放与设备详情查看。需浏览器支持 WebGL。 ![image-20260623102557409](images/image-20260623102557409.png) #### 6.4 设备管理 **路径**:`/devices` **功能概述**:设备全生命周期管理,支持上架到机柜或入库到库房,自定义扩展字段。 | 元素 | 说明 | |------|------| | 基本信息 | 名称、型号、序列号、类型、IP、功耗 | | 位置 | 机柜 + U 位,或库房 | | 状态 | online / offline / maintenance 等 | | 导入导出 | Excel/CSV 批量操作 | | 业务关联 | 可绑定一个或多个业务系统 | ![image-20260623102610309](images/image-20260623102610309.png) #### 6.5 端口与接线管理 **路径**:`/ports`、`/cables` **功能概述**:配置设备物理/逻辑端口,记录线缆两端连接关系,便于故障追踪与拓扑分析。 | 元素 | 说明 | |------|------| | 端口 | 端口号、类型、速率、绑定网卡 | | 线缆 | 源/目标设备与端口、线缆类型与长度 | #### 6.6 工单管理 **路径**:`/tickets` **功能概述**:故障报修与维护工单从创建到关闭的全流程管理。 | 元素 | 说明 | |------|------| | 状态 | pending → in_progress → completed / closed | | 优先级 | critical / high / medium / low | | 故障分类 | 系统/硬件/网络等(可在故障分类页维护) | | 关联设备 | 可选绑定具体设备 | ![image-20260623102620982](images/image-20260623102620982.png) #### 6.7 耗材管理 **路径**:`/consumables`、`/consumables-stats` **功能概述**:耗材分类、库存数量、SN 序列号追踪、出入库日志与归档。 | 元素 | 说明 | |------|------| | 库存预警 | 当前库存低于最小库存时提示 | | 操作日志 | 记录每次入库/出库/调整 | | 分类 | 线缆、光模块、硬盘等自定义分类 | #### 6.8 资产盘点 **路径**:`/inventory`、`/pending-devices` **功能概述**:创建全面/局部/抽样盘点计划,执行盘点任务,审核盘盈设备。 | 元素 | 说明 | |------|------| | 盘点计划 | 设定范围、负责人、截止时间 | | 任务执行 | `/inventory/execution` 逐项核对 | | 盘盈设备 | 待审核通过后纳入资产 | #### 6.9 空闲设备 **路径**:`/idle-devices` **功能概述**:将机柜中不再使用的设备标记为空闲并释放 U 位,或从空闲状态重新激活上架。 --- ### 7. 典型业务流程 #### 7.1 新设备上架 ``` 采购入库(库房) → 设备管理创建/导入 → 分配到机柜 U 位 → 配置端口与线缆 → 绑定业务 ``` 1. 在「设备管理」中新增设备,`sourceType` 为库房或直接在机柜创建。 2. 选择目标机柜与起始 U 位,系统自动校验 U 位冲突。 3. 在「端口管理」「接线管理」中完善网络连接。 4. 在设备详情中关联业务系统。 #### 7.2 故障工单处理 ``` 发现故障 → 创建工单(选设备/分类/优先级) → 指派处理人 → 处理并填写方案 → 完成/关闭 ``` 1. 「工单列表」点击新建,填写标题、故障分类与描述。 2. 管理员或运维将状态改为「处理中」并指派处理人。 3. 处理完成后填写解决方案,状态改为「已完成」。 #### 7.3 资产盘点 ``` 创建盘点计划 → 生成盘点任务 → 现场逐项核对 → 提交结果 → 审核盘盈设备 ``` 1. 「盘点计划」新建计划,选择机房/机柜范围。 2. 执行人进入任务执行页,扫描或勾选设备实际状态。 3. 发现未登记设备时进入「盘盈设备」等待审核入库。 --- ### 8. 系统管理 #### 8.1 用户与角色 **路径**:`/users` - 审核 `pending` 状态的新注册用户。 - 为用户分配 `admin` / `operator` / `viewer` 角色。 - 支持锁定、重置密码等操作。 #### 8.2 系统设置 **路径**:`/settings` | 分类 | 可配置项 | |------|----------| | 全局 | 站点名称、Logo、时区、会话超时、维护模式 | | 外观 | 主题色、紧凑模式、侧边栏折叠 | | 关于 | 版本号、公司信息、联系方式 | 维护模式开启后,仅管理员可登录。 #### 8.3 数据备份 **路径**:`/backup` - 支持手动创建本地备份。 - 可配置自动定时备份(`/auto-backup-settings`)与远程备份(FTP/SFTP/WebDAV 等,`/remote-backup-settings`)。 - 备份文件存储在 `backend/backups/`(Docker 下已映射到宿主机)。 ![image-20260623102633865](images/image-20260623102633865.png) 命令行备份: ```bash cd backend && node scripts/backup.js cd backend && node scripts/restore.js ``` #### 8.4 操作日志 **路径**:`/operation-logs` 记录用户关键操作(增删改、登录等),支持按模块、操作人、时间筛选,用于安全审计。 --- ### 9. 日常运维 #### 9.1 健康检查 ```bash # 后端健康(Docker 映射端口示例) curl http://localhost:12001/health # 通过前端 Nginx 代理 curl http://localhost:12000/health ``` 返回 `status: ok` 表示服务正常;`warning` / `error` 时查看 `backend/logs/`。 #### 9.2 日志查看 | 环境 | 命令 | |------|------| | Docker | `docker logs -f yunrui_asset-backend` | | PM2 | `pm2 logs yunrui_asset-backend` | | 文件 | `tail -f backend/logs/*.log` | 日志级别通过 `backend/.env` 中 `LOG_LEVEL` 控制(`error` / `warn` / `info` / `debug`)。 #### 9.3 服务重启 ```bash # Docker docker compose -f docker-compose.full.yml restart backend frontend # PM2 pm2 restart yunrui_asset-backend sudo nginx -s reload ``` #### 9.4 版本更新 ```bash node update.js # 支持 --skip-git --skip-backup --skip-build 等跳过选项 ``` #### 9.5 数据库维护 ```bash # 初始化表结构(首次部署) cd backend && node scripts/init-database.js # 写入示例数据 cd backend && npm run seed ``` --- ### 10. 常见问题与排查 #### 10.1 访问与登录 | 现象 | 可能原因 | 处理 | |------|----------|------| | 前端打不开 | 端口被占用或服务未启动 | `docker compose ps` 或检查 12000/3000 端口 | | 登录 401 | 账号密码错误或 Token 过期 | 重新登录;检查 `JWT_SECRET` 是否变更 | | 登录后立刻退出 | 空闲超时 | 系统设置中调整 `idle_timeout` | | 维护模式无法登录 | 非管理员账号 | 使用管理员登录,或在数据库关闭 `maintenance_mode` | #### 10.2 Docker 部署 | 现象 | 可能原因 | 处理 | |------|----------|------| | backend 启动失败 | MySQL 未就绪或 `JWT_SECRET` 未设 | 等待 MySQL;设置 `JWT_SECRET` 后重启 | | 502 / API 无响应 | 后端容器异常 | `docker logs yunrui_asset-backend` | | 中文乱码 | MySQL 字符集 | 确保库为 `utf8mb4` | #### 10.3 本地开发 | 现象 | 可能原因 | 处理 | |------|----------|------| | 端口 8000/3000 冲突 | 其他进程占用 | 修改 `backend/.env` 的 `PORT` 或 `FRONTEND_PORT` | | 前端 API 失败 | 代理未生效 | 确认 Vite 将 `/api` 代理到 `http://localhost:8000` | | 数据库连接失败 | MySQL 未启动或密码错误 | 检查 `DB_TYPE` 与 MySQL 连接参数 | #### 10.4 业务功能 | 现象 | 可能原因 | 处理 | |------|----------|------| | U 位冲突 | 同一机柜 U 位已被占用 | 调整设备起始 U 位或高度 | | 3D 页面空白 | 浏览器不支持 WebGL | 更换浏览器或更新显卡驱动 | | 上传失败 | 文件超过大小限制 | 默认最大 30 MB(`MAX_FILE_SIZE_MB`) | | 无示例数据 | 未执行种子脚本 | `docker exec yunrui_asset-backend node scripts/seed-example-data.js` | --- ### 11. 附录 #### 11.1 环境变量速查(后端 `backend/.env`) | 变量 | 默认值 | 说明 | |------|--------|------| | `PORT` | `8000` | 后端监听端口 | | `NODE_ENV` | `development` | 运行环境 | | `DB_TYPE` | `sqlite` | `sqlite` 或 `mysql` | | `DB_PATH` | `./yunrui_management.db` | SQLite 文件路径 | | `MYSQL_HOST` | `localhost` | MySQL 主机(Docker 内为 `mysql`) | | `MYSQL_PORT` | `3306` | MySQL 端口 | | `MYSQL_DATABASE` | `yunrui_management` | 数据库名 | | `MYSQL_USERNAME` | `root` | 数据库用户 | | `MYSQL_PASSWORD` | (空) | 数据库密码 | | `JWT_SECRET` | 开发自动生成 | **生产必填** | | `TOKEN_EXPIRY` | `24h` | Token 有效期 | | `LOG_LEVEL` | `debug` | 日志级别 | | `MAX_FILE_SIZE_MB` | `30` | 上传大小上限 | | `FRONTEND_PORT` | `3000` | 本地前端端口提示 | 完整列表见 `backend/.env.example`。 #### 11.2 服务端口对照 | 场景 | 前端 | 后端 | MySQL | |------|------|------|-------| | Docker 全栈(`docker-compose.full.yml`) | 12000 | 12001 | 12006 | | Docker 生产镜像(`docker-compose.prod.yml`) | 80 | 内部网络 | 可选 | | 本地开发 | 3000 | 8000 | 3306 | #### #### 11.3 相关链接 | 资源 | 地址 | |------|------| | API 详细文档 | [docs/api/README.md](docs/api/README.md) | | Docker 部署补充 | [docs/docker-deployment-guide.md](docs/docker-deployment-guide.md) | | 用户指南(历史) | [docs/USER_GUIDE.md](docs/USER_GUIDE.md) | | 问题反馈 | https://code.xinmi.cloud/yunrui_asset/issues | --- ## 贡献指南 欢迎提交 Issue 或 Pull Request。 ```bash git checkout -b feature/your-feature git commit -m 'feat: 添加新功能' git push origin feature/your-feature ``` | 提交类型 | 说明 | |----------|------| | `feat` | 新功能 | | `fix` | Bug 修复 | | `docs` | 文档更新 | | `refactor` | 重构 | | `chore` | 构建/工具 | 开发规范:后端 CommonJS + Sequelize;前端 ESM + React Hooks;提交前运行 `npm run lint`(backend / frontend)。 --- ## 许可证 本项目基于 [MIT 许可证](LICENSE) 开源。 --- **云睿资产开源社区** 文档版本:2.1.1 | 2026-06-22