main
✅ 包含完整的Git提交历史 ✅ 详细的性能对比数据 ✅ 5份技术文档索引 ✅ 部署指南和回滚方案 ✅ 后续优化路线图 ✅ ROI分析和经验总结 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
<<<<<<< HEAD
Mac Studio M2 企业级 CI/CD 基础设施
🚀 完全自动化部署 - 已验证可用 ✅
这是一套完整的企业级CI/CD基础设施,专为Mac Studio M2环境优化,支持一键自动化部署,无需手动配置。
⚡ 快速开始
# 一键自动化部署所有服务
./build-infra.sh --full-auto
# 分步骤部署(逐步确认)
./build-infra.sh --step-by-step
# 验证现有服务
./build-infra.sh --verify
🌐 服务访问地址
部署完成后,通过以下地址访问服务:
| 服务 | 地址 | 用途 | 默认账号 |
|---|---|---|---|
| Gitea | http://localhost:33000 | Git代码仓库 + Actions | 需要初始化 |
| Jenkins | http://localhost:38080 | CI/CD平台 | admin / admin123 |
| Registry | http://localhost:35001 | Docker镜像仓库 | 无认证 |
| Registry UI | http://localhost:35002 | 镜像管理界面 | 无认证 |
SSH访问:
# Gitea SSH克隆 (端口32222)
git clone ssh://git@localhost:32222/username/repository.git
🎯 核心特性
- ✅ 一键部署: 完全自动化,15分钟内完成所有配置
- ✅ 端口优化: 统一使用3开头端口,避免冲突
- ✅ 多平台构建: 支持 linux/amd64 + linux/arm64
- ✅ Configuration as Code: Jenkins零手动配置
- ✅ 企业级功能: 完整的CI/CD流水线支持
- ✅ 健康监控: 自动化服务状态检查
- ✅ 数据持久化: 所有数据自动备份和恢复
📋 端口分配
服务端口分配(避免冲突):
├── Gitea: 33000 (Web) + 32222 (SSH)
├── Jenkins: 38080 (Web) + 35000 (Agent)
├── Docker Registry: 35001 (API) + 35002 (UI)
└── 预留监控端口: 37001+ (Prometheus等)
🏗️ 架构组件
核心服务:
- Jenkins LTS: CI/CD服务器,基于JDK21
- Gitea 1.21: 轻量级Git服务,支持Actions
- Docker Registry: 本地镜像仓库
- Registry UI: 可视化镜像管理
环境信息:
- 硬件: Mac Studio M2 Ultra (24核CPU, 76核GPU, 192GB内存)
- 系统: macOS Sequoia 15.7
- 容器: Docker Desktop + OrbStack优化
- 网络: 统一cicd-network网络
📂 项目结构
infra/
├── build-infra.sh # 🌟 一键部署脚本
├── configs/
│ └── global.env # 统一环境配置
├── docker/compose/ # Docker编排配置
│ ├── gitea-compose.yml # Gitea服务
│ ├── jenkins-simple.yml # Jenkins服务
│ └── registry-simple.yml # Registry服务
├── jenkins/
│ ├── casc/jenkins.yaml # Jenkins自动配置
│ ├── shared-library/ # Pipeline共享库
│ └── templates/ # 项目模板
├── scripts/
│ ├── maintenance/ # 维护脚本
│ └── utils/ # 工具脚本
└── docs/ # 文档
🔧 管理命令
# 部署管理
./build-infra.sh --full-auto # 完全自动化部署 (推荐)
./build-infra.sh --step-by-step # 分步骤部署
./build-infra.sh --cleanup # 清理所有服务
./build-infra.sh --verify # 验证服务状态
# 日常维护
./scripts/maintenance/health-check.sh # 健康检查
./scripts/utils/show-logs.sh [service] # 查看日志
# 传统管理脚本 (保留兼容)
./jenkins-manager.sh [status|start|stop|backup|health]
🚀 CI/CD功能特性
Jenkins自动配置 (CasC)
- ✅ 50+插件自动安装: Docker, Gitea, Pipeline, 多平台构建等
- ✅ 工具自动配置: Git, Maven, Gradle, NodeJS, Docker, Python
- ✅ 凭据模板: Gitea, Registry, SSH凭据预配置
- ✅ 云配置: Docker和Kubernetes云支持
- ✅ 示例作业: 多平台构建和系统监控作业
多平台构建支持
// 自动支持的构建平台
pipeline {
environment {
PLATFORMS = 'linux/amd64,linux/arm64'
REGISTRY = 'localhost:35001'
}
stages {
stage('多平台构建') {
steps {
buildMultiPlatformImage([
imageName: "${REGISTRY}/app:${BUILD_NUMBER}",
platforms: env.PLATFORMS
])
}
}
}
}
📊 部署验证
部署完成后,系统会自动验证:
- ✅ 容器状态: 所有服务容器正常运行
- ✅ 端口监听: 所有端口正确绑定
- ✅ API响应: 所有服务API正常响应
- ✅ 健康检查: Gitea和Registry健康检查通过
- ✅ Web界面: 所有Web界面可正常访问
🛠️ 故障排查
常见问题
端口占用:
# 检查端口占用
lsof -i :33000,38080,35001,35002
# 清理并重新部署
./build-infra.sh --cleanup
./build-infra.sh --full-auto
服务启动失败:
# 查看服务日志
./scripts/utils/show-logs.sh [gitea|jenkins|registry|all]
# 健康检查
./scripts/maintenance/health-check.sh
配置修改:
- 主配置文件:
configs/global.env - Jenkins配置:
docker/compose/jenkins/casc/jenkins.yaml - 修改后重新部署生效
💡 最佳实践
CI/CD流程
- 代码管理: 在Gitea中创建仓库和组织
- Pipeline配置: 使用预置模板快速创建
- 多平台构建: 自动支持AMD64和ARM64
- 镜像管理: Registry UI可视化管理镜像
维护建议
- 定期备份: 使用内置备份脚本
- 健康监控: 定期运行健康检查
- 更新管理: 定期更新Docker镜像
- 日志管理: 定期清理服务日志
📈 性能优化
资源配置优化:
- Jenkins JVM:
-Xmx2g -Xms1g - 构建并发: 支持多个并行构建
- 镜像缓存: 本地Registry加速构建
- 网络优化: 统一Docker网络提高通信效率
🔄 升级和扩展
监控扩展 (预留)
# 监控服务端口预留
PROMETHEUS_PORT=37001
GRAFANA_PORT=37002
Kubernetes集成
- Jenkins Kubernetes插件已预配置
- 支持K8s动态Agent
- 多环境部署支持
📞 技术支持
- 快速开始: 查看
QUICK_START.md - 详细规划: 查看
BUILD_PLAN.md - 配置说明: 查看
CLAUDE.md - 问题排查: 查看
docs/troubleshooting.md
🎉 版本信息
- 当前版本: v2.0 (统一端口版本)
- Jenkins版本: LTS (JDK21)
- Gitea版本: 1.21
- Registry版本: 2.x
- 最后更新: 2025-01-23
📄 许可证
MIT License
🚀 立即开始
# 克隆项目
git clone <your-repo-url>
cd infra
# 一键部署所有服务
./build-infra.sh --full-auto
# 访问服务
open http://localhost:33000 # Gitea
open http://localhost:38080 # Jenkins (admin/admin123)
open http://localhost:35002 # Registry UI
部署时间: 约10-15分钟
服务数量: 4个核心服务
支持平台: Mac Studio M2 + Docker Desktop
灵境万象健康管理系统 (LJWX)
📋 项目概述
灵境万象健康管理系统(LJWX)是一套完整的企业级健康监测解决方案,专为工业环境下的可穿戴设备健康数据监控而设计。系统集成了数据采集、实时分析、智能告警、可视化大屏等功能模块,为企业提供全方位的员工健康安全保障。
🎯 核心特性
- 🏥 健康数据监控: 实时采集心率、血压、体温、运动数据等多维度健康指标
- 🚨 智能告警系统: 多租户告警规则管理,支持微信、消息、大屏推送
- 📊 可视化大屏: 专业级监控大屏,实时展示健康状态和告警信息
- 📱 移动端应用: Flutter开发的移动APP,支持数据查看和设备管理
- ⌚ 智能手表集成: 支持华为Watch4等智能穿戴设备数据采集
- 🏢 多租户架构: 企业级权限管理,支持租户隔离和告警规则隔离
🏗️ 系统架构
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ ljwx-watch │ │ ljwx-phone │ │ ljwx-admin │ │ljwx-bigscreen│
│ 智能手表 │ ──▶ │ 移动应用 │ ──▶ │ 管理后台 │ ──▶ │ 监控大屏 │
│ (HarmonyOS)│ │ (Flutter) │ │ (Vue3) │ │ (Python) │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
└───────────────────┼───────────────────┼───────────────────┘
│ │
┌─────────────┐ ┌─────────────┐
│ ljwx-boot │ │ 数据存储 │
│ 后端API │◄──▶│ MySQL+Redis │
│(Spring Boot)│ │ │
└─────────────┘ └─────────────┘
📂 项目结构
🔧 后端服务 (ljwx-boot)
- Spring Boot 3.3.2 + Java 21 - 现代化微服务架构
- 健康管理模块: 10+健康指标实时监控、睡眠分析、运动追踪
- 系统管理模块: 多租户架构、RBAC权限控制、组织管理
- 设备管理模块: IoT设备生命周期管理、状态监控
- 多租户告警系统: 智能阈值监控、多级告警处理、租户级别告警规则隔离
- 地理围栏: 虚拟边界监控、位置告警
🖥️ 前端管理 (ljwx-admin)
- Vue3 + TypeScript + Naive UI - 现代化管理界面
- 健康数据管理: ECharts可视化、Excel导出、时间序列分析
- 设备管理: 电池监控、佩戴状态、设备配置
- 告警管理: 实时告警监控、规则配置、微信集成
- 用户组织管理: 分层权限、角色管理、部门架构
- 系统监控: 性能指标、日志管理、缓存监控
📊 监控大屏 (ljwx-bigscreen)
- Python Flask + Socket.IO - 高性能实时监控
- 实时数据处理: 支持1000+设备并发、QPS>1400
- 告警处理引擎: 多渠道通知、层级分发、WebSocket推送
- 健康分析系统: AI健康画像、个人基线、Z-score异常检测
- 地图可视化: 实时位置追踪、告警地点标记
- 性能优化: Redis缓存、批量查询、连接池管理
📱 移动应用 (ljwx-phone)
- Flutter 3.0+ 跨平台 - 统一iOS/Android体验
- 蓝牙BLE集成: 自动设备发现、二进制协议、实时同步
- 健康数据可视化: FL Chart图表、雷达图健康评分
- 管理员模式: 嵌入式Web界面、SHA认证、角色切换
- 数据同步: 蓝牙/WiFi双模式、本地缓存、批量上传
- 告警通知: 实时推送、声音提醒、状态指示
⌚ 智能手表 (ljwx-watch)
- HarmonyOS 3.0 原生应用 - 深度系统集成
- 健康传感器: 心率、血氧、体温、压力、步数监测
- 电源优化: 统一定时器、15-18小时续航、智能调度
- 通信协议: 高级TLV二进制格式、50%数据压缩
- 紧急功能: SOS按钮、跌倒检测、一键告警
- 实时同步: 蓝牙BLE/WiFi双通道、离线缓存
🚀 最新功能 v1.3.8
🔧 Excel导出功能修复与静态文件优化 (2025-08-29)
Excel导出功能完善
- 导出故障修复: 修复health_table.html中Excel导出无错误日志的问题
- XLSX库路径修复: 解决Flask静态文件路径配置导致的XLSX库加载失败
- 增强错误处理: 添加详细的调试日志和错误提示,提升用户体验
- CDN备用机制: 实现本地XLSX库失败时的CDN自动降级加载
自定义弹窗系统
- 统一弹窗组件: 创建可复用的
showCustomAlert组件替代原生alert - 视觉效果升级: 科技感弹窗设计,支持键盘快捷键(ESC、Enter)
- 模块化设计: 提取为独立的
custom-alert.js文件供全局复用 - 增强功能: 支持确认框、回调函数、动画效果
静态文件架构优化
- 路径问题诊断: 发现并修复静态文件错误放置在
/bigScreen/static/的问题 - Flask配置确认: 验证
static_folder='../static'指向正确的/bigscreen/static/ - CDN文件迁移: 将Bootstrap、FontAwesome、ECharts等离线CDN文件移至正确位置
- 重复文件清理: 删除错误位置的重复文件,避免开发者混淆
# 修复前的问题路径结构
/bigscreen/bigScreen/static/ # ❌ 错误位置 - Flask无法访问
├── css/bootstrap-5.1.3.min.css
├── js/echarts.min.js
└── js/xlsx-0.18.5.full.min.js
# 修复后的正确路径结构
/bigscreen/static/ # ✅ 正确位置 - Flask可以访问
├── css/bootstrap-5.1.3.min.css
├── js/echarts.min.js
└── js/xlsx-0.18.5.full.min.js
技术改进详情
- 依赖库完整性: 确保所有CDN离线文件在正确位置并可被Flask访问
- 版本同步更新: 使用最新版本的ECharts (1MB+) 替换旧版本 (700KB)
- 开发体验优化: 清理重复文件,建立清晰的静态文件组织结构
- 系统稳定性: 解决Excel导出"导出失败,请重试"无具体错误信息的问题
🚀 历史版本 v1.3.6
🔧 多租户告警规则系统实现 (2025-08-26)
告警规则多租户隔离
- 租户级规则隔离: 实现告警规则基于
customer_id的完全隔离,不同租户拥有独立的告警规则集 - 默认规则自动克隆: 新建租户时自动从
customer_id=0克隆默认告警规则 - 多级告警支持: 支持同一健康指标配置多个告警级别(如心率120-140中级,140-160高级)
- 系统事件匹配: 告警规则类型与手表系统事件完全匹配,支持直接规则匹配
告警类型国际化支持
- 英文键值系统: 告警规则类型使用标准英文格式(如
HEARTRATE_HIGH_ALERT) - 中文显示支持: 通过数据字典实现英文→中文映射,前端显示用户友好的中文
- 完整映射体系: 覆盖15种告警类型的完整中英文映射
- 专业化命名: 与智能手表系统事件命名规范保持一致
数据库优化
-- 告警规则表新增字段
ALTER TABLE t_alert_rules ADD COLUMN customer_id BIGINT;
-- 支持多级告警的唯一约束
ALTER TABLE t_alert_rules ADD UNIQUE KEY uk_alert_multi_level
(rule_type, physical_sign, severity_level, customer_id);
-- 完整的告警类型字典映射
INSERT INTO sys_dict_item (dict_code, value, zh_cn, en_us) VALUES
('alert_type', 'HEARTRATE_HIGH_ALERT', '心率过高告警', 'HEARTRATE_HIGH_ALERT'),
('alert_type', 'SOS_EVENT', 'SOS紧急求助', 'SOS_EVENT');
系统架构升级
- OrgUnitsChangeListener 扩展: 新建租户时自动触发告警规则克隆
- 多租户数据隔离: 查询、创建、更新、删除操作均基于租户ID过滤
- Redis 缓存优化: 告警规则缓存键支持租户级别隔离
alert_rules_{customerId} - 前端上下文传递: 管理界面自动传递当前用户的
customerId
🚀 历史版本 v1.3.3
🔧 客户部署配置系统修复 (2025-08-20)
端口配置动态化修复
- 配置文件读取:
generate-docker-compose.sh现在正确读取custom-config.env配置 - 端口配置灵活: 支持客户完全自定义 MySQL、Redis、大屏等服务端口
- 镜像版本同步: 自动从
docker-compose.yml读取最新镜像版本标签 - 环境变量传递: 确保所有自定义配置正确传递到生成的容器配置中
修复前后对比
# 修复前: 硬编码默认端口
ports:
- "3306:3306" # 固定MySQL端口
- "8001:8001" # 固定大屏端口
# 修复后: 动态配置端口
ports:
- "$MYSQL_PORT:3306" # 从custom-config.env读取
- "$BIGSCREEN_PORT:$APP_PORT" # 支持自定义端口映射
🐳 Docker构建系统优化修复 (2025-08-20)
ljwx-boot Docker构建修复
- Maven镜像源优化: 配置阿里云Maven镜像,解决
No route to host网络连接问题 - 超时配置优化: 增加Maven连接和读取超时时间,提高构建稳定性
- 多阶段构建: 优化Dockerfile,支持ljwx-boot-starter依赖构建和主应用构建
- 网络连接修复: 解决Docker构建环境中Maven依赖下载失败的问题
技术改进详情
# 配置Maven阿里云镜像源
RUN mkdir -p /root/.m2 && \
echo '<settings>...<mirror>...<url>https://maven.aliyun.com/repository/public</url>...' > /root/.m2/settings.xml
# 增加超时配置
RUN mvn clean install -DskipTests -Dmaven.wagon.http.connectTimeout=60000 -Dmaven.wagon.http.readTimeout=120000
🔧 蓝牙健康数据上传修复 (2025-08-19)
移动端数据传输优化
- 数据结构简化: 移除ljwx-phone上传健康数据最外层的data结构,直接传输核心数据
- 蓝牙传输稳定性: 优化BLE数据包格式,提高传输成功率和稳定性
- 数据同步效率: 简化数据封装层次,减少传输开销,提升同步速度
- 兼容性增强: 确保手表端和服务端数据格式完全匹配,避免解析错误
📋 代码分析与文档完善 (2025-08-16)
完整系统分析
- 深度模块分析: 完成所有5个模块的详细代码分析
- 技术架构文档: 新增完整的系统功能模块清单文档
- API接口梳理: 详细整理各模块核心API和功能特性
- 性能指标确认: 验证系统性能数据和技术参数
技术文档体系
- 系统功能模块清单: 109KB综合技术文档
- 模块功能清单: ljwx-boot、ljwx-admin、ljwx-bigscreen、ljwx-phone、ljwx-watch
- 架构设计说明: 详细的技术栈和系统架构分析
- 部署运维指南: 完整的部署和监控方案
🚀 历史版本 v1.3.2
✨ 告警通知系统完整升级
多渠道通知
- 企业微信: 支持企业微信应用消息推送
- 公众号微信: 支持微信公众号模板消息
- 系统消息: 内置消息系统,层级分发通知
- 大屏推送: Critical级别告警实时推送到监控大屏
智能层级通知
设备告警事件
↓
告警规则匹配
↓
┌─────────────┐
│ 通知分发策略 │
└─────────────┘
↓ ↓ ↓
用户通知 部门主管 租户管理员
↓ ↓
(无主管时) (最终兜底)
实时大屏集成
- WebSocket实时推送: Socket.IO支持秒级告警推送
- 专业告警界面: 科技感弹窗设计,包含告警详情
- 交互功能: 支持告警确认、音效提醒、ESC关闭
- 地图标记: 可选的告警位置地图标记功能
🛠️ 技术亮点
- 多架构支持: Docker支持AMD64/ARM64多架构部署
- 性能优化: 解决N+1查询问题,响应时间从181s优化到<5s
- 高并发处理: QPS >1400,支持2000+设备并发
- 容错设计: 微信通知失败自动降级,确保告警可达性
- 智能手表集成: HarmonyOS原生应用,支持15+小时续航
- 二进制协议: TLV格式数据传输,压缩率达50%
- AI健康分析: 集成DeepSeek R1模型,智能健康建议
📋 快速开始
环境要求
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Java | ≥ JDK 21 | 后端运行环境 |
| Node.js | ≥ 18.0 | 前端构建环境 |
| Python | ≥ 3.8 | 大屏系统环境 |
| MySQL | ≥ 8.0 | 数据存储 |
| Redis | ≥ 6.0 | 缓存存储 |
| Docker | ≥ 20.10 | 容器化部署(可选) |
🐳 快速部署 (推荐)
# 1. 克隆项目
git clone https://github.com/your-org/ljwx-system.git
cd ljwx-system
# 2. 构建所有Docker镜像
./build-and-push.sh boot # 构建后端服务
./build-and-push.sh admin # 构建前端管理
./build-and-push.sh bigscreen # 构建监控大屏
# 3. 一键启动所有服务
docker-compose up -d
# 4. 初始化数据库
mysql -u root -p123456 < client-deployment/client-data.sql
# 5. 访问系统
# 管理后台: http://localhost:3000
# 监控大屏: http://localhost:5001
# API文档: http://localhost:9998/doc.html
🔧 Docker构建说明
系统已优化Docker构建流程,解决了网络连接问题:
# 单独构建各组件
./build-and-push.sh boot # 后端API服务 (Spring Boot)
./build-and-push.sh admin # 前端管理系统 (Vue3)
./build-and-push.sh bigscreen # 监控大屏系统 (Python Flask)
# 构建支持多架构 (AMD64/ARM64)
# 镜像自动推送到阿里云容器镜像仓库
⚙️ 客户部署配置
系统支持完全自定义的端口和服务配置:
# 修改 custom-config.env 文件
BIGSCREEN_PORT=8002 # 自定义大屏端口
MYSQL_PORT=3307 # 自定义MySQL端口
REDIS_PORT=6380 # 自定义Redis端口
VITE_BIGSCREEN_URL=http://192.168.1.10:8002 # 大屏访问地址
# 生成动态配置并部署
./deploy-client.sh custom-config.env
特性:
- 🔄 动态端口配置: 根据客户环境自动调整端口映射
- 📦 镜像版本同步: 自动使用最新的镜像版本标签
- 🔧 环境变量传递: 完整的配置文件支持
- ✅ 向后兼容: 保持现有部署的稳定性
🔧 开发环境部署
后端服务
cd ljwx-boot
./run-local.sh
前端管理
cd ljwx-admin
npm install
npm run dev
监控大屏
cd ljwx-bigscreen/bigscreen
python run_bigscreen.py
📊 系统展示
管理后台
- 健康数据总览、实时设备状态监控
- 告警配置管理、用户权限控制
- 数据可视化图表、统计分析报表
监控大屏
- 实时健康数据地图、告警状态展示
- Critical告警弹窗、WebSocket实时推送
- 系统性能监控、设备在线状态
移动应用
- 个人健康档案、历史数据查询
- 设备绑定管理、消息通知中心
- 健康评分分析、趋势图表展示
🔧 配置说明
数据库配置
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
告警通知配置
# 企业微信配置
WECHAT_CORP_ID = "your_corp_id"
WECHAT_AGENT_ID = "your_agent_id"
WECHAT_SECRET = "your_secret"
# 公众号配置
WECHAT_APPID = "your_appid"
WECHAT_APPSECRET = "your_appsecret"
WECHAT_TEMPLATE_ID = "your_template_id"
📈 性能指标
- 响应时间: <3秒 (1000设备规模)
- 并发处理: QPS >1400
- 系统可用性: 99.9%
- 告警及时性: <5秒 (Critical级别)
🔒 安全特性
- 多租户隔离: 数据完全隔离,权限严格控制
- API安全: Sa-Token鉴权,接口权限细化
- 数据加密: 敏感数据AES加密存储
- SQL注入防护: MyBatis-Plus参数化查询
📚 技术文档
核心文档
- 系统功能模块清单 - 完整的系统功能和技术架构说明
- 告警通知功能完整实现方案 - 告警通知系统技术方案
部署文档
开发文档
移动端文档
- 数据监控解决方案使用指南 - 移动端使用说明
- 手表开发和使用指南 - 智能手表开发指南
🤝 贡献指南
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
📄 开源协议
本项目基于 Apache License 2.0 开源协议,仅供学习参考使用。
👥 联系我们
- 项目主页: GitHub
- 问题反馈: Issues
- 技术支持: [email protected]
© 2024 灵境万象健康管理系统 (LJWX). All rights reserved.
gitea/main
Languages
JavaScript
26.9%
HTML
19.3%
Java
11.7%
Python
11.5%
Vue
10.1%
Other
20.2%