Files
silk/README.md
T
2026-08-17 21:43:26 +08:00

32 KiB
Raw Blame History

智慧蚕房环境监测与智能调控系统

面向养蚕场景的环境实时监测、告警通知、设备联动控制与视频监控平台。系统通过 MQTT 接收蚕房传感器/网关上报的温度、湿度、光照、CO₂ 等环境参数,支持阈值配置、异常告警、设备控制、GB28181 视频监控、连续录制与历史回放、RBAC 权限管理与审计日志。

系统提供 Web 后台React Native 移动端 APP微信小程序 三端界面,后端统一由 Go 服务提供 API。

最新进度:AI 巡检闭环、知识库、分子检测、专家会诊、疫病溯源、天气预警、健康画像等已完成;整改 Task 0~14 代码与文档已完成并部署到开发服务器。本地新增 v9 组织/房间对象授权、运营能力和组织管理页面,尚未部署,详见 开发交接记录.md

1. 核心能力

1.1 环境实时监测

  • 通过 MQTT 订阅遥测 Topic,接收设备上报数据
  • 支持温度、湿度、光照、CO₂ 等指标
  • 遥测数据优先写入 Apache IoTDBIoTDB 不可用时降级写入 PostgreSQL
  • 后端提供遥测列表、设备最新值、指标列表、历史聚合趋势 API
  • 设备离线检测:5 分钟无数据自动标记离线,下发 info 命令作心跳唤醒

1.2 阈值配置与告警

  • 支持按传感器配置上下限阈值、严重等级和防抖时间
  • MQTT 入站遥测自动匹配设备、传感器和阈值规则
  • 超限触发告警事件,恢复正常后发送恢复事件
  • 支持告警列表、详情、确认、解除及告警关联视频片段查询

1.3 设备控制

  • 支持单设备控制和批量控制,命令通过 MQTT 下行 Topic 发布
  • 默认下行 Topic 格式:silk/{deviceKey}/down/cmd
  • 支持红外设备控制(短连接、命令驱动型,需下发命令触发响应)
  • 红外设备主题持久化存储,防止后端重启丢失

