Commit Graph

152 Commits

Author SHA1 Message Date
Dai0814 9cd518227d fix(website): favicon 路径与文档站链接两处 404
实测发现两个问题,均导致线上 404:

1. favicon 不生效
   favicon.svg 放在 website/public/,但 srcDir 是 ./pages,
   VitePress 的 public 目录相对 srcDir 解析,即应为 pages/public/。
   原位置不被打包,每个页面的 /www/favicon.svg 全部 404。
   → 移到 website/pages/public/favicon.svg

2. 「文档中心」导航链接 404
   DOCS_URL 默认 '/docs/',VitePress 会给站内链接自动加 base 前缀,
   实际渲染成 '/www/docs/',而网关没有这个路径(文档站在 /docs/)。
   → 默认值改为完整 URL,VitePress 判定为外链不做前缀拼接

验证(SITE_BASE=/www/ 与 / 两形态)
- 页面引用完整性:146 → 139 条,失效 15 → 0
- HTTP 实测(模拟 nginx alias + try_files):8 页 200、
  CSS/JS/favicon 200、/www 301、不存在页 404
2026-11-04 12:33:08 +08:00
技小云 d78379486c feat: 新增开源版官网骨架 website/,并接入部署编排与网关路由
- website/:VitePress 官网工程(首页/功能/对比/快速开始/部署运维/教程/社区),与文档站同构
- 两种形态由 SITE_BASE 决定:/www/ 子路径(过渡)与 / 根路径(独立域名),内容同源
- deploy/:新增 with-website profile、网关 /www/ 路由、多域名 website vhost 段
- Makefile:新增 website 镜像条目与 make website 目标
- 教程页给出部署/使用两支视频的元数据与录制要求,官网留有教程入口
2026-11-04 10:41:05 +08:00
MiFaZhan e98f8561f7 fix(deploy): nginx 上游运行期重新解析 + 就绪探针;内存上限按 8C/32G 重新分配
mirror-to-gitee / mirror (push) Successful in 9s
问题:容器重建换 IP 后,网关与 admin-ui 仍往旧 IP 打,/openapi 与 /api
整片 502,必须手动重启 nginx 容器才恢复(2026-11-03 实机踩到)。

编排
- admin-svr / openapi / admin-ui / docs 增加 healthcheck
- admin-ui、gateway、nginx 改 depends_on: condition: service_healthy,
  保证 nginx 启动时后端已就绪
- 新增 deploy/compose.memlimit.yml(原来只存在于某台演示机上):
  全套上限 8.5G、实测常驻 2G,留给同机其它服务 20G+;
  MySQL buffer pool 128M→768M、max_connections 151→300

nginx
- gateway / admin-ui / iotlcm.conf 示例 统一改 resolver 127.0.0.11 valid=10s
  + upstream zone/resolve:运行期跟随 IP 变化,不必重启(实测 6s 内自愈)
2026-11-03 10:40:48 +08:00
MiFaZhan 70749bea7a docs: README 手册入口改为公网地址(open.5iot.com:5051)
mirror-to-gitee / mirror (push) Has been cancelled
使用手册(Web / 小程序)、部署手册、OpenAPI 合同、共享 Token 全部指向
在线文档站,附文档源码位置(docs/)与自建实例的 8019 访问方式。
2026-11-03 09:30:23 +08:00
MiFaZhan fd42b5976e docs: 重写 README(用户视角,含手册跳转)+ 去掉「开源版」措辞 + 单端口入口 5051
mirror-to-gitee / mirror (push) Successful in 4s
trigger-jenkins-oss / trigger (push) Successful in 0s
README
- 标题去掉「(开源版)」:对使用者就是 iotLCM
- 新增「文档」表:使用手册(Web 端 / 小程序端)、部署手册、OpenAPI 合同、
  共享 Token 接口,全部指向仓内 docs/ 路径;并给出部署后的文档站地址
- 补功能概览、服务构成(带镜像 tag)、从源码构建、版本与镜像、许可

去措辞
- Gitee 建仓描述同步去掉「(开源版)」

单端口入口(新增,对外默认 5051)
- deploy/config/gateway/nginx.conf:/ → 管理端、/docs/ → 文档站、
  /openapi/ 与 /route/open/ → openapi
- compose 增加 gateway 服务(profile with-gateway),端口由 GATEWAY_PORT 控制
  实测:/ 200、/docs/ 200(含静态资源)、/api/agent/dept/list 200、
  /api/system/auth/login 返回后端真实 JSON
