Commit Graph

65 Commits

Author SHA1 Message Date
MiFaZhan fa1f96e942 chore: 并入 iotlcm-deploy 历史到 deploy/(原提交 eb97c53) 2026-11-02 13:28:00 +08:00
MiFaZhan 05014446c3 chore: 并入 iotlcm-bot 历史到 bot/(原提交 31dbc1d) 2026-11-02 13:28:00 +08:00
MiFaZhan 226495365e chore: 并入 iotlcm-app 历史到 app/(原提交 f40bda9) 2026-11-02 13:28:00 +08:00
MiFaZhan 03ef151f5b chore: 并入 iotlcm-admin-ui 历史到 admin-ui/(原提交 f305eab) 2026-11-02 13:27:59 +08:00
MiFaZhan 193f7393c0 chore: 并入 iotlcm-admin-svr 历史到 admin-svr/(原提交 49818c6) 2026-11-02 13:27:59 +08:00
MiFaZhan 976980a3f5 chore: 初始化 iotlcm 单仓(开源版) 2026-11-02 13:27:59 +08:00
MiFaZhan eb97c5300a fix: 修复代理转发端口缺失与 mock 通道未实例化
测试反馈两个问题:

1. 代理转发地址只写了服务名 upstream-chan,未带端口 → 默认连 80 端口被拒。
   改为 upstream-chan:8110。已核对其它服务(admin-svr / openapi / app-server /
   worker-svr)的上游地址均带端口,只有 upstream-proxy 这一处遗漏。

2. 直连 8110 查询报「通道未实例化」。根因在种子数据的 is_normal:
   该字段语义是 0=正常、1=异常(chan 侧 CanCreateInstance 只在 *IsNormal==0 时
   创建实例;NULL 也不合格)。mock 通道原来写的 1,因此实例从未创建。
   改为 0。注意内网演示环境种子同样是 1,属开源版修正。
   种子的 ON DUPLICATE KEY UPDATE 已包含 is_normal,老库重跑该段即可修复。

已验证(清空 data 目录从零启动):
- t_sim_channels 中 channel_yd_mock 的 is_normal=0
- chan 日志出现 Create channel instance success, chanKey: channel_yd_mock
- 日志无 abnormal / 未实例化 相关记录
2026-10-30 17:44:02 +08:00
MiFaZhan 01d1e39c34 fix: docs 镜像改回 v1.0.4(修复已并入该版本,不新增版本号)
版本号与功能一一对应,这是开源发布版本,修复不能自造新版本号。

- iotlcm-docs 的 git tag v1.0.4 前移到含 nginx 修复的提交(947e22e)
- 镜像 iotlcm/iotlcm:iotlcm-docs-v1.0.4 用修复版覆盖(现 digest 8ae5b646)
- 删除临时产生的 git tag v1.0.5 与镜像 tag iotlcm-docs-v1.0.5
- 本仓 docs 镜像 tag 从 v1.0.5 改回 v1.0.4

实测重新拉取 v1.0.4 后:/ 302、/docs/ 200、/docs/manual/web/ 200、核心 CSS 200。
2026-10-30 13:39:20 +08:00
MiFaZhan a8a5537c69 ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
  避免某次推送失败后长期不同步
2026-10-30 13:20:32 +08:00
MiFaZhan 31dbc1d910 ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
  避免某次推送失败后长期不同步
2026-10-30 13:20:00 +08:00
MiFaZhan f40bda99a8 ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
  避免某次推送失败后长期不同步
2026-10-30 13:19:58 +08:00
MiFaZhan f305eab7d6 ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
  避免某次推送失败后长期不同步
2026-10-30 13:19:52 +08:00
MiFaZhan 49818c6dbe ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
  避免某次推送失败后长期不同步
2026-10-30 13:19:51 +08:00
MiFaZhan 6b5fb707c2 fix: docs 镜像升级到 v1.0.5,修复文档站白屏
测试反馈:访问文档站白屏、点击无反应。