1.4 视频监控(GB28181

  • 基于 WVP-PRO + ZLMediaKit 实现 GB28181 摄像头注册与信令控制
  • 摄像头配置管理(GB 设备 ID、通道 ID、流地址)
  • 实时点播:摄像头 → ZLMediaKit → FLV 流 → Web/APP/小程序播放
  • Go 后端 /live/proxy 接口直接代理 ZLM FLV 流,解决移动端跨域问题
  • 连续录制:recorder-go 拉取 ZLM FLV 流,按 5 分钟分段落 Ceph S3
  • 历史回看:按日期查询录像片段,支持播放、下载
  • 设备状态同步:后端每 30 秒查询 WVP 设备在线状态

1.5 RBAC 权限管理

  • 4 个角色:admin(管理员)、operator(操作员)、viewer(查看者)、farmer(养殖员)
  • 46 个权限码:基础看板/蚕房/设备/阈值/告警/视频/能耗/日志/用户/审计,并扩展知识库、巡检、蚕匾批次、分子检测、耗材、会诊、溯源、天气、订阅、组织、设备维护、产量损失、案例库、实验室等
  • 后端 RequirePermission 中间件校验权限码,admin 自动放行
  • 前端路由守卫 + 菜单动态过滤 + <HasPermission> 按钮级控制
  • 新用户注册默认角色为 viewer

1.6 通知与实时推送

  • WebSocket 网关位于 /ws,使用一次性 ticket 鉴权
  • 广播事件:telemetry.alltelemetryalarmalarm.recovery
  • Web/APP/小程序均接入 WebSocket 实时订阅
  • 登录后自动连接 WebSocket,登出自动断开

1.7 能耗管理

  • 设备能耗数据采集与统计
  • 能耗趋势图表展示

1.8 蚕匾 / 批次 / 饲养记录(计划 #7)

  • 蚕匾(trays)、蚕种批次(batches,含品种/蚕种来源/批次号/检疫证明/龄期/入房/上蔟)、饲养记录(rearing_records)三表 + CRUD
  • Web「批次管理」页(批次 + 蚕匾 + 饲养记录);小程序蚕房详情展示蚕匾与当前批次
  • 生物安全:种源与检疫链、消毒计划/执行、批次/蚕匾/样本二维码身份;小程序可扫码并现场提交消毒执行
  • 运营能力:组织/房间级对象授权、设备校准/故障/维护/固件、产量损失统计、脱敏案例库、实验室结构化结果

1.9 AI 拍照巡检闭环(计划 #5/#6/#8/#9

  • ai-service/FastAPI + ONNX Runtime(默认 mock 模式;POST /detect 返回框/类别/置信度、modelVersionisMockabnormalProbabilityPOST /internal/stream-tasks 受限拉流任务,GET /metrics 监控指标)
  • 拍照上传 → AI 检测 → 风险评分(0-100 分,绿/黄/橙/红四级,只消费 AI 异常概率,缺失项不按 0 参与)→ 巡检记录(inspection_recordsIdempotency-Key 幂等)
  • 小程序「拍照巡检」页;Web「巡检记录」页(技术员复查)
  • 小程序离线巡检:拍照先入本地持久队列,联网后串行上传并复用同一幂等键;401 自动刷新后重试

1.10 知识库与阶段风险提示(计划 #10/#13)

  • 蚕病百科(9 病种 + 「其它/未知」)、AI 风险分级解读、LAMP/SERS 教程、四季防控提醒
  • 症状图谱图片上传(S3 silk-images);饲养阶段风险提示(/knowledge/stage-hints
  • Web「知识库」页 + 小程序知识库(列表/详情/阶段选择)

1.11 分子检测与交叉验证(计划 #14/#15/#19/#20

  • LAMP 检测任务单 + 标准 5 步流程 + 结果照片 + 结果录入
  • qPCR Ct 值自动判读(阈值可配);SERS 光谱数据上传与光谱库;高光谱方式预留
  • 交叉验证:AI 结果 vs 检测结果(一致→确认诊断;不一致→建议专家会诊)
  • 统一检测任务/样本/发病事件:/detection-tasks/samples/disease-events;橙色/红色巡检通过 Outbox 幂等创建待确认任务,阳性结果自动创建发病事件并关联溯源
  • 多检测方式推荐引擎(设备条件/紧急程度/操作者水平/成本偏好)
  • Web「分子检测」页 + 小程序 LAMP 录入

1.12 专家会诊(计划 #18

  • 会诊单 + 病例快照(照片/AI/检测/环境/批次/天气)+ 状态机(受理/出方案/归档)+ 专家意见与防控方案
  • Web「专家会诊」页
  • 会诊治理:统一状态机、SLA 超时标记、专家意见版本;知识库草稿/审核/发布/撤回;防控效果报告

1.13 疫病溯源与区域统计(计划 #21/#22)

  • 三级溯源:一级自动(环境回溯/历史关联/传播推断→初报)、二级分病种排查清单(→分析报告)、三级专家/实验室记录
  • 区域发病统计(按蚕房区域聚合,柱状图/饼图)与年度发病规律
  • Web「疫病溯源」页

1.14 耗材管理(计划 #16

  • 耗材库存、低库存/临期预警、采购建议(补足安全阈值)
  • Web「耗材管理」页

1.15 天气与高发病预警(计划 #12)

  • 和风天气接入(实时 + 3 天预报);按规格书 3.2.3 规则评估白僵病/核型多角体病/软化病风险
  • 定时(30 分钟)评估写入 weather_alertsWeb 告警中心与小程序告警页展示

1.16 蚕房健康画像与年度发病规律(计划 #24)

  • 单蚕房健康分(0-100)与评级(优/良/中/差):聚合巡检风险、检测结果、会诊/溯源事件
  • Web 蚕房「健康画像」抽屉 + 年度发病折线图

1.17 微信订阅消息(计划 #11,骨架)

  • 用户 openid 绑定与订阅授权(/wechat/bind|subscribe);巡检风险非绿异步触发
  • 真实推送需配置 WECHAT_APPID/SECRET/TEMPLATE_* 并申请订阅消息模板

1.18 组织与对象级授权(IAM-003)

  • organizations / organization_members + rooms.org_id 组成“组织 → 房间 → 业务记录”授权链
  • 房间、设备、传感器、阈值、告警、遥测、控制、录像、巡检、检测、会诊、溯源、生物安全等核心对象按组织/房间过滤,越权返回 403
  • WebSocket 设备订阅同时校验 RBAC 与组织成员关系
  • Web「组织管理」页支持组织新增/编辑、成员添加/移除;默认组织兼容历史数据,新注册用户自动加入

2. 技术架构

┌──────────────┐       MQTT        ┌──────────────┐
│ 传感器/模拟器 │ ───────────────▶ │ VerneMQ:1883  │
└──────────────┘                   └──────┬───────┘
                                          │
                    ┌─────────────────────┼─────────────────────┐
                    ▼                     ▼                     ▼
           ┌────────────────┐   ┌──────────────────┐   ┌──────────────┐
           │  Go 后端 :3000  │   │ recorder-go :9090 │   │  WVP :18080  │
           │  (Gin + GORM)   │   │  (连续录制服务)    │   │ ZLM :8081    │
           │  ai-service:8000 │   │                  │   │              │
           │  (FastAPI+ONNX)  │   │                  │   │              │
           └───┬────┬───┬───┘   └────────┬─────────┘   └──────┬───────┘
               │    │   │                │                     │
       ┌───────┘    │   └──────┐         │                     │
       ▼            ▼          ▼         ▼                     ▼
  PostgreSQL    IoTDB      Valkey     Ceph S3            GB28181 摄像头
  :5432         :18081     :6379      :7480
  业务数据      时序遥测    缓存/通知   录像存储
                    │
       ┌────────────┼────────────┐
       ▼            ▼            ▼
  ┌──────────┐ ┌──────────┐ ┌──────────────┐
  │ Web 后台  │ │ 安卓 APP  │ │ 微信小程序    │
  │ React    │ │ RN 0.74  │ │ Taro         │
  │ :5174    │ │          │ │              │
  └──────────┘ └──────────┘ └──────────────┘

3. 技术栈

层级 技术
Go 后端 Go 1.23、Gin、GORM、JWT、slog、WebSocket
录制服务 Go、AWS SDK v2S3)、HTTP 拉流
Web 前端 React 18、Vite、Ant Design、Ant Design Pro、Axios、ECharts、Vitest
移动端 APP React Native 0.74、React Navigation、React Native Paper、Zustand
微信小程序 Taro 4、React、TypeScript、SCSS
业务数据库 PostgreSQL(开发服务器为 14
时序数据库 Apache IoTDB 2.0.8REST API
AI 推理服务 Python 3.10+、FastAPI、ONNX Runtime、OpenCVai-service/
缓存/通知 Redis / ValkeyRedis 兼容)
设备通信 VerneMQMQTT 3.1.1
视频流媒体 WVP-PRO 2.7.4、ZLMediaKitGB28181
对象存储 Ceph RGWS3 兼容)
编译工具 Go(交叉编译 Linux amd64

4. 目录结构

silk/
├─ server-go/                      # Go 后端服务(端口 3000
│  ├─ cmd/server/main.go           # 入口
│  ├─ internal/
│  │  ├─ config/                   # 环境变量配置
│  │  ├─ database/                 # GORM 数据库连接与版本化迁移
│  │  ├─ handler/                  # HTTP handlerauth/device/alarm/video 等)
│  │  ├─ middleware/               # JWT 鉴权、RBAC 权限、CORS、限流、安全头
│  │  ├─ model/                    # GORM 数据模型 + 权限种子数据
│  │  ├─ service/                  # MQTT、IoTDB、S3、Media、Transcode 服务
│  │  └─ ws/                       # WebSocket 网关
│  ├─ go.mod
│  └─ start.sh                     # 服务器启动脚本
├─ wvp/
│  ├─ recorder-go/                 # Go 录制服务(端口 9090
│  │  ├─ main.go                   # 拉流录制 + S3 上传
│  │  └─ go.mod
│  ├─ docker-compose.yml           # WVP + ZLMediaKit + MySQL + Redis 容器
│  └─ server.env                   # WVP 配置
├─ web/                            # React Web 后台(端口 5174
│  ├─ src/
│  │  ├─ pages/                    # 登录、仪表盘、蚕房、设备、控制、红外、
│  │  │                            # 阈值、告警、视频、能耗、日志
│  │  ├─ components/               # HasPermission、StatCard、VideoPlayer
│  │  ├─ dal/                      # 数据访问层
│  │  ├─ api/http.ts               # Axios 实例与 JWT 注入
│  │  ├─ layout/BasicLayout.tsx    # 布局 + 菜单权限过滤
│  │  └─ router.tsx                # 路由守卫 + 权限控制
│  ├─ server.cjs                   # 生产环境静态服务 + API 代理
│  └─ vite.config.ts
├─ app/                            # React Native 移动端 APP
│  ├─ src/
│  │  ├─ api/                      # API 客户端(auth/device/alarm/video 等)
│  │  ├─ screens/                  # 登录、仪表盘、蚕房、设备、告警、视频、设置
│  │  ├─ navigation/               # 底部 Tab 导航
│  │  ├─ store/                    # Zustand 状态管理(auth + app
│  │  ├─ components/               # StatCard、MiniChart
│  │  └─ utils/                    # WebSocket、格式化
│  ├─ android/                     # Android 原生工程
│  ├─ .env                         # API_BASE_URL 配置
│  └─ package.json
├─ miniapp/                        # 微信小程序(Taro)
│  ├─ src/
│  │  ├─ pages/                    # 登录、仪表盘、蚕房、设备、告警、视频、设置
│  │  ├─ api/                      # API 客户端
│  │  ├─ store/                    # Zustand 状态管理
│  │  ├─ components/               # StatCard、MiniChart
│  │  └─ app.config.ts             # 小程序配置(页面、TabBar
│  └─ package.json
├─ ai-service/                     # Python AI 推理服务(FastAPI + ONNX Runtime,端口 8000
│  ├─ app/                         # main.py/health、/detect、/stream-detect、/metrics
│  ├─ tests/                       # pytest 用例
│  └─ requirements.txt
├─ tools/
│  ├─ simulator/                   # MQTT 设备模拟器
│  └─ iotdb/                       # 本地 Apache IoTDB 部署
├─ 变更记录.md                      # 项目变更记录
├─ 故障排查处理记录.md               # 故障排查与处理记录
├─ 部署指南(物理机).md              # 服务器部署指南
└─ 物联网设备接口和数据格式.md       # 设备接口文档

5. 后端模块

模块 路径 功能
Auth handler/auth.go 注册、登录、JWT、修改密码
Users handler/user.go 用户管理(权限码 user:manage
Rooms handler/room.go 蚕房增删改查
Devices handler/device.go 设备增删改查、状态同步
Sensors handler/sensor.go 传感器增删改查
Thresholds handler/threshold.go 阈值规则配置
Telemetry handler/telemetry.go 遥测列表、指标、最新值、历史趋势
Alarms handler/alarm.go 告警生成、确认、解除、查询
AlarmClip handler/alarm_clip.go 告警关联视频片段
Control handler/control.go MQTT 控制命令下发
Notification handler/notification.go PostgreSQL 持久化通知与 Outbox 状态
Video Camera handler/video_camera.go 摄像头管理、WVP 状态同步
Video Stream handler/video_stream.go 实时点播、FLV 代理
Video Record handler/video_record.go 录制启停、活跃录制查询
Video Clip handler/video_clip.go 历史录像片段查询、播放、下载
Storage handler/storage.go S3 存储管理
Permission handler/permission.go 权限码查询、角色权限查询
Audit handler/audit.go 审计日志(权限码 audit:read
Health handler/health.go PostgreSQL、Redis、IoTDB 健康检查
Knowledge handler/knowledge.go 知识库(蚕病百科/文章/阶段提示/图片上传)
Inspection handler/inspection.go AI 巡检记录(上传→检测→评分,幂等)
TrayBatch handler/tray_batch.go 蚕匾/批次/饲养记录 CRUD
Lamp handler/lamp.go 分子检测(LAMP/qPCR/SERS)、步骤、光谱库
Weather handler/weather.go 和风天气与高发病天气预警
Wechat handler/wechat.go 微信订阅消息绑定与授权
Consultation handler/consultation.go 专家会诊(病例快照/意见/方案)
Trace handler/trace.go 疫病溯源(三级)、区域/月度发病统计
HealthProfile handler/health.go 蚕房健康画像(健康分/评级)
DetectionMethod handler/detection_method.go 多检测方式推荐
Consumable handler/consumable.go 耗材库存、预警与采购建议
WebSocket ws/gateway.go /ws 实时通道,广播遥测与告警

6. 前端页面

6.1 Web 后台

路由 页面 权限码
/login 登录 -
/dashboard 仪表盘 dashboard:view
/houses 蚕房管理 room:read
/devices 设备管理 device:read
/energy 能耗管理 energy:view
/control 设备控制 device:control
/ir 红外遥控 device:control
/thresholds 阈值配置 threshold:read
/alerts 告警中心 alarm:read
/videos 视频监控 video:read
/logs 控制日志 log:read

6.2 移动端 APP / 微信小程序

底部 Tab:仪表盘、蚕房、设备、告警、视频

页面 功能
登录 用户登录,JWT 持久化
仪表盘 环境概览、趋势图、告警概况
蚕房 蚕房列表与详情
设备 设备列表、状态、控制命令下发
告警 告警列表、确认、解除
视频 摄像头列表、实时播放、历史回看
设置 用户信息、服务器配置、退出登录

7. 主要 API

后端地址:http://<服务器IP>:3000/api/v1

鉴权:除 GET /healthPOST /auth/loginPOST /auth/register 外,所有接口需 JWT

Authorization: Bearer <accessToken>
API 说明
GET /health 健康检查
POST /auth/register 用户注册(默认 viewer
POST /auth/login 用户登录
GET /auth/me 当前用户信息与权限
GET /permissions 全部权限码列表
GET /permissions/roles 角色及权限映射
GET /users 用户列表(user:manage
GET /rooms / POST /rooms / PATCH /rooms/:id / DELETE /rooms/:id 蚕房管理
GET /devices / POST /devices / PATCH /devices/:id 设备管理
GET /sensors / POST /sensors / PATCH /sensors/:id 传感器管理
GET /thresholds / POST /thresholds / PATCH /thresholds/:id 阈值管理
GET /telemetry 遥测数据列表
GET /telemetry/:deviceKey/latest 设备最新遥测
GET /telemetry/:deviceKey/metrics 设备可用指标
GET /telemetry/:deviceKey/:metric/history 历史聚合趋势
GET /alarms / GET /alarms/:id 告警列表/详情
POST /alarms/:id/ack 确认告警(alarm:ack
POST /alarms/:id/resolve 解除告警(alarm:ack
POST /control/send 单设备控制(device:control
POST /control/batch 批量控制(device:control
GET /video/cameras / POST /video/cameras 摄像头列表/新增
GET /video/cameras/:id/live/proxy 实时 FLV 流代理
GET /video/cameras/:id/playback 历史录像片段查询
POST /video/cameras/:id/record/start 启动录制(video:record
POST /video/cameras/:id/record/stop 停止录制(video:record
GET /video/recordings/active 活跃录制列表
GET /notifications 站内通知列表
GET /audit-logs 审计日志(audit:read
GET /knowledge/diseases / GET/POST/PATCH/DELETE /knowledge/diseases/:id 蚕病百科
GET /knowledge/articles / GET/POST/PATCH/DELETE /knowledge/articles/:id 知识文章(AI 解读/LAMP/SERS/季节提醒)
GET /knowledge/stage-hints 饲养阶段风险提示
POST /knowledge/images 知识库图片上传(knowledge:write
POST/GET /inspections AI 巡检创建/列表(Idempotency-Key 幂等)
GET/POST/PATCH/DELETE /trays/batches/rearing-records 蚕匾/批次/饲养记录
GET/POST/PATCH/DELETE /lamp-tests(/:id) 分子检测任务单(含步骤/结果照片/judge-qpcr/spectrum/cross-validation
GET/POST/DELETE /spectrum-entries SERS 光谱库
GET/POST/PATCH /detection-tasks(/:id)/samples/disease-events 统一检测任务、样本链路与发病事件
GET /weather/nowGET /weather/alerts 天气与高发病预警
GET/POST /wechat/binding/wechat/bind/wechat/subscribe 微信订阅绑定/授权
GET/POST/PATCH /consultations(/:id)/:id/resolve/:id/archive 专家会诊
GET/POST/PATCH/DELETE /trace-records(/:id)/:id/auto/:id/checklist/region-stats/monthly-stats 疫病溯源与区域/月度统计
GET/POST/PATCH /organizations(/:id)GET/POST/DELETE /organizations/:id/members(/:userId) 组织与成员数据范围
GET/POST/PATCH/DELETE /device-maintenance(/:id) 设备校准/故障/维护/固件
GET/POST/PATCH/DELETE /production-loss-records(/:id)/stats 产量/死亡/淘汰/损失/成本
GET/POST/PATCH /case-studies(/:id)/from-consultation/:id/:id/review 脱敏案例沉淀与审核发布
GET/POST/PATCH/DELETE /laboratory-results(/:id) 实验室结构化结果/分子分型
GET /health-profiles/:roomId 蚕房健康画像
GET /detection-methods/recommend 多检测方式推荐
GET/POST/PATCH/DELETE /consumables/consumables/alerts/consumables/purchase-suggestions 耗材管理

8. 权限矩阵

权限码 说明 admin operator viewer farmer
dashboard:view 看板查看
room:read 蚕房查看
room:write 蚕房管理 - -
device:read 设备查看
device:control 设备控制 -
threshold:read 阈值查看 -
threshold:write 阈值管理 - -
alarm:read 告警查看
alarm:ack 告警确认 -
video:read 视频查看
video:record 视频录制 - -
energy:view 能耗查看
log:read 日志查看 - -
knowledge:read 知识库查看
knowledge:write 知识库管理 - -
inspection:create 巡检创建 -
inspection:read 巡检查看
tray:read/write 蚕匾查看/管理
batch:read/write 批次查看/管理
rearing:read/write 饲养记录查看/管理
notification:read/write 订阅查看/管理 读写
weather:read 天气查看
lamp:read/write LAMP 检测查看/管理
consumable:read/write 耗材查看/管理
consultation:read/write 会诊查看/管理
trace:read/write 溯源查看/管理
user:manage 用户管理 - - -
audit:read 审计查看 - - -

9. MQTT 接口

9.1 遥测上行

订阅 Topicsilk/+/+/+/up/telemetry

Payload 示例:

{
  "msgId": "msg-1782833925818-1",
  "ts": 1782833925818,
  "metrics": {
    "temperature": 26.8,
    "humidity": 75.2,
    "lux": 320,
    "co2": 820
  }
}

9.2 控制下行

下行 Topicsilk/{deviceKey}/down/cmd

Payload 示例:

{
  "action": "on",
  "value": true,
  "ts": "2026-06-30T10:00:00.000Z"
}

10. 数据存储

10.1 PostgreSQL(业务数据)

保存用户、蚕房、设备、传感器、阈值、告警、摄像头、录像片段、审计日志、权限等业务数据。系统启动时先执行 server-go/migrations/ 下的版本化 SQL 迁移,再初始化权限种子数据;生产环境禁用 AutoMigrate。本地代码当前为 schema v9(对象授权与运营能力),开发服务器仍为已部署的 schema v8。

PG=postgresql://postgres:pan@localhost:5432/silk

10.2 Apache IoTDB(时序遥测)

保存高频时序遥测数据,后端通过 REST API 写入和查询。

IOTDB_URL=http://localhost:18081

IoTDB 路径示例:root.silk.telemetry.sensor-001.temperature

10.3 Valkey/Redis(跨实例认证状态)

用于 JWT 吊销、登录限流等跨实例状态;通知与事件箱持久化在 PostgreSQL,Redis 不可用时登录/刷新/吊销和已认证接口保守失败,不回退单机内存。

10.4 Ceph S3(录像存储)

录制片段按 5 分钟分段,每段独立 S3 对象 + DB 记录。

S3_ENDPOINT=http://100.83.103.1:7480
S3_ACCESS_KEY=silk-app
S3_SECRET_KEY=Silk-App-Secret-2026!
S3_BUCKET=silk-video-events

11. 服务器部署

详细部署流程参见 部署指南(物理机).md

11.1 服务架构

服务器 (100.83.103.1)
  ├── Go 后端       :3000   API 后端 (Gin)
  ├── 前端静态服务   :5174   Node.js server.cjs
  ├── Go 录制服务    :9090   recorder-go
  ├── PostgreSQL 14  :5432   业务数据库(实际版本 14
  ├── IoTDB 2.0.8    :18081  时序数据库
  ├── Valkey         :6379   缓存
  ├── VerneMQ        :1883   MQTT broker
  ├── Ceph RGW       :7480   S3 对象存储
  └── Docker
      ├── WVP        :18080  GB28181 信令
      ├── ZLMediaKit :8081   流媒体
      ├── MySQL      :3306   WVP 数据库
      └── Redis      :6379   WVP 缓存

11.2 Go 后端编译部署

# 交叉编译
cd D:\silk-master-84e4ddc\server-go
$env:GOOS="linux"; $env:GOARCH="amd64"
go build -o server-go-linux ./cmd/server
$env:GOOS=""; $env:GOARCH=""

# 上传 + 启动(使用 sshpass + ConnectTimeout 避免卡死)
C:\msys64\usr\bin\sshpass.exe -p "pan" C:\msys64\usr\bin\scp.exe -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR -o ConnectTimeout=10 D:\silk-master-84e4ddc\server-go\server-go-linux pan@100.83.103.1:/home/pan/silk/server-go/
C:\msys64\usr\bin\sshpass.exe -p "pan" C:\msys64\usr\bin\ssh.exe -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR -o ConnectTimeout=10 pan@100.83.103.1 "fuser -n tcp -k 3000 2>/dev/null; sleep 1; chmod +x /home/pan/silk/server-go/server-go-linux; setsid bash /home/pan/silk/server-go/start.sh </dev/null >/home/pan/silk/server-go/server-go.log 2>&1 &"

11.3 Go 后端环境变量

变量 默认值 说明
PG postgresql://postgres:pan@localhost:5432/silk PostgreSQL 连接串
APP_ENV development 运行环境;生产环境应设为 production
ALLOW_DEV_AUTOMIGRATE false 仅开发环境可显式开启 AutoMigrate,生产忽略此开关
WS_ALLOWED_ORIGINS http://localhost:5174,http://localhost:3000,... WebSocket 允许的 Origin,逗号分隔
REDIS redis://:pan@localhost:6379 Valkey/Redis 连接串;不可用时认证/限流接口返回 503
JWT_SECRET silk-secret-please-change-me JWT 签名密钥
JWT_EXPIRES_IN 2h JWT 有效期
MQTT mqtt://pan:pan@localhost:1883 MQTT 连接串
IOTDB_URL http://127.0.0.1:18081 IoTDB REST API
WVP_API_BASE http://localhost:18978 WVP API 地址(生产应为 18080
ZLM_API_BASE http://100.83.103.1:8081 ZLMediaKit API
RECORDER_API_BASE http://localhost:9090 录制服务地址
S3_ENDPOINT http://100.83.103.1:7480 Ceph S3 端点
S3_ACCESS_KEY silk-app S3 Access Key
S3_SECRET_KEY Silk-App-Secret-2026! S3 Secret Key
S3_BUCKET silk-video-events S3 Bucket
S3_BUCKET_IMAGES silk-images 知识库/巡检/检测图片桶(对象公开读)
AI_SERVICE_BASE http://localhost:8000 AI 推理服务地址
WECHAT_APPID (空) 微信小程序 AppID(订阅消息,占位)
WECHAT_SECRET (空) 微信小程序 AppSecret(占位)
WECHAT_TEMPLATE_ALARM / WECHAT_TEMPLATE_INSPECTION (空) 订阅消息模板 ID(占位)
QWEATHER_API_KEY / QWEATHER_LOCATION (空) 和风天气 Key 与位置(经纬度或 LocationID,占位)
QWEATHER_INTERVAL_MIN 30 天气预警定时评估间隔(分钟)
PORT 3000 监听端口
DEFAULT_ADMIN_USERNAME admin 默认管理员
DEFAULT_ADMIN_PASSWORD silk@123 默认密码

12. 本地开发

12.1 Web 前端

cd D:\silk-master-84e4ddc\web
npm install
npm run dev      # 开发模式,端口 5173,代理 /api 到 :3000
npm run build    # 生产构建
npm test         # Vitest 单元测试

12.2 React Native APP

cd D:\silk-master-84e4ddc\app
npm install

# 配置后端地址(.env 文件)
# API_BASE_URL=http://<服务器IP>:3000/api/v1

# 启动 Metro
npx react-native start

# 编译安装 Debug APK
npx react-native run-android

# 编译 Release APK
cd android
.\gradlew.bat assembleRelease
# 输出:android/app/build/outputs/apk/release/app-release.apk

12.3 微信小程序

cd D:\silk-master-84e4ddc\miniapp
npm install

npm run dev:weapp     # 微信小程序开发模式
npm run build:weapp   # 生产构建
npm run dev:h5        # H5 开发模式
npm run build:h5      # H5 生产构建

12.4 设备模拟器

cd D:\silk-master-84e4ddc\tools\simulator
npm install
npm run start

12.5 默认管理员

用户名:admin
密码:silk@123

12.6 ai-serviceAI 推理服务)

cd D:\silk-master-84e4ddc\ai-service
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt   # Linux: .venv/bin/pip install -r requirements.txt
.venv\Scripts\python -m pytest tests -q          # 单元测试
MODEL_MODE=mock .venv\Scripts\python -m uvicorn app.main:app --host 0.0.0.0 --port 8000
  • 接口:GET /healthPOST /detectmultipart 图片,返回 abnormalProbability)、POST /internal/stream-tasks(受限摄像头流拉帧任务)、GET /metrics(含 GPU 信息)
  • 默认 mock 模式且响应带 isMock=true;训练恢复后放 models/best.onnx 并设 MODEL_MODE=onnxMODEL_LABELS 可配类别、MODEL_VERSION 必须显式配置)
  • 开发服务器部署:/home/pan/ai-servicevenv + start.sh,:8000),服务器 pip 源已配置清华镜像

12.7 开发服务器部署摘要

  • 部署规则(备份/回滚/冒烟)见根目录 AGENTS.md「部署到开发服务器」;SSH/SFTP 工具为 scripts/devssh.pyPAN_SSH_PASS 环境变量传密码)
  • 服务清单:Go 后端 :3000、Web :5174、ai-service :8000、recorder-go :9090、PostgreSQL :5432、IoTDB :18081、VerneMQ :1883、Ceph RGW :7480、WVP :18080、ZLM :8081
  • 可观测性:HTTP 请求统一 X-Request-ID;日志脱敏;GET /api/v1/ops/metrics 提供依赖指标;SLO/负载/备份恢复演练文档见 docs/operations/
  • 验收门禁:需求追踪、核心端到端用例和发布清单见 docs/acceptance/

13. Git 注意事项

不要提交依赖目录和本地运行产物。.gitignore 应包含:

node_modules/
dist/
*.log
.env
server-go-linux
recorder-go-linux
*.apk
android/app/build/
ios/Pods/

如误将 node_modules 加入索引:

git rm -r --cached server-go web app miniapp tools/simulator