- nginx profile 的 80 端口改为可配 NGINX_HTTP_PORT(文档早有提及但 compose 写死)
- 部署手册概览页修正过期内容(schema 单文件、服务清单补全)、optional 增单端口入口段
v1.0.4
2026-11-02 14:57:57 +08:00
MiFaZhan a7c15cf891 chore: 移除一次性探测/清理工作流(Gitee 删除需 projects 权限,API 侧 403)
mirror-to-gitee / mirror (push) Successful in 4s
2026-11-02 14:25:34 +08:00
MiFaZhan 2548976f73 chore: 探测 Gitee 删除端点(一次性)
mirror-to-gitee / mirror (push) Successful in 5s
2026-11-02 14:24:18 +08:00
如是 & 技小云 17c839daac fix(deploy): Mock 通道凭据对齐挡板默认值
mirror-to-gitee / mirror (push) Successful in 5s
schema/init.sql 里 sim_yd_mock_v5 通道的 app_key/app_secret 仍是内网挡板的老值(100059999270000006 / 老口令),与开源版挡板 onelink-mock 的默认凭据(demo_appid / demo_password,见 onelink-mock/internal/service/store.go 的 defaultStore())不一致,导致 chan 侧向挡板换 Token 失败。

改为挡板当前实际默认值,并在注释里标注取值来源。
2026-11-02 14:23:03 +08:00
MiFaZhan f76e988689 chore: 清理工作流改为 artifact 回报(Gitea 无日志读取 API)
mirror-to-gitee / mirror (push) Successful in 7s
2026-11-02 14:22:00 +08:00
MiFaZhan 1634d27a43 chore: 一次性清理工作流(删除 Gitee 侧 12 个已并入单仓的旧仓)
mirror-to-gitee / mirror (push) Successful in 5s
删除后会再删掉本文件。
2026-11-02 14:20:13 +08:00
MiFaZhan 42d12d905a chore: 小程序线(app)固定 v1.0.2,不跟随平台 tag
mirror-to-gitee / mirror (push) Successful in 5s
版本号与功能一一对应:小程序线功能停在 v1.0.2,镜像 tag 也停在 v1.0.2,
平台后续发 v1.0.5 时它不动。

- deploy/docker-compose.yml:app-server / app-web 两行回退 v1.0.2
- Makefile:IMAGE_MAP 增加第 5 列「固定版本」,app 两行填 v1.0.2,
  本地构建与 CI 行为一致
- 根 README:新增「小程序线是独立版本线」说明
- app/README.md:标注本目录对应 v1.0.2,不跟随平台 tag
- 文档:deploy/README 版本表、build-image 的 tag 表与说明、
  offline / prerequisites / configuration 示例 tag 全部回退 v1.0.2

CI 侧由 Jenkins 流水线的 PIN 表(app|v1.0.2)保证:tag 构建自动跳过 app,
需要重建时单独触发 SERVICES=app VERSION=v1.0.2。
2026-11-02 14:11:13 +08:00
MiFaZhan 89a15c4fca chore: make help 只列命令,不再多印配置行
mirror-to-gitee / mirror (push) Successful in 4s
2026-11-02 13:59:47 +08:00
MiFaZhan 34669c9e1f chore: 镜像校验覆盖 tag 集合
mirror-to-gitee / mirror (push) Successful in 4s
推送后除比对 main 的 sha,还比对本地与 Gitee 端的 tag 集合,
不一致即判失败(Gitee 限流时容易出现“推送成功但 tag 丢失”)。
2026-11-02 13:55:45 +08:00
MiFaZhan 12512b06ff fix: 单仓后统一版本号与访问地址说明
mirror-to-gitee / mirror (push) Successful in 4s
trigger-jenkins-oss / trigger (push) Successful in 0s
- 编排与文档里的 app 镜像 tag 由 v1.0.2 统一为 v1.0.4(单仓一个发布版本,
  v1.0.4 包含 app 线,不再保留源仓的历史 tag 差异)
- deploy/README.md、docs/deploy/install.md 明确业务端口默认只绑 127.0.0.1,
  并给出对外访问的两种做法(with-nginx profile / 改绑定)
- mirror-to-gitee 增加推送后校验:远端 main 与本地不一致则判失败
2026-11-02 13:40:26 +08:00
MiFaZhan f7cab5ad5c chore: 整合为单仓 iotlcm(12 个仓 → 1 个仓)
mirror-to-gitee / mirror (push) Successful in 14s
把原来 12 个独立仓合并为单仓多服务结构,各仓完整提交历史通过
read-tree 并入保留(137 个提交,blame 可追溯)。

