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
|
6d3b8dab43
|
docs: 部署手册补充时序库已内置
部署编排已加入 TDengine(tdengine 3.3.6.13)与 tdengine-init 建库建表服务,
文档同步:
- prerequisites:外部依赖章节把 TDengine 从「可选/需自行部署」改为「已内置」,
列出两个库的分片/保留/超级表,并说明与生产的版本差异
- troubleshooting:历史流量无数据一节改为常见原因表(init 未成功、库表缺失、地址错误),
给出对应的排查命令与处理方式
|
2026-10-30 10:03:12 +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
|
c49aee102a
|
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:26 +08:00 |
|
MiFaZhan
|
98293f1813
|
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:25 +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
|
5c54d32752
|
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:16 +08:00 |
|
MiFaZhan
|
1eed26991f
|
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:14 +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
|
b1b83d806a
|
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:36:31 +08:00 |
|
MiFaZhan
|
b4944d7c21
|
docs: 部署手册镜像地址改为单仓库格式 iotlcm/iotlcm:<服务名>-<版本>
官方仓库把全部镜像放在同一个镜像仓库 iotlcm/iotlcm 下,靠 tag 区分服务:
.../iotlcm/iotlcm:mysql-8.0
.../iotlcm/iotlcm:iotlcm-admin-svr-v1.0.4
.../iotlcm/iotlcm:iotlcm-app-server-v1.0.2
改动页面:
- prerequisites:镜像仓库章节重写,补充命名空间/镜像仓库/tag 三层结构说明,
不再提 library/ 命名空间
- configuration:镜像地址示例与 tag 规则表
- build-image:构建命令、命名规则表、基础组件同步脚本、验证命令同步改
- offline:离线镜像清单
- split:分离部署示例
已构建通过,6 个相关页面均可访问。
|
2026-10-30 09:15:42 +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
|
08af8dfdbe
|
fix: 修复通道镜像复制不存在配置文件的构建错误
|
2026-10-29 17:10:40 +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
|
3ab3682d14
|
sync: 同步文档 v1.0.4 并脱敏
|
2026-10-29 15:45:46 +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
|
3e5a7453b8
|
sync: 同步 v1.0.4 开源代码并脱敏
|
2026-10-29 14:59:32 +08:00 |
|
MiFaZhan
|
a8874ca6f2
|
sync: 同步 v1.0.4 开源代码并脱敏
|
2026-10-29 14:49:18 +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 |
|
MiFaZhan
|
5299c13c1a
|
sync: 同步 OneLink 模拟服务 v1.0.4 并脱敏
|
2026-10-29 14:25:38 +08:00 |
|
MiFaZhan
|
24ae53bc0b
|
sync: 同步飞书机器人 v1.0.4 并脱敏
|
2026-10-29 14:19:44 +08:00 |
|
MiFaZhan
|
e6997f51ed
|
sync: 同步短信服务 v1.0.4 并脱敏
|
2026-10-29 14:17:14 +08:00 |
|
MiFaZhan
|
a7abd476f0
|
fix: runtime 阶段安装 tzdata,去掉从 builder 拷贝 zoneinfo
原 Dockerfile 的 runtime 用私有 alpine 镜像(预装 tzdata),
换成公共 alpine:3.23 后缺少 /usr/share/zoneinfo,且 builder 是
golang:alpine 也没有该文件,构建报 cache key not found。
改为 runtime 阶段 apk add tzdata,并删除 COPY --from=builder。
|
2026-10-29 13:42:26 +08:00 |
|
MiFaZhan
|
743e8e6e6e
|
fix: 删除从 builder 拷贝 zoneinfo 的指令
原 Dockerfile 依赖私有基础镜像预装的 tzdata;换成公共 golang:alpine 后
builder 阶段不存在 /usr/share/zoneinfo/Asia/Shanghai,构建报
'failed to compute cache key: not found'。
runtime 阶段已 apk add tzdata + ENV TZ=Asia/Shanghai,该 COPY 多余,直接删除。
|
2026-10-29 13:42:19 +08:00 |
|
MiFaZhan
|
14f4bb64e1
|
fix: 删除从 builder 拷贝 zoneinfo 的指令
原 Dockerfile 依赖私有基础镜像预装的 tzdata;换成公共 golang:alpine 后
builder 阶段不存在 /usr/share/zoneinfo/Asia/Shanghai,构建报
'failed to compute cache key: not found'。
runtime 阶段已 apk add tzdata + ENV TZ=Asia/Shanghai,该 COPY 多余,直接删除。
|
2026-10-29 13:42:18 +08:00 |
|
MiFaZhan
|
6c26f7a0e1
|
fix: 删除从 builder 拷贝 zoneinfo 的指令
原 Dockerfile 依赖私有基础镜像预装的 tzdata;换成公共 golang:alpine 后
builder 阶段不存在 /usr/share/zoneinfo/Asia/Shanghai,构建报
'failed to compute cache key: not found'。
runtime 阶段已 apk add tzdata + ENV TZ=Asia/Shanghai,该 COPY 多余,直接删除。
|
2026-10-29 13:42:17 +08:00 |
|
MiFaZhan
|
f754b27ac2
|
fix: Dockerfile 基础镜像改为公共仓库,移除私有仓库依赖
- FROM 改为 ${BASE_REGISTRY}/<镜像>:<版本>,默认 docker.io/library
内网可传 --build-arg BASE_REGISTRY=<自有仓库>/library 覆盖
- iotlcm-app: 删除 ENV GOPRIVATE=git.xiujie.cn
- iotlcm-app: VITE_MP_SERVER_BASEURL 默认值由内网域名改为 /app/api/v1
- Alpine 基础镜像固定到 3.23(原来未锁版本)
|
2026-10-29 13:33:25 +08:00 |
|
MiFaZhan
|
f42c9b29f6
|
fix: Dockerfile 基础镜像改为公共仓库,移除私有仓库依赖
- FROM 改为 ${BASE_REGISTRY}/<镜像>:<版本>,默认 docker.io/library
内网可传 --build-arg BASE_REGISTRY=<自有仓库>/library 覆盖
- iotlcm-app: 删除 ENV GOPRIVATE=git.xiujie.cn
- iotlcm-app: VITE_MP_SERVER_BASEURL 默认值由内网域名改为 /app/api/v1
- Alpine 基础镜像固定到 3.23(原来未锁版本)
|
2026-10-29 13:33:24 +08:00 |
|
MiFaZhan
|
a882ae65c5
|
fix: Dockerfile 基础镜像改为公共仓库,移除私有仓库依赖
- FROM 改为 ${BASE_REGISTRY}/<镜像>:<版本>,默认 docker.io/library
内网可传 --build-arg BASE_REGISTRY=<自有仓库>/library 覆盖
- iotlcm-app: 删除 ENV GOPRIVATE=git.xiujie.cn
- iotlcm-app: VITE_MP_SERVER_BASEURL 默认值由内网域名改为 /app/api/v1
- Alpine 基础镜像固定到 3.23(原来未锁版本)
|
2026-10-29 13:33:24 +08:00 |
|
MiFaZhan
|
c49b2bf404
|
fix: 修正阿里云镜像仓库域名拼写(ohlkkvgc)
|
2026-10-29 13:14:25 +08:00 |
|
MiFaZhan
|
fd72d088fc
|
fix: 修正阿里云镜像仓库域名(crpi-...ohlkkvgc,原为 ohlLkvgc 拼写错误)
17 处镜像地址全部更正。已验证:域名解析正常(47.108.26.223),
/v2/ 返回 401(可访问,需登录)。
|
2026-10-29 13:14:09 +08:00 |
|
MiFaZhan
|
73adad97f3
|
docs: 部署手册适配一键部署,去掉环境变量与示例配置
部署仓已改为开箱即用:config/ 直接是配置文件、口令等值内置在
docker-compose.yml、不再有 .env。
同步调整:
- 概览:部署流程改为 git clone + docker compose up -d 三步
- 配置说明:重写为「编排层 + 应用层」,说明为何不用环境变量
(GoFrame 不展开配置文件中的 ${VAR})、改口令需同步三处、
口令不能含 @ : / 等字符
- 启动与验证:去掉准备步骤,schema 脚本数改为 13 个
- 环境准备:镜像仓库改为描述编排文件中的实际地址
- 升级备份/离线/分离/自建镜像:.env 相关操作改为修改编排文件
|
2026-10-29 09:20:09 +08:00 |
|
MiFaZhan
|
5ddad0c5e5
|
feat: 一键部署——配置内置默认值,去掉示例复制与环境变量
目标:git clone 后 docker compose up -d 直接可用,无需任何手工准备。
变更:
- config.example/ → config/,config.example.yaml → config.yaml
不再需要 cp -r 与逐份修改
- 删除 .env / .env.example,值全部内置到 docker-compose.yml
(GoFrame 不展开配置文件中的 ${VAR},环境变量方案在 Go 侧不可用)
- 配置文件里的 ${VAR} 全部替换为字面默认值
- schema/04-users.sh 与 05-reset-passwords.sh 改为脚本内字面口令,
不再读取环境变量
- 新增 schema/13-seed-flow-package.sql 占位文件,说明套餐表为空的原因与补齐方式
- .gitignore 不再排除 config/ 与 .env(已无 .env)
- README 改为「一键启动」+「上线前必改」两张表
已验证:docker compose config 通过;compose 口令、各配置文件 DSN、
初始化脚本三处口令哈希一致;库名与 schema 中一致。
|
2026-10-29 09:17:26 +08:00 |
|
Dai0814
|
f169afc1bc
|
docs: 补充其他部署方式(二进制、自建镜像、分离、离线)
新增「其他部署方式」分组,共 5 页:
- 方式对比与选型:5 种方式对照、服务依赖表、服务间通信易错点
- 二进制部署:各服务 Go 版本/CGO/构建目录/产物名对照表,
admin-svr 需 CGO 的说明,交叉编译限制,systemd unit 模板,
静态前端交给 nginx,升级回滚流程
- 自建镜像:各仓 Dockerfile 位置与构建上下文、构建参数、
镜像命名规则、批量构建脚本、常见问题
- 分离部署:中间件独立,业务机精简 compose,配置改为外部地址
- 离线部署:镜像导出导入、校验、内网镜像仓库方案
同时记录一个实际阻塞:openapi/app/admin-ui 共 5 个 Dockerfile
的 FROM 仍指向私有镜像仓库,外部环境无法构建,页内给出替换方法。
|
2026-10-28 14:20:06 +08:00 |
|