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 仓后镜像)
- 文档内跨仓绝对链接改为仓内相对路径;部署/构建文档改为单仓路径
This commit is contained in:
MiFaZhan
2026-11-02 13:35:58 +08:00
parent 2923c78755
commit f7cab5ad5c
59 changed files with 328 additions and 3944 deletions
+20 -18
View File
@@ -36,19 +36,21 @@ yum groupinstall -y "Development Tools"
## 各服务构建参数
| 服务 | 仓库 | Go 版本 | CGO | 构建目录 | 产物名 | 监听端口 |
| --- | --- | --- | --- | --- | --- | --- |
| admin-svr | `iotlcm-admin-svr` | 1.23 | **需开启** | `server/` | `iotlcmadmin_svc` | 8008 |
| openapi | `iotlcm-openapi` | 1.23 | 关闭 | 根目录 | `iotlcm-openapi` | 8000 |
| worker-svr | `iotlcm-worker-svr` | 1.25 | 关闭 | 根目录 | `iotlcm-worker-svr` | 无(队列消费) |
| upstream-chan | `iotlcm-upstream-chan` | 1.25 | 关闭 | 根目录 | `iotlcmupstreamchan_svc` | 8110 / 8310 |
| upstream-proxy | `iotlcm-upstream-proxy` | 1.25 | 关闭 | 根目录 | `iotlcmupstreamproxy_svc` | 8510 |
| app-server | `iotlcm-app` | 1.23 | 关闭 | `server/` | `iotlcm-app-server` | 8010 |
| sms | `iotlcm-sms` | 1.25 | 关闭 | 根目录 | `iotlcm-sms` | 11190 / 11200 |
| bot | `iotlcm-bot` | 1.23 | 关闭 | `cmd/iotlcm-bot` | `iotlcm-bot` | 无 |
全部服务在同一仓的不同目录下,下表「目录」即 `git clone` 后的相对路径。
::: warning 仓库里的 Dockerfile 不能直接照搬
部分仓库的 Dockerfile 基础镜像指向私有仓库(见[自建镜像](build-image)),二进制构建不受影响,但 `FROM` 行需要替换。
| 服务 | 目录 | Go 版本 | CGO | 构建目录 | 产物名 | 监听端口 |
| --- | --- | --- | --- | --- | --- | --- |
| admin-svr | `admin-svr/` | 1.23 | **需开启** | `server/` | `iotlcmadmin_svc` | 8008 |
| openapi | `openapi/` | 1.23 | 关闭 | 根目录 | `iotlcm-openapi` | 8000 |
| worker-svr | `worker-svr/` | 1.25 | 关闭 | 根目录 | `iotlcm-worker-svr` | 无(队列消费) |
| upstream-chan | `upstream-chan/` | 1.25 | 关闭 | 根目录 | `iotlcmupstreamchan_svc` | 8110 / 8310 |
| upstream-proxy | `upstream-proxy/` | 1.25 | 关闭 | 根目录 | `iotlcmupstreamproxy_svc` | 8510 |
| app-server | `app/server/` | 1.23 | 关闭 | `server/` | `iotlcm-app-server` | 8010 |
| sms | `sms/` | 1.25 | 关闭 | 根目录 | `iotlcm-sms` | 11190 / 11200 |
| bot | `bot/` | 1.23 | 关闭 | `cmd/iotlcm-bot` | `iotlcm-bot` | 无 |
::: tip 基础镜像可替换
所有构建用 Dockerfile 的 `FROM` 都走 `ARG BASE_REGISTRY`(默认 `docker.io/library`),需要私有基础镜像时用 `--build-arg BASE_REGISTRY=...` 覆盖即可,见[自建镜像](build-image)。
:::
## 构建
@@ -56,8 +58,8 @@ yum groupinstall -y "Development Tools"
### admin-svr(需要 CGO)
```bash
git clone https://git.5iot.com/iotlcm-public/iotlcm-admin-svr.git
cd iotlcm-admin-svr/server
git clone <仓库地址> iotlcm
cd iotlcm/admin-svr/server
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
go build -trimpath \
@@ -71,8 +73,8 @@ go build -trimpath \
### 其余服务(静态编译)
```bash
git clone https://git.5iot.com/iotlcm-public/iotlcm-openapi.git
cd iotlcm-openapi
git clone <仓库地址> iotlcm
cd iotlcm/openapi
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -trimpath \
@@ -83,10 +85,10 @@ go build -trimpath \
-o iotlcm-openapi .
```
替换仓库名与产物名即可用于其他服务,`bot` 需要指定子目录:
替换服务目录与产物名即可用于其他服务,`bot` 需要指定子目录:
```bash
cd iotlcm-bot
cd iotlcm/bot
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -o iotlcm-bot ./cmd/iotlcm-bot
```
+51 -46
View File
@@ -18,53 +18,53 @@ outline: deep
## 各服务构建文件
| 服务 | 仓库 | Dockerfile | 构建上下文 |
全部服务在同一仓内,`git clone` 后按下表的**构建上下文**执行 `docker build`:
| 服务 | 目录 | 构建上下文 | Dockerfile(相对上下文) |
| --- | --- | --- | --- |
| admin-svr | `iotlcm-admin-svr` | `server/build/Dockerfile` | `server/` |
| openapi | `iotlcm-openapi` | `build/Dockerfile` | 仓库根目录 |
| worker-svr | `iotlcm-worker-svr` | `build/Dockerfile` | 仓库根目录 |
| upstream-chan | `iotlcm-upstream-chan` | `build/Dockerfile` | 仓库根目录 |
| upstream-proxy | `iotlcm-upstream-proxy` | `build/Dockerfile` | 仓库根目录 |
| app-server | `iotlcm-app` | `server/Dockerfile` | `server/` |
| app-web | `iotlcm-app` | `app/Dockerfile` | `app/` |
| admin-ui | `iotlcm-admin-ui` | `vue/build/Dockerfile` | `vue/` |
| sms | `iotlcm-sms` | `build/Dockerfile` | 仓库根目录 |
| bot | `iotlcm-bot` | `Dockerfile` | 仓库根目录 |
| docs | `iotlcm-docs` | `Dockerfile` | 仓库根目录 |
| onelink-mock | `iotlcm-onelink-mock` | `Dockerfile` | 仓库根目录 |
| admin-svr | `admin-svr/` | `admin-svr/server` | `build/Dockerfile` |
| admin-ui | `admin-ui/` | `admin-ui` | `vue/build/Dockerfile` |
| openapi | `openapi/` | `openapi` | `build/Dockerfile` |
| worker-svr | `worker-svr/` | `worker-svr` | `build/Dockerfile` |
| upstream-chan | `upstream-chan/` | `upstream-chan` | `build/Dockerfile` |
| upstream-proxy | `upstream-proxy/` | `upstream-proxy` | `build/Dockerfile` |
| app-server | `app/server/` | `app/server` | `Dockerfile` |
| app-web | `app/app/` | `app/app` | `Dockerfile` |
| sms | `sms/` | `sms` | `build/Dockerfile` |
| bot | `bot/` | `bot` | `Dockerfile` |
| docs | `docs/` | `docs` | `Dockerfile` |
| onelink-mock | `onelink-mock/` | `onelink-mock` | `Dockerfile` |
## ⚠️ 先处理私有基础镜像
> `admin-ui` 的上下文必须是 `admin-ui/`(不是 `admin-ui/vue/`)——它的 Dockerfile 里引用了 `vue/build/nginx.conf`。
**当前部分仓库的 Dockerfile 仍指向私有镜像仓库**,外部环境无法拉取,直接构建会失败:
一次构建全部:`make images REGISTRY=<镜像仓库>/iotlcm/iotlcm VERSION=<版本>`。
| 仓库 | 文件 | 问题 |
| --- | --- | --- |
| `iotlcm-openapi` | `manifest/docker/Dockerfile` | `FROM` 指向私有仓库 |
| `iotlcm-app` | `app/Dockerfile` | 2 处 `FROM` 指向私有仓库 |
| `iotlcm-app` | `server/Dockerfile` | 2 处 `FROM` 指向私有仓库 |
| `iotlcm-admin-ui` | `vue/build/Dockerfile` | 2 处 `FROM` 指向私有仓库 |
| `iotlcm-admin-ui` | `vue/build/DockerfileNoBuild` | `FROM` 指向私有仓库 |
## 基础镜像可替换
构建前把这些 `FROM` 改为公共镜像:
所有构建用 Dockerfile 都通过 `ARG BASE_REGISTRY` 拼接 `FROM`,默认值是公共镜像仓库 `docker.io/library`,**开箱即可构建**:
```dockerfile
# 修改前(私有仓库,外部不可达)
FROM crpi-xxxxxxxx.cn-beijing.personal.cr.aliyuncs.com/xxx/golangalpine:1.25.7-alpine3.23 AS builder
# 修改后(公共镜像)
FROM golang:1.25-alpine AS builder
ARG BASE_REGISTRY=docker.io/library
FROM ${BASE_REGISTRY}/golang:1.25-alpine AS builder
```
```dockerfile
FROM crpi-xxxxxxxx.cn-beijing.personal.cr.aliyuncs.com/xxx/nginx:1.30.0-alpine
内网或离线环境改走自己的镜像仓库时,构建时覆盖即可,不需要改 Dockerfile:
# 改为
FROM nginx:1.30-alpine
```bash
docker build --build-arg BASE_REGISTRY=harbor.internal.example.com/library \
-f admin-svr/server/build/Dockerfile -t ... admin-svr/server
```
::: tip 其余仓库的 Dockerfile 已可用
`admin-svr`、`worker-svr`、`upstream-chan`、`upstream-proxy`、`sms`、`bot`、`docs`、`onelink-mock` 的 Dockerfile 基础镜像均为公共镜像,可直接构建。
:::
各服务实际用到的基础镜像版本:
| 服务 | 基础镜像 |
| --- | --- |
| Go 服务(admin-svr / openapi / worker-svr / upstream-chan / upstream-proxy / app-server / sms / bot) | `golang:1.25-alpine`(bot 用 `golang:1.25-alpine`)、运行期 `alpine:3.23` |
| admin-ui / app-web | `node:24-alpine` 构建、`nginx:1.30-alpine` / `nginx:1.27-alpine` 运行 |
| docs | `node:22-alpine` 构建、`nginx:1.27-alpine` 运行 |
| onelink-mock | `golang:1.24-alpine` |
> `*/manifest/docker/Dockerfile` 是 GoFrame 脚手架留下的模板,不参与构建,可以忽略。
## 构建命令
@@ -75,36 +75,41 @@ COMMIT=$(git rev-parse --short HEAD)
VERSION=$(git describe --tags --always)
BUILD_TIME=$(date -u '+%Y-%m-%dT%H:%M:%SZ')
# 在仓库根目录执行(上下文 = openapi/)
docker build \
--build-arg BuildVersion=$VERSION \
--build-arg CommitID=$COMMIT \
--build-arg BuildTime=$BUILD_TIME \
-t your-registry/iotlcm/iotlcm:iotlcm-openapi-$VERSION \
.
-f openapi/build/Dockerfile openapi/
```
`admin-svr` 与 `app-server` 需指定上下文目录:
`admin-svr` 与 `app-server` 的上下文是模块目录:
```bash
cd iotlcm-admin-svr
docker build \
--build-arg BuildVersion=$VERSION \
--build-arg CommitID=$COMMIT \
--build-arg BuildTime=$BUILD_TIME \
-t your-registry/iotlcm/iotlcm:iotlcm-admin-svr-$VERSION \
-f server/build/Dockerfile server/
-f admin-svr/server/build/Dockerfile admin-svr/server/
```
### 前端服务
```bash
cd iotlcm-admin-ui/vue
docker build -t your-registry/iotlcm/iotlcm:iotlcm-admin-ui-$VERSION -f build/Dockerfile .
docker build -t your-registry/iotlcm/iotlcm:iotlcm-admin-ui-$VERSION \
-f admin-ui/vue/build/Dockerfile admin-ui/
```
```bash
cd iotlcm-app/app
docker build -t your-registry/iotlcm/iotlcm:iotlcm-app-web-$VERSION .
docker build -t your-registry/iotlcm/iotlcm:iotlcm-app-web-$VERSION \
-f app/app/Dockerfile app/app/
```
```bash
docker build -t your-registry/iotlcm/iotlcm:iotlcm-app-server-$VERSION \
-f app/server/Dockerfile app/server/
```
### 构建参数说明
@@ -115,7 +120,7 @@ docker build -t your-registry/iotlcm/iotlcm:iotlcm-app-web-$VERSION .
| `CommitID` | 提交号,便于追溯 |
| `BuildTime` | 构建时间 |
`openapi`、`worker-svr` 等仓库支持用 `GOPROXY` 构建参数替换代理:
`openapi`、`worker-svr` 等 Go 服务支持用 `GOPROXY` 构建参数替换代理:
```bash
docker build --build-arg GOPROXY=https://goproxy.cn,direct -t ... .
@@ -134,8 +139,8 @@ docker build --build-arg GOPROXY=https://goproxy.cn,direct -t ... .
| admin-svr | `iotlcm-admin-svr-<TAG>` | `.../iotlcm/iotlcm:iotlcm-admin-svr-v1.0.4` |
| admin-ui | `iotlcm-admin-ui-<TAG>` | `.../iotlcm/iotlcm:iotlcm-admin-ui-v1.0.4` |
| openapi | `iotlcm-openapi-<TAG>` | `.../iotlcm/iotlcm:iotlcm-openapi-v1.0.4` |
| app-server | `iotlcm-app-server-<TAG>` | `.../iotlcm/iotlcm:iotlcm-app-server-v1.0.2` |
| app-web | `iotlcm-app-web-<TAG>` | `.../iotlcm/iotlcm:iotlcm-app-web-v1.0.2` |
| app-server | `iotlcm-app-server-<TAG>` | `.../iotlcm/iotlcm:iotlcm-app-server-v1.0.4` |
| app-web | `iotlcm-app-web-<TAG>` | `.../iotlcm/iotlcm:iotlcm-app-web-v1.0.4` |
| upstream-chan | `iotlcm-upstream-chan-<TAG>` | `.../iotlcm/iotlcm:iotlcm-upstream-chan-v1.0.4` |
| upstream-proxy | `iotlcm-upstream-proxy-<TAG>` | `.../iotlcm/iotlcm:iotlcm-upstream-proxy-v1.0.4` |
| worker-svr | `iotlcm-worker-svr-<TAG>` | `.../iotlcm/iotlcm:iotlcm-worker-svr-v1.0.4` |
+6 -6
View File
@@ -6,15 +6,15 @@ outline: deep
# 部署概览
IotLCM 平台通过 Docker Compose 在单机上部署。部署编排与数据库初始化脚本在独立仓库:
IotLCM 平台通过 Docker Compose 在单机上部署。部署编排与数据库初始化脚本在**代码仓的 `deploy/` 目录**:
```bash
git clone https://git.5iot.com/iotlcm-public/iotlcm-deploy.git
cd iotlcm-deploy
git clone <仓库地址> iotlcm
cd iotlcm/deploy
```
```text
iotlcm-deploy/
deploy/
├── docker-compose.yml # 服务编排(含默认口令与端口)
├── config/ # 各服务配置,10 份,已带可用默认值
└── schema/ # 数据库初始化脚本,13 个,首次启动自动执行
@@ -36,8 +36,8 @@ iotlcm-deploy/
## 部署流程
```bash
git clone <部署仓地址> iotlcm-deploy
cd iotlcm-deploy
git clone <仓库地址> iotlcm
cd iotlcm/deploy
docker compose up -d
```
+2 -2
View File
@@ -9,8 +9,8 @@ outline: deep
## 启动
```bash
git clone <部署仓地址> iotlcm-deploy
cd iotlcm-deploy
git clone <仓库地址> iotlcm
cd iotlcm/deploy
# 首次部署建议前台启动,便于观察初始化过程
docker compose up
+1 -1
View File
@@ -163,7 +163,7 @@ docker compose pull
| 资源 | 说明 |
| --- | --- |
| 部署仓代码 | `git clone` 或直接打包 `iotlcm-deploy/` 目录带过去 |
| 部署代码 | `git clone` 或直接打包 `deploy/` 目录带过去 |
| 配置模板 | 已包含在部署仓 `config/` |
| 数据库脚本 | 已包含在部署仓 `schema/` |
| Docker 与 Compose | 目标机需预先安装,离线安装包需单独准备 |
+1 -1
View File
@@ -163,7 +163,7 @@ find ./data/logs -name '*.log' -mtime +7 -delete
建议配置 cron 定期执行:
```cron
0 3 * * * root find /path/to/iotlcm-deploy/data/logs -name '*.log' -mtime +7 -delete
0 3 * * * root find /path/to/iotlcm/deploy/data/logs -name '*.log' -mtime +7 -delete
```
## 监控