目录:
  admin-svr/ admin-ui/ app/{server,app}/ openapi/ worker-svr/
  upstream-chan/ upstream-proxy/ sms/ bot/ docs/ onelink-mock/ deploy/

同时:
- 新增根 README(目录说明、快速开始、源码构建、镜像发布、许可)
- 新增根 Makefile(make build / test / images / docs)
- 新增根 .gitattributes / .gitignore,删掉 12 份重复的 Apache LICENSE
  (admin-ui/ 与 app/app/ 的 MIT 上游许可保留)
- 各服务的 .gitea/workflows 收敛到仓根:trigger-jenkins.yml(tag 构建全部
  服务)+ mirror-to-gitee.yml(自动建 Gitee 仓后镜像)
- 文档内跨仓绝对链接改为仓内相对路径;部署/构建文档改为单仓路径
2026-11-02 13:35:58 +08:00
MiFaZhan 2923c78755 chore: 并入 iotlcm-worker-svr 历史到 worker-svr/(原提交 96f0f4e) 2026-11-02 13:28:03 +08:00
MiFaZhan 6de2e503cc chore: 并入 iotlcm-upstream-proxy 历史到 upstream-proxy/(原提交 44209ec) 2026-11-02 13:28:02 +08:00
MiFaZhan 9c9f6c2a29 chore: 并入 iotlcm-upstream-chan 历史到 upstream-chan/(原提交 1e74497) 2026-11-02 13:28:02 +08:00
MiFaZhan 691b792391 chore: 并入 iotlcm-sms 历史到 sms/(原提交 1d38bc4) 2026-11-02 13:28:02 +08:00
MiFaZhan b10b8cfc51 chore: 并入 iotlcm-openapi 历史到 openapi/(原提交 3b05d5a) 2026-11-02 13:28:02 +08:00
MiFaZhan c3c1f09ebd chore: 并入 iotlcm-onelink-mock 历史到 onelink-mock/(原提交 f398595) 2026-11-02 13:28:02 +08:00
MiFaZhan 029f81fb1c chore: 并入 iotlcm-docs 历史到 docs/(原提交 947e22e) 2026-11-02 13:28:01 +08:00
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 f3985950cc 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:31 +08:00
MiFaZhan 947e22e3b9 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:30 +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 1d38bc4226 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:59 +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 44209ecaaf 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:57 +08:00
MiFaZhan 1e74497728 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:56 +08:00
MiFaZhan 96f0f4eacd 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:55 +08:00
MiFaZhan 3b05d5a73a 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:53 +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 eeeb6572ba fix: nginx 在 /docs/ 下服务产物,修复白屏
VitePress 配置 base: '/docs/',构建出的 HTML 里资源引用是绝对路径 /docs/assets/xxx;
而 dist 目录是平铺的(index.html、assets/ 直接在根)。原 nginx.conf 从根路径服务,
/docs/assets/* 全部 404 → 页面能打开但 JS/CSS 加载失败,白屏、点击无反应。

改为用 alias 把 /docs/ 前缀剥掉再落到产物目录,并加 / -> /docs/ 的 302,
避免直接访问根路径白屏。

实测(本地构建镜像后):/docs/ 200、/docs/manual/web/ 200、/docs/openapi/ 200、
核心 CSS 资源 200;/ 返回 302。
2026-10-30 13:11:58 +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 dfeb5e8d13 docs: 删除 fullsync/supply 的内部记录,修复 README 悬空链接
- 删除 internal/fullsync/supply/README.md:后半段「预演门禁与回退记录」含内网
  Compose 目录(/home/xjzl/...)、两个镜像 sha256、内部挂载路径与 origin/main 引用,
  属内网部署记录,不应公开;前半段为内部实现说明,一并移除(代码包注释已足够)
- README:移除指向已删文件 SIM_STATUS_RUN_ACCOUNTING.md 的链接,
  改为直述 simStatusQueueSync.redisKeyPrefix 的用途
- README:移除指向已删文件 docs/角色权限任务切换.md 的链接,部署顺序改为直述要求
- go build ./... 通过
2026-10-30 11:50:17 +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 ce0db55e36 docs: 移除开发过程文档,开源版文档统一见文档站
- docs/superpowers/plans/2026-07-13-sqlite-generated-cards.md(SQLite 挡板改造实施计划,含任务分解与勾选清单)

保留 docs/deploy.md(面向使用者的部署说明)。

文档站:https://git.5iot.com/iotlcm-public/iotlcm-docs
2026-10-30 11:43:10 +08:00