根因:VitePress 配置 base: '/docs/',构建产物里资源引用是绝对路径 /docs/assets/xxx,
而 dist 目录是平铺的;镜像里的 nginx.conf 从根路径服务,/docs/assets/* 全部 404。
(此前修过同一问题,v1.0.4 同步代码时被覆盖回旧配置。)

上游已在 iotlcm-docs 修 nginx.conf(alias 剥前缀 + / -> /docs/ 重定向)并打 v1.0.5,
镜像 iotlcm-docs-v1.0.5 已由 tag 推送自动构建入库。

本仓把 docs 镜像 tag 从 v1.0.4 升到 v1.0.5。
实测:/ 302、/docs/ 200、/docs/manual/web/ 200、核心 CSS 200。
2026-10-30 13:19:18 +08:00
MiFaZhan 56e930c7d0 docs: 初始化脚本注释去掉内部环境措辞(仅注释,不影响执行)
schema/init.sql 两处「照预演」的注释改为直述授权范围,避免出现内部环境字样。
SQL 语句本身未改动。
2026-10-30 11:50:19 +08:00
MiFaZhan 644cbe164d docs: 修复 crud-style 模板 README 的悬空引用
MEMORY.md 已从开源仓移除,README 仍要求「必须同步阅读 MEMORY.md」并列出其内容。
改为直接用「常见踩坑」小节承载这些纠错要点,目录树中同步去掉 MEMORY.md 条目。
2026-10-30 11:50:18 +08:00
MiFaZhan 5b039393dc docs: 移除开发过程文档,开源版文档统一见文档站
- vue/aaa.md(临时草稿,实为 Vue 代码片段,扩展名误写成 .md)
- vue/apps/web-antd/src/template/iotlcm-crud-style/MEMORY.md(内部迁移实战记忆与踩坑记录,含本机绝对路径)

文档站:https://git.5iot.com/iotlcm-public/iotlcm-docs
2026-10-30 11:43:53 +08:00
MiFaZhan f38f15dd7e docs: 移除开发过程文档,开源版文档统一见文档站
- AGENTS.md(内部 agent 协作规范与 GoFrame/Vben 开发约定,含内部项目概述)

文档站:https://git.5iot.com/iotlcm-public/iotlcm-docs
2026-10-30 11:43:20 +08:00
MiFaZhan 0e8b596bf6 docs: 移除开发过程文档,开源版文档统一见文档站
- docs/agent-role-template.md(代理角色模板与机构权限上限,内部业务规则)
- docs/agent-role-template-deployment.md(代理模板上线配置,含各环境角色 ID 核对)
- docs/角色权限异步同步.md(RabbitMQ 多级权限同步设计与失败重试语义)
- docs/普通角色与模板校验边界.md(普通角色维护边界与校验规则)

文档站:https://git.5iot.com/iotlcm-public/iotlcm-docs
2026-10-30 11:40:42 +08:00
MiFaZhan 69a136b05d ci: main/tag 推送时自动镜像到 Gitee
新增 .gitea/workflows/mirror-to-gitee.yml
2026-10-30 11:27:41 +08:00
MiFaZhan 468796d843 ci: main/tag 推送时自动镜像到 Gitee
新增 .gitea/workflows/mirror-to-gitee.yml:
- 触发:push 到 main、push v* tag、手动 dispatch
- 动作:git clone --mirror 源仓 → git push --mirror 到 gitee.com/snowgoat/<同名仓库>
- 凭据:组织密钥 SRC_GIT_TOKEN(源仓只读)、GITEE_TOKEN / GITEE_OWNER / GITEE_USER(目标)
2026-10-30 11:27:31 +08:00
MiFaZhan 139ce6baad ci: main/tag 推送时自动镜像到 Gitee
新增 .gitea/workflows/mirror-to-gitee.yml:
- 触发:push 到 main、push v* tag、手动 dispatch
- 动作:git clone --mirror 源仓 → git push --mirror 到 gitee.com/snowgoat/<同名仓库>
- 凭据:组织密钥 SRC_GIT_TOKEN(源仓只读)、GITEE_TOKEN / GITEE_OWNER / GITEE_USER(目标)
2026-10-30 11:27:31 +08:00
MiFaZhan 70fcb230eb ci: main/tag 推送时自动镜像到 Gitee
新增 .gitea/workflows/mirror-to-gitee.yml:
- 触发:push 到 main、push v* tag、手动 dispatch
- 动作:git clone --mirror 源仓 → git push --mirror 到 gitee.com/snowgoat/<同名仓库>
- 凭据:组织密钥 SRC_GIT_TOKEN(源仓只读)、GITEE_TOKEN / GITEE_OWNER / GITEE_USER(目标)
2026-10-30 11:27:27 +08:00
MiFaZhan af3988a738 ci: main/tag 推送时自动镜像到 Gitee
新增 .gitea/workflows/mirror-to-gitee.yml:
- 触发:push 到 main、push v* tag、手动 dispatch
- 动作:git clone --mirror 源仓 → git push --mirror 到 gitee.com/snowgoat/<同名仓库>
- 凭据:组织密钥 SRC_GIT_TOKEN(源仓只读)、GITEE_TOKEN / GITEE_OWNER / GITEE_USER(目标)
2026-10-30 11:27:27 +08:00
MiFaZhan 1e3e2c4bb9 ci: Jenkins job 改由组织密钥指定,适配 folder 化
Jenkins 的 job 已移入文件夹 iotlcm-opensrc,访问路径变为
/job/iotlcm-opensrc/job/iotlcm-oss-build/,原硬编码的 /job/iotlcm-oss-build/ 会 404。

改为读取组织密钥 JENKINS_JOB_PATH,默认回退到旧路径。
以后 Jenkins 里再移动 job 只需改该密钥,不必改 11 个仓。
2026-10-30 11:10:48 +08:00
MiFaZhan da84d3f010 ci: Jenkins job 改由组织密钥指定,适配 folder 化
Jenkins 的 job 已移入文件夹 iotlcm-opensrc,访问路径变为
/job/iotlcm-opensrc/job/iotlcm-oss-build/,原硬编码的 /job/iotlcm-oss-build/ 会 404。

改为读取组织密钥 JENKINS_JOB_PATH,默认回退到旧路径。
以后 Jenkins 里再移动 job 只需改该密钥,不必改 11 个仓。
2026-10-30 11:10:47 +08:00
MiFaZhan c65fe7520f ci: Jenkins job 改由组织密钥指定,适配 folder 化
Jenkins 的 job 已移入文件夹 iotlcm-opensrc,访问路径变为
/job/iotlcm-opensrc/job/iotlcm-oss-build/,原硬编码的 /job/iotlcm-oss-build/ 会 404。

改为读取组织密钥 JENKINS_JOB_PATH,默认回退到旧路径。
以后 Jenkins 里再移动 job 只需改该密钥,不必改 11 个仓。
2026-10-30 11:10:43 +08:00
MiFaZhan 407bb643ed ci: Jenkins job 改由组织密钥指定,适配 folder 化
Jenkins 的 job 已移入文件夹 iotlcm-opensrc,访问路径变为
/job/iotlcm-opensrc/job/iotlcm-oss-build/,原硬编码的 /job/iotlcm-oss-build/ 会 404。

改为读取组织密钥 JENKINS_JOB_PATH,默认回退到旧路径。
以后 Jenkins 里再移动 job 只需改该密钥,不必改 11 个仓。
2026-10-30 11:10:42 +08:00
MiFaZhan d740123174 chore: run.sh 加可执行位,校正首次启动耗时说明
实测从空目录执行 docker compose up -d:33 秒全部服务启动,
MySQL 初始化出 95 表、TDengine 建表校验通过。
2026-10-30 11:00:14 +08:00
MiFaZhan d84f93ce0a feat: 内置 TDengine 时序库,自动建库建表
此前编排不含时序库,首页流量/用量图表、单卡流量历史等依赖时序数据的功能
不可用。现补上:

- 新增 tdengine 服务(镜像 iotlcm/iotlcm:tdengine-3.3.6.13)
  端口 6041(taosAdapter/WebSocket,应用用这个)+ 6030,数据卷 ./data/tdengine
- 新增 tdengine-init 一次性服务:等 tdengine 健康后建库建表,并校验超级表存在,
  缺表则以非零码退出
- 建库建表 SQL 取自生产环境 SHOW CREATE STABLE(仅结构无数据):
  iotlcm_daily   DURATION 7d  KEEP 1095d  ms  -> t_sim_card_usage_daily
  iotlcm_monthly DURATION 30d KEEP 1095d  ms  -> t_sim_card_usage_monthly
- 三个服务的 tsdb.tdengine 配置指向 tdengine:6041(admin-svr / app-server / worker-svr)

踩坑记录:taos -f 是按行执行语句的,多行 CREATE STABLE 会报
Incomplete SQL statement,因此 SQL 必须单行;且 taos 出错时退出码仍为 0,
故 run.sh 额外做超级表校验。

已验证:初始化 4 条语句全部 Create OK、0 error;按 worker 的 INSERT 形式
(USING ... TAGS)写入成功、按 admin 的查询形式(SELECT ts,usage_mb,package_code,iccid)
可读回;整栈 15 个服务全 Up,admin-svr/openapi/sms/docs 均 200,worker 无时序库报错。
2026-10-30 10:02:32 +08:00
MiFaZhan 1f07186679 ci: 打 tag 时自动触发 Jenkins 构建镜像
新增 .gitea/workflows/trigger-jenkins.yml:
- 触发时机:推送 v* tag(main 日常提交不触发),也可手动 dispatch
- 动作:调用 Jenkins 任务 iotlcm-oss-build,参数 SERVICES=<仓库名>、VERSION=<tag>
- 凭据来自组织密钥 JENKINS_URL / JENKINS_USER / JENKINS_API_TOKEN
- 同一 ref 连续推送时取消旧任务
2026-10-30 09:39:19 +08:00
MiFaZhan 8e89792fa9 ci: 打 tag 时自动触发 Jenkins 构建镜像
新增 .gitea/workflows/trigger-jenkins.yml:
- 触发时机:推送 v* tag(main 日常提交不触发),也可手动 dispatch
- 动作:调用 Jenkins 任务 iotlcm-oss-build,参数 SERVICES=<仓库名>、VERSION=<tag>
- 凭据来自组织密钥 JENKINS_URL / JENKINS_USER / JENKINS_API_TOKEN
- 同一 ref 连续推送时取消旧任务
2026-10-30 09:39:18 +08:00
MiFaZhan a318d1fdcd ci: 打 tag 时自动触发 Jenkins 构建镜像
新增 .gitea/workflows/trigger-jenkins.yml:
- 触发时机:推送 v* tag(main 日常提交不触发),也可手动 dispatch
- 动作:调用 Jenkins 任务 iotlcm-oss-build,参数 SERVICES=<仓库名>、VERSION=<tag>
- 凭据来自组织密钥 JENKINS_URL / JENKINS_USER / JENKINS_API_TOKEN
- 同一 ref 连续推送时取消旧任务
2026-10-30 09:39:13 +08:00
MiFaZhan dae1481496 ci: 打 tag 时自动触发 Jenkins 构建镜像
新增 .gitea/workflows/trigger-jenkins.yml:
- 触发时机:推送 v* tag(main 日常提交不触发),也可手动 dispatch
- 动作:调用 Jenkins 任务 iotlcm-oss-build,参数 SERVICES=<仓库名>、VERSION=<tag>
- 凭据来自组织密钥 JENKINS_URL / JENKINS_USER / JENKINS_API_TOKEN
- 同一 ref 连续推送时取消旧任务
2026-10-30 09:39:12 +08:00
MiFaZhan 247e5b2a60 update: 镜像改为单仓库 iotlcm/iotlcm,tag 为「服务名-版本」
阿里云 ACR 的仓库地址结构是 <Registry>/<命名空间>/<镜像仓库>:<tag>,
此前每个服务单独建了一个镜像仓库(iotlcm/mysql、iotlcm/iotlcm-admin-svr …),
现按要求统一到同一个镜像仓库 iotlcm/iotlcm,服务名放进 tag。

镜像地址变化:
  crpi-.../iotlcm/iotlcm-admin-svr:v1.0.4
  → crpi-.../iotlcm/iotlcm:iotlcm-admin-svr-v1.0.4

17 个镜像(12 业务 + 5 基础组件)已重新打 tag 推送到单仓库并验证。
已验证 docker compose pull 全部拉取成功、14 个默认服务正常启动、
admin-svr/openapi/sms 健康检查 200、数据库 95 表。

Jenkins 流水线同步改为推送到 iotlcm/iotlcm,tag 自动拼接服务名。
2026-10-30 09:12:45 +08:00
MiFaZhan 8543038dad docs: 修正配置文件头部的旧版复制说明,明确 bot 为可选运维工具
- 7 个配置文件的头部仍写着「cp config.example.yaml config.yaml」,
  但该文件已不存在(现为直接可用的 config.yaml),改为准确说明
- config/bot 补充说明:飞书通知是可选运维工具,非平台功能,
  默认不启动;使用需自行在飞书开放平台创建应用,不提供企业凭据
- README 同步:去掉「开源未提供企业凭据」的措辞,改为使用者自备
2026-10-30 08:47:21 +08:00
MiFaZhan bf2656e95f docs: 说明时序库未内置的功能限制 2026-10-29 18:20:05 +08:00
MiFaZhan b60695b0e5 fix: 补齐异步办理恢复表并校正初始化文档 2026-10-29 18:07:50 +08:00
MiFaZhan 57e03233f8 fix: 按管理服务实际加密算法重置种子账号口令 2026-10-29 17:56:46 +08:00
MiFaZhan 94e09fd013 fix: 恢复管理服务缺失的数据库连接配置 2026-10-29 17:32:46 +08:00
MiFaZhan 314e213a5a update: 固定 12 个业务镜像版本并修正部署健康检查 2026-10-29 17:21:59 +08:00
MiFaZhan e6abbf65dd docs: 校正初始化脚本的表和种子数据统计 2026-10-29 17:14:58 +08:00
MiFaZhan 616451b29d update: 数据库初始化为单文件,换用演示环境种子库(v1.0.4 对齐)
原 13 个分散脚本整合为 schema/init.sql 一个文件,来源换成演示环境
正在使用的种子库(结构已与生产核对,89 表基线)。

内容变化(相比旧的 12 文件版本):
- 新增 v1.0.4 前置段:t_export_task(导出中心)、sys_notice_user、
  card_channel_assoc.channel_id 扩宽为 varchar(64)、9 条菜单权限
- 修正 3 个真实缺陷:cron 表达式 L 改为 28-31(调度器可解析)、
  通道模板 created_dept 103 改为 1(悬空机构致列表恒为空)、
  菜单 444 的 path 修正
- 数据库共 91 表(旧版 89,v1.0.4 新增 2 张)

脱敏:
- 18 个演示账号保留(出库/划拨依赖账号与部门树关联),
  昵称/邮箱/手机号/登录IP/头像改为占位或编造值
- 归属部门、租户的联系电话与邮箱一并处理
- 公司名、组织名 → 示例企业
- 内网/生产 IP、内部域名 → 删除或改为服务名
- Mock 通道地址指向 onelink-mock 服务
- 通道模板真实上游密钥置空
- sys_social(微信绑定)不随分发

口令处理:改为纯 SQL,不再用 .sh + 环境变量。
  业务账号:CREATE USER 语句内字面口令
  种子账号:UPDATE sys_user SET password = MD5(CONCAT(MD5('<口令>'), MD5(salt)))
  与 docker-compose.yml、config/*/config.yaml 保持同一口令

已验证:本地 MySQL 8.0 容器按 docker-entrypoint-initdb.d 实际导入,
无报错;表 91、菜单 456、账号 18、字典 86/436、通道模板 3、Mock 通道 1、
导出中心与通知表各 1、定时任务 20;18 条口令哈希自洽;
应用账号 u_iotlcm 可连库查询。
2026-10-29 16:32:27 +08:00
MiFaZhan 5fcf74deb0 sync: 对齐小程序 v1.0.2 生产代码并脱敏 2026-10-29 15:15:12 +08:00
MiFaZhan 24da1ec805 sync: 清理管理前端示例企业名称 2026-10-29 15:12:50 +08:00
MiFaZhan 3b1842782c fix: 清理管理前端注释中的企业标识 2026-10-29 15:03:49 +08:00
MiFaZhan 4d43238c63 update: 基础组件镜像改用 iotlcm 命名空间
阿里云企业版 ACR 的命名空间须在控制台预先创建,library 不存在。
统一放到已存在的 iotlcm 命名空间,与业务镜像同处一处:

  <REGISTRY>/iotlcm/mysql:8.0
  <REGISTRY>/iotlcm/redis:7.2
  <REGISTRY>/iotlcm/rabbitmq:4.3.5-management
  <REGISTRY>/iotlcm/consul:1.22
  <REGISTRY>/iotlcm/nginx:1.30

已实测推送成功。
2026-10-29 14:44:56 +08:00
MiFaZhan 59b307ca75 sync: 同步管理前端 v1.0.4 并脱敏 2026-10-29 14:43:14 +08:00
MiFaZhan c19c47d080 fix: 修正脱敏配置的内存数据库与示例说明 2026-10-29 14:39:47 +08:00
MiFaZhan 2206a393f7 sync: 同步 v1.0.4 并脱敏配置与镜像 2026-10-29 14:36:49 +08:00