feat: 新增开源版官网骨架 website/,并接入部署编排与网关路由
- website/:VitePress 官网工程(首页/功能/对比/快速开始/部署运维/教程/社区),与文档站同构 - 两种形态由 SITE_BASE 决定:/www/ 子路径(过渡)与 / 根路径(独立域名),内容同源 - deploy/:新增 with-website profile、网关 /www/ 路由、多域名 website vhost 段 - Makefile:新增 website 镜像条目与 make website 目标 - 教程页给出部署/使用两支视频的元数据与录制要求,官网留有教程入口
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
node_modules
|
||||
.vitepress/cache
|
||||
.vitepress/dist
|
||||
.vitepress/.temp
|
||||
dist
|
||||
*.log
|
||||
@@ -0,0 +1 @@
|
||||
registry=https://registry.npmmirror.com/
|
||||
@@ -0,0 +1,80 @@
|
||||
import { defineConfig } from 'vitepress'
|
||||
|
||||
/**
|
||||
* 官网(开源版门户站)构建配置
|
||||
*
|
||||
* SITE_BASE 由构建参数注入:
|
||||
* - /www/ 过渡形态:挂在统一网关的 /www/ 路径下(没有独立域名时用)
|
||||
* - / 独立域名形态:站点独占域名根路径
|
||||
* 两者内容完全同源,差别只有资源前缀与路由前缀,所以用构建参数而不是改代码。
|
||||
*/
|
||||
const SITE_BASE = process.env.SITE_BASE ?? '/www/'
|
||||
|
||||
/**
|
||||
* 仓库地址。开源版代码只发 git.5iot.com/iotlcm-public,
|
||||
* 若后续确认了公开镜像站,改这一处即可(页面里统一引用常量,不重复硬编码)。
|
||||
*/
|
||||
const REPO_URL = process.env.REPO_URL ?? 'https://git.5iot.com/iotlcm-public/iotlcm'
|
||||
|
||||
/**
|
||||
* 文档站地址。文档站与官网是两个容器:
|
||||
* - 过渡形态:文档站挂在网关的 /docs/ 下
|
||||
* - 独立域名形态:文档站通常独占 docs.<域名> 或同域 /docs/
|
||||
* 独立部署时用 DOCS_URL 覆盖。
|
||||
*/
|
||||
const DOCS_URL = process.env.DOCS_URL ?? '/docs/'
|
||||
|
||||
export default defineConfig({
|
||||
srcDir: './pages',
|
||||
base: SITE_BASE,
|
||||
title: 'iotLCM',
|
||||
description: 'iotLCM 物联网卡全生命周期管理平台(开源版)',
|
||||
lang: 'zh-CN',
|
||||
cleanUrls: true,
|
||||
lastUpdated: false,
|
||||
head: [
|
||||
['link', { rel: 'icon', type: 'image/svg+xml', href: `${SITE_BASE}favicon.svg` }],
|
||||
],
|
||||
themeConfig: {
|
||||
nav: [
|
||||
{ text: '首页', link: '/' },
|
||||
{ text: '功能', link: '/features' },
|
||||
{ text: '方案对比', link: '/compare' },
|
||||
{ text: '快速开始', link: '/guide/quickstart' },
|
||||
{ text: '教程', link: '/guide/tutorial' },
|
||||
{ text: '社区', link: '/community' },
|
||||
{ text: '文档中心', link: DOCS_URL },
|
||||
],
|
||||
sidebar: {
|
||||
'/guide/': [
|
||||
{
|
||||
text: '指南',
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: '快速开始', link: '/guide/quickstart' },
|
||||
{ text: '部署与运维', link: '/guide/deploy' },
|
||||
{ text: '教程视频', link: '/guide/tutorial' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
socialLinks: [
|
||||
{ icon: 'github', link: REPO_URL },
|
||||
],
|
||||
footer: {
|
||||
message: 'iotLCM 开源版 · Apache-2.0',
|
||||
copyright: 'Copyright © iotLCM',
|
||||
},
|
||||
search: {
|
||||
provider: 'local',
|
||||
},
|
||||
outline: {
|
||||
level: [2, 3],
|
||||
label: '本页目录',
|
||||
},
|
||||
docFooter: {
|
||||
prev: '上一页',
|
||||
next: '下一页',
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,6 @@
|
||||
import DefaultTheme from 'vitepress/theme'
|
||||
import type { Theme } from 'vitepress'
|
||||
|
||||
export default {
|
||||
extends: DefaultTheme,
|
||||
} satisfies Theme
|
||||
@@ -0,0 +1,49 @@
|
||||
# 官网(开源版门户站)构建镜像
|
||||
#
|
||||
# 与 docs/ 同一套构建思路:Node 构建 VitePress 产物,Nginx 托管静态文件。
|
||||
#
|
||||
# 构建参数:
|
||||
# SITE_BASE —— 站点资源前缀,同时决定容器内 nginx 的形态:
|
||||
# /www/ 过渡形态:挂在统一网关的 /www/ 路径下(没有独立域名时用)
|
||||
# / 独立域名形态:站点独占域名根路径
|
||||
#
|
||||
# 前缀与 nginx 形态必须配套:VitePress 产物里的资源引用是绝对路径
|
||||
# (<base>assets/xxx),base=/www/ 时只能由带 alias 的 location 提供服务;
|
||||
# base=/ 时只能由根路径 location 提供服务。混用会出现「页面 200 但 JS/CSS 全 404」。
|
||||
#
|
||||
# 用法(仓库根目录):
|
||||
# docker build -f website/Dockerfile -t iotlcm-website:dev \
|
||||
# --build-arg SITE_BASE=/www/ website/
|
||||
FROM node:22-alpine AS builder
|
||||
|
||||
ARG SITE_BASE=/www/
|
||||
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
|
||||
&& apk add --no-cache git
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package*.json .npmrc ./
|
||||
RUN npm ci
|
||||
|
||||
COPY . .
|
||||
RUN SITE_BASE=${SITE_BASE} npm run build
|
||||
|
||||
FROM nginx:1.27-alpine
|
||||
|
||||
ARG SITE_BASE=/www/
|
||||
|
||||
COPY --from=builder /app/.vitepress/dist /usr/share/nginx/html
|
||||
COPY docker/nginx.root.conf /etc/nginx/conf.d/default.conf
|
||||
COPY docker/nginx.prefix.conf /tmp/nginx.prefix.conf
|
||||
RUN set -eu; \
|
||||
base="${SITE_BASE%/}"; \
|
||||
if [ "$base" = "" ]; then \
|
||||
echo "官网形态:独立域名(根路径)"; \
|
||||
else \
|
||||
sed -e "s|__SITE_BASE__|${SITE_BASE}|g" -e "s|__SITE_BASE_NO_SLASH__|${base}|g" \
|
||||
/tmp/nginx.prefix.conf > /etc/nginx/conf.d/default.conf; \
|
||||
echo "官网形态:子路径 ${SITE_BASE}"; \
|
||||
fi
|
||||
|
||||
EXPOSE 80
|
||||
@@ -0,0 +1,24 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
# 过渡形态:站点挂在统一网关的子路径下(没有独立域名时用)。
|
||||
#
|
||||
# VitePress 产物里的资源引用是绝对路径(<base>assets/xxx),
|
||||
# 而 dist 目录是平铺的(index.html、assets/ 直接在根)。
|
||||
# 因此必须在子路径下用 alias 把前缀剥掉再落到产物目录,
|
||||
# 否则页面能返回 200 但 JS/CSS 全部 404 → 白屏。
|
||||
# 网关侧对应 location ^~ <prefix> { proxy_pass http://gw_website; }(不剥前缀)。
|
||||
location __SITE_BASE__ {
|
||||
alias /usr/share/nginx/html/;
|
||||
try_files $uri $uri.html $uri/ $uri/index.html =404;
|
||||
}
|
||||
|
||||
# 访问不带尾斜杠的前缀时补斜杠,否则相对资源路径会解析错
|
||||
location = __SITE_BASE_NO_SLASH__ {
|
||||
return 301 __SITE_BASE__;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
# 独立域名形态:站点独占域名根路径,产物平铺在根目录。
|
||||
location / {
|
||||
try_files $uri $uri.html $uri/ =404;
|
||||
}
|
||||
}
|
||||
Generated
+2534
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "iotlcm-website",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vitepress dev . --host 127.0.0.1",
|
||||
"build": "vitepress build .",
|
||||
"preview": "vitepress preview . --host 127.0.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.6.4"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: 社区
|
||||
description: 如何参与 iotLCM 开源版
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# 社区
|
||||
|
||||
## 源码仓库
|
||||
|
||||
```
|
||||
https://git.5iot.com/iotlcm-public/iotlcm
|
||||
```
|
||||
|
||||
单仓多服务:全部后端服务、前端应用、文档站与部署编排都在同一个仓库里。分支与标签规范见仓库内的 `README.md`。
|
||||
|
||||
## 许可
|
||||
|
||||
Apache-2.0。可自由使用、修改、商用与分发;分发时保留版权声明与许可证原文,并对修改部分注明变更。
|
||||
|
||||
各子目录的上游依赖保留其原始许可(前端模板基于 Vben Admin / MIT,用户端基于 unibest / MIT)。
|
||||
|
||||
## 贡献
|
||||
|
||||
1. 从 `main` 切出特性分支,命名 `feat/xxx`、`fix/xxx`
|
||||
2. 改动保持单一职责,提交信息用中文说明「做了什么」与「为什么」
|
||||
3. Go 服务改动补单元测试;前端改动说明验证方式
|
||||
4. 文档改动同步更新 `docs/`(文档站源码)与本官网
|
||||
5. 提交合入请求前自检:能否编译、测试是否通过、部署编排是否需要同步变更
|
||||
|
||||
## 提问与反馈
|
||||
|
||||
- 使用问题与缺陷:仓库 issue
|
||||
- 功能建议:仓库 issue,描述清楚场景与期望
|
||||
- 部署排错:先看[部署与运维](/guide/deploy)的常见问题表,再开 issue 附上 `docker compose ps` 与相关日志
|
||||
|
||||
## 运维自用组件的边界
|
||||
|
||||
飞书通知机器人(`with-bot` profile)是给运维方自用的工具,需要自建应用的凭据才能启动,**不是平台功能**,未配置时不影响平台运行。
|
||||
|
||||
运营商通道的生产凭据不随仓发布,需自行向运营商申请。
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: 方案对比
|
||||
description: iotLCM 开源版与同类开源方案的能力对比
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# 方案对比
|
||||
|
||||
::: warning 本页待补
|
||||
本页需要「与同行的对比」素材,而该素材依赖产品侧梳理各家官网后给出的结论
|
||||
(周会任务 261102-002 的前置依赖)。骨架已就位,等对比结论到位后填表即可,
|
||||
框架与其它页面一致,不需要再改代码。
|
||||
|
||||
对比口径建议按「能不能装起来 / 能不能接运营商 / 能不能管住卡 / 二次开发成本」四条线走,
|
||||
每条线只写能公开验证的事实(官网文档、许可证、仓库结构),不写主观评价。
|
||||
:::
|
||||
|
||||
## 对比维度(待填)
|
||||
|
||||
| 维度 | 说明 | 可验证依据 |
|
||||
| --- | --- | --- |
|
||||
| 部署门槛 | 是否单机一条命令起、依赖多少中间件 | 官方部署文档 |
|
||||
| 运营商接入 | 支持哪些运营商协议、是否需要逐家申请凭据 | 官方接口文档 |
|
||||
| 卡生命周期 | 入库、划拨、激活、续费、停机、销户覆盖到哪一步 | 官方功能手册 |
|
||||
| 流量与用量 | 实时用量、月累计、达量断网 | 官方功能手册 |
|
||||
| 对外接口 | OpenAPI 版本、鉴权方式、兼容策略 | 官方接口合同 |
|
||||
| 账号与权限 | 多租户、角色、API 凭证 | 官方功能手册 |
|
||||
| 许可证 | 商用与再分发限制 | 仓库 LICENSE |
|
||||
| 二次开发 | 技术栈、语言、代码规模、模块边界 | 仓库结构 |
|
||||
| 文档与教程 | 有无完整手册、部署文档、录屏教程 | 官网与仓库 |
|
||||
|
||||
## 本方案的已知事实
|
||||
|
||||
写这张表时,下面这些是本方案自身已经确定、可直接引用的:
|
||||
|
||||
- 单仓多服务,一次 clone 拿到全部后端服务、前端应用、文档站与部署编排
|
||||
- 一条命令部署:`cd deploy && docker compose up -d`,实测约 30 秒 ~ 1 分钟完成初始化
|
||||
- 运营商协议内置:中国移动 OneLink、中国电信 5G CMP、中国联通 10646,另有共享 Token 接入多家三方渠道商
|
||||
- 卡生命周期覆盖入库 → 划拨 → 激活/续费/停机 → 流量与状态同步 → 销户
|
||||
- 对外接口:OpenAPI V3 + 旧版兼容接口 + 运营商能力代理
|
||||
- 双端界面:Web 管理平台与小程序端(H5)
|
||||
- 许可证:Apache-2.0
|
||||
- 文档站随仓发布,含使用手册、OpenAPI 合同与部署手册
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: 功能
|
||||
description: iotLCM 开源版覆盖的业务能力
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# 功能
|
||||
|
||||
## 卡与库存
|
||||
|
||||
- 卡信息查询:按 ICCID / MSISDN / IMSI 三码检索,查看激活状态、套餐、有效期、流量用量、绑定关系
|
||||
- 库存与划拨:渠道入库后按代理商维度划拨,支持批量操作
|
||||
- 通信管理:卡的生命周期状态在库内集中管理
|
||||
- 批量 IMEI 查询:一次提交批量查询终端号
|
||||
- 智能诊断:结合卡状态、通道与用量给出诊断结论与处置建议
|
||||
|
||||
## 资费与计费
|
||||
|
||||
- 套餐与定价管理:套餐定义、有效期规则、达量断网阈值
|
||||
- 用量与流量查询:实时用量、月度累计,覆盖多维筛选
|
||||
- 业务受理:开通、续费、停复机、变更套餐
|
||||
|
||||
## 通道与上游
|
||||
|
||||
- 通道管理:统一维护上游通道配置与凭据
|
||||
- 协议适配:内置中国移动 OneLink、中国电信 5G CMP、中国联通 10646 适配
|
||||
- 共享 Token 接入:多家三方渠道商共用一套调用链
|
||||
- 缓存转发:通道层前置缓存,降低对运营商接口的直接压力
|
||||
- 接口挡板:onelink-mock 可在无真实运营商环境时联调整条链路
|
||||
|
||||
## 组织与账号
|
||||
|
||||
- 企业、用户与角色:多租户下的企业与账号治理、角色权限分配
|
||||
- API 凭证:对外调用凭证的申请与轮换
|
||||
- 执行日志:批量任务与接口调用的执行记录
|
||||
|
||||
## 运维支撑
|
||||
|
||||
- 全量同步:卡状态、IMEI、流量等数据的周期对齐
|
||||
- 批次执行:批量开停复机、续费、变更套餐,异步执行并有进度查询
|
||||
- 工单管理:告警与异常的工单化处理
|
||||
- 告警与预警:关键状态变化的主动提醒
|
||||
- 飞书通知:把运维事件推送到飞书群(可选组件)
|
||||
- 指标与日志:Consul 注册与健康探针、Prometheus 指标入口
|
||||
|
||||
## 文档与接口
|
||||
|
||||
- [使用手册](/guide/deploy) — Web 端与小程序端的分场景说明
|
||||
- [OpenAPI 接口合同](/guide/deploy#对外接口) — 鉴权、请求参数、响应结构与调用示例
|
||||
- [部署手册](/guide/deploy) — 环境要求、配置项、离线部署、排错
|
||||
|
||||
## 边界
|
||||
|
||||
开源版发布的是微服务家族,不含老平台的私有定制模块。运营商通道的生产凭据不随仓发布,需自行申请与配置。
|
||||
@@ -0,0 +1,114 @@
|
||||
---
|
||||
title: 部署与运维
|
||||
description: 生产部署前的必改项、可选组件、离线部署与常见问题
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# 部署与运维
|
||||
|
||||
## 一键启动
|
||||
|
||||
```bash
|
||||
git clone https://git.5iot.com/iotlcm-public/iotlcm.git
|
||||
cd iotlcm/deploy
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
部署编排与数据库初始化脚本都在仓库的 `deploy/` 目录:
|
||||
|
||||
```text
|
||||
deploy/
|
||||
├── docker-compose.yml # 服务编排(含默认口令与端口)
|
||||
├── compose.memlimit.yml # 容器内存上限(按机器规格叠加使用)
|
||||
├── config/ # 各服务配置 + gateway / nginx 两种入口配置
|
||||
├── schema/init.sql # MySQL 初始化(95 表 + 种子数据)
|
||||
├── tdengine-init/ # 时序库建库建表(首次启动自动执行)
|
||||
└── data/ # 运行数据,首次启动自动创建
|
||||
```
|
||||
|
||||
## 可选组件
|
||||
|
||||
```bash
|
||||
docker compose --profile with-mock up -d # 运营商接口挡板
|
||||
docker compose --profile with-bot up -d # 飞书通知(运维自用)
|
||||
docker compose --profile with-nginx up -d # 自带反向代理(多域名入口)
|
||||
docker compose --profile with-gateway up -d # 单端口入口(默认对外 5051)
|
||||
```
|
||||
|
||||
多个 profile 可组合。
|
||||
|
||||
### 单端口入口(with-gateway)
|
||||
|
||||
只暴露一个端口时用它。容器内监听 80,宿主机端口由 `GATEWAY_PORT` 控制(默认 5051):
|
||||
|
||||
```bash
|
||||
docker compose --profile with-gateway up -d
|
||||
GATEWAY_PORT=8088 docker compose --profile with-gateway up -d
|
||||
```
|
||||
|
||||
路由:
|
||||
|
||||
| 路径 | 目标 |
|
||||
| --- | --- |
|
||||
| `/` | 管理端 |
|
||||
| `/docs/` | 文档站 |
|
||||
| `/openapi/` | 对外 API |
|
||||
| `/route/open/` | 运营商能力代理 |
|
||||
|
||||
小程序 / H5 端的静态资源是根路径部署的,不能挂在同一域名的子路径下,需要单独域名或单独端口。
|
||||
|
||||
### 多域名入口(with-nginx)
|
||||
|
||||
宿主机已有 nginx 或面板时不启动这个容器,把 `deploy/config/nginx/iotlcm.conf` 里的 `location` 段落并入宿主机配置即可。
|
||||
|
||||
## 线上暴露到公网
|
||||
|
||||
80 / 443 入站在多数办公宽带上被运营商封禁,评估过三种可行形态:
|
||||
|
||||
| 形态 | 适用 | 代价 |
|
||||
| --- | --- | --- |
|
||||
| 高位端口 NAT | 内部验收、演示 | 地址带端口,不适合对外正式发布 |
|
||||
| 独立子域 + 反代 | 有公网 IP 的服务器 | 需要域名解析与证书 |
|
||||
| 云主机统一入口 | 正式对外发布 | 需要域名(以及国内服务器的备案) |
|
||||
|
||||
## 上线前必改
|
||||
|
||||
| 项 | 说明 |
|
||||
| --- | --- |
|
||||
| 数据库口令 | MySQL 的 root 与应用账号口令 |
|
||||
| Redis 口令 | 缓存层口令 |
|
||||
| RabbitMQ 口令 | 队列层口令 |
|
||||
| admin 口令 | 种子账号初始口令统一重置过,必须改 |
|
||||
| JWT 密钥 | 管理端与用户端签发令牌用 |
|
||||
| 运营商通道凭据 | 通道配置的 appKey / appSecret / 账号,按运营商要求申请 |
|
||||
| 对象存储 | 图片与附件的存放位置 |
|
||||
|
||||
## 离线部署
|
||||
|
||||
目标机器不能出网时:
|
||||
|
||||
1. 在有网机器上拉全部镜像并导出:
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker save -o iotlcm-images.tar $(docker compose config --images)
|
||||
```
|
||||
|
||||
2. 拷贝 `iotlcm-images.tar` 与仓库的 `deploy/` 目录到目标机器;
|
||||
3. `docker load -i iotlcm-images.tar` 后再 `docker compose up -d`。
|
||||
|
||||
细节见文档站的部署章节。
|
||||
|
||||
## 常见问题
|
||||
|
||||
| 现象 | 原因与处置 |
|
||||
| --- | --- |
|
||||
| MySQL 初始化中途失败 | schema 只在数据卷为空时执行,改完脚本必须清空卷才会重跑:`docker compose down && sudo rm -rf ./data/mysql && docker compose up -d` |
|
||||
| 访问 8019 端口白屏 | 文档站必须带 `/docs/` 路径,裸端口会白屏 |
|
||||
| 偶发 502 | 容器重建后 upstream IP 变化,nginx 未重新解析;配置已带 `resolver` + `resolve`,若仍出现,重启网关容器即可 |
|
||||
| 通道调用报 IP 鉴权失败 | 运营商侧需要报备出口 IP,未报备则拒绝调用 |
|
||||
| 端口被占用 | 编排里业务端口默认绑 `127.0.0.1`,改端口映射即可避开冲突 |
|
||||
|
||||
## 监控
|
||||
|
||||
Consul 提供服务注册与健康探针,Prometheus 指标入口在编排内已开。日志按服务落在 `deploy/data/logs/` 下,配合 logrotate 生效。
|
||||
@@ -0,0 +1,82 @@
|
||||
---
|
||||
title: 快速开始
|
||||
description: 三步把 iotLCM 开源版跑起来
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# 快速开始
|
||||
|
||||
## 前置条件
|
||||
|
||||
| 项 | 要求 |
|
||||
| --- | --- |
|
||||
| 操作系统 | Linux(x86_64 / arm64) |
|
||||
| Docker | 20.10 以上,含 Compose V2(`docker compose version` 可用) |
|
||||
| 内存 | 建议 4 GB 以上 |
|
||||
| 磁盘 | 建议 40 GB 以上(含镜像与数据库) |
|
||||
| 端口 | 3306 / 6379 / 5672 / 6041 / 6030 / 8500 默认占用,起步前先确认空闲 |
|
||||
|
||||
## 第一步:取代码
|
||||
|
||||
```bash
|
||||
git clone https://git.5iot.com/iotlcm-public/iotlcm.git
|
||||
cd iotlcm
|
||||
```
|
||||
|
||||
## 第二步:起栈
|
||||
|
||||
```bash
|
||||
cd deploy
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
不需要复制或修改任何文件,编排里已带可用的默认配置。首次启动会自动:
|
||||
|
||||
1. MySQL 建库并导入 schema(13 个脚本按序执行:建表 → 结构补齐 → 创建应用账号 → 重置种子账号口令 → 导入通道模板、字典、菜单等种子数据),约 30 秒 ~ 1 分钟
|
||||
2. TDengine 自动建库建表(流量历史库)
|
||||
3. 其余服务依次启动并向 Consul 注册
|
||||
|
||||
观察进度:
|
||||
|
||||
```bash
|
||||
docker compose logs -f mysql
|
||||
```
|
||||
|
||||
看到 `[initdb] 应用账号 u_iotlcm 已创建` 与 `[initdb] 种子账号口令已统一重置` 表示初始化完成。
|
||||
|
||||
## 第三步:登录
|
||||
|
||||
部署完成后访问 `http://127.0.0.1:8009`,账号 `admin`,初始口令见 `deploy/README.md`。
|
||||
|
||||
> **正式使用前必须修改默认口令**:数据库、Redis、RabbitMQ、admin 账号口令与 JWT 密钥。清单见部署手册的「上线前必改」。
|
||||
|
||||
## 端口对照
|
||||
|
||||
| 服务 | 宿主机端口 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| 管理端 | 8009 | Web 管理平台 |
|
||||
| 对外接口 | 8000 | OpenAPI V3 与兼容接口 |
|
||||
| 用户端 | 8018 | 小程序 / H5 |
|
||||
| 文档站 | 8019 | 使用手册与接口文档,必须带 `/docs/` 路径 |
|
||||
| 运营商对接 | 8110 / 8310 | 通道协议适配 |
|
||||
| 通道缓存 | 8510 | 缓存转发 |
|
||||
| MySQL | 3306 | 库名 `db_iotlcm` |
|
||||
| Redis | 6379 | 缓存与运行状态 |
|
||||
| RabbitMQ | 5672 / 15672 | 队列与管理界面 |
|
||||
| TDengine | 6041 / 6030 | 时序库 |
|
||||
| Consul | 8500 | 服务注册 |
|
||||
|
||||
编排默认把业务端口绑定在 `127.0.0.1`,需要局域网或公网访问时,改用反向代理编排或并入宿主机已有的 nginx。
|
||||
|
||||
## 停止与清理
|
||||
|
||||
```bash
|
||||
docker compose down # 停止,数据保留
|
||||
docker compose down -v # 停止并删除数据卷(不可恢复)
|
||||
```
|
||||
|
||||
## 下一步
|
||||
|
||||
- [部署与运维](/guide/deploy) — 生产部署前的必改项、可选组件、离线部署与排错
|
||||
- [教程视频](/guide/tutorial) — 跟着录屏走一遍
|
||||
- [功能](/features) — 平台能做什么
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
title: 教程视频
|
||||
description: 部署与使用的录屏教程
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# 教程视频
|
||||
|
||||
开源版的上手路径只有两条:**把平台跑起来**(部署)与**把平台用起来**(使用)。两条路径各一支录屏视频,文字文档只作配套说明,不替代视频。
|
||||
|
||||
## 部署教程
|
||||
|
||||
| 项 | 内容 |
|
||||
| --- | --- |
|
||||
| 标题 | iotLCM 开源版部署教程:从零到可用 |
|
||||
| 目标观众 | 第一次接触本项目、具备 Linux 与 Docker 基础的开发者与实施工程师 |
|
||||
| 时长 | 12 ~ 15 分钟 |
|
||||
| 发布位置 | 官网本页 + 源码仓库 README 顶部 + B 站 |
|
||||
| 关联文档 | [快速开始](/guide/quickstart)、[部署与运维](/guide/deploy) |
|
||||
| 关联仓库路径 | `deploy/`、`website/`、`docs/` |
|
||||
|
||||
视频覆盖:
|
||||
|
||||
1. 环境准备:Docker 与 Compose 版本检查、端口占用确认、机器规格建议
|
||||
2. 取代码:`git clone` 公开仓库,确认目录结构
|
||||
3. 启动:`docker compose up -d`,观察 MySQL 初始化日志直到种子数据导入完成
|
||||
4. 验证:登录管理端、打开文档站与 OpenAPI 文档、跑一次状态查询
|
||||
5. 收尾:改默认口令、停栈与清理数据卷
|
||||
|
||||
## 使用教程
|
||||
|
||||
| 项 | 内容 |
|
||||
| --- | --- |
|
||||
| 标题 | iotLCM 开源版使用教程:核心功能实操 |
|
||||
| 目标观众 | 已完成部署、准备给业务方上手的管理员与运营人员 |
|
||||
| 时长 | 15 ~ 20 分钟 |
|
||||
| 发布位置 | 官网本页 + 源码仓库 README 顶部 + B 站 |
|
||||
| 关联文档 | [功能](/features)、文档站的使用手册 |
|
||||
| 关联仓库路径 | `admin-svr/`、`admin-ui/`、`openapi/`、`worker-svr/` |
|
||||
|
||||
视频覆盖:
|
||||
|
||||
1. 卡信息:列表检索、按三码查卡、卡详情与用量查看
|
||||
2. 库存与划拨:入库后的代理商维度划拨
|
||||
3. 资费与业务受理:套餐配置、开通/续费/停复机、达量断网
|
||||
4. 通道与批次:通道配置查看、批量操作与异步进度
|
||||
5. 对外接口:申请 API 凭证并完成一次真实调用
|
||||
6. 账号与工单:企业用户与角色、告警工单处理
|
||||
|
||||
## 视频文件放置约定
|
||||
|
||||
成片放在仓库的 `website/public/videos/` 下,文件名用小写连字符加版本号(如 `deploy-tutorial-v1.mp4`),页面里以相对路径引用:
|
||||
|
||||
```html
|
||||
<video controls src="/videos/deploy-tutorial-v1.mp4"></video>
|
||||
```
|
||||
|
||||
若改投 B 站等外部托管,页面保留外链入口即可,视频文件不进仓库(避免仓库体积膨胀)。
|
||||
|
||||
## 录制备忘
|
||||
|
||||
- 录屏环境用与观众一致的环境:干净的 Ubuntu + Docker Compose V2,不要在已有业务实例上录
|
||||
- 涉及口令的片段一律打码,示例口令用编排里的默认值
|
||||
- 步骤与 [快速开始](/guide/quickstart) 严格一致,视频里出现的每条命令都必须能原样复制执行
|
||||
- 每个视频产出配套字幕或要点说明(Markdown),随视频一起发布
|
||||
@@ -0,0 +1,56 @@
|
||||
---
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: iotLCM
|
||||
text: 物联网卡全生命周期管理平台
|
||||
tagline: 开源版 · 单仓多服务 · 一条命令部署上线
|
||||
actions:
|
||||
- theme: brand
|
||||
text: 快速开始
|
||||
link: /guide/quickstart
|
||||
- theme: alt
|
||||
text: 使用手册
|
||||
link: /guide/deploy
|
||||
- theme: alt
|
||||
text: 源码仓库
|
||||
link: https://git.5iot.com/iotlcm-public/iotlcm
|
||||
|
||||
features:
|
||||
- title: 一条命令部署
|
||||
details: git clone 后 docker compose up -d,自动建库导入种子数据、初始化时序库,实测约 30 秒 ~ 1 分钟跑起来。
|
||||
- title: 卡片全生命周期
|
||||
details: 入库 → 划拨 → 激活/续费/停机 → 流量与状态同步 → 销户,一个平台覆盖 SIM 卡管理全程。
|
||||
- title: 三家运营商直连
|
||||
details: 内置中国移动 OneLink、中国电信 5G CMP、中国联通 10646 协议适配,并支持多家三方渠道商共享 Token 接入。
|
||||
- title: 开放接口
|
||||
details: OpenAPI V3 对外接口 + 旧版兼容接口 + 运营商能力代理,带完整鉴权说明与调用示例。
|
||||
- title: 双端界面
|
||||
details: Web 管理平台与小程序端(H5)都开源,覆盖查卡、诊断、业务受理、账号治理与工单。
|
||||
- title: Apache-2.0 许可
|
||||
details: 全部服务端与前端代码以 Apache-2.0 发布,可自由修改、商用与二次分发。
|
||||
---
|
||||
|
||||
## 它是什么
|
||||
|
||||
iotLCM 是一套物联网 SIM 卡管理平台。运营商渠道的卡进来之后,从入库、划拨给代理商,到激活、续费、停机,再到流量与状态同步、最终销户,全部在同一个平台里完成。
|
||||
|
||||
开源版采用**单仓多服务**结构:全部后端服务、前端应用、文档站与部署编排都在同一个仓库里,clone 一次即拿到完整源码与部署编排。
|
||||
|
||||
## 现在能拿到什么
|
||||
|
||||
| 组件 | 说明 |
|
||||
| --- | --- |
|
||||
| 管理端 | GoFrame 后端 + Vue 3 前端,卡信息、通道、资费、告警工单、账号治理 |
|
||||
| 对外接口 | OpenAPI 网关、运营商能力代理 |
|
||||
| 异步执行 | RabbitMQ 消费者、全量同步、批量任务 |
|
||||
| 渠道对接 | OneLink / 5G CMP / 10646 适配层 + 通道缓存转发层 |
|
||||
| 用户端 | 用户端服务与小程序端(H5) |
|
||||
| 文档站 | 使用手册、OpenAPI 接口合同、部署手册 |
|
||||
| 部署编排 | Docker Compose 编排与数据库初始化脚本 |
|
||||
|
||||
## 下一步
|
||||
|
||||
- [快速开始](/guide/quickstart) — 三十秒把整套跑起来
|
||||
- [部署与运维](/guide/deploy) — 生产部署前的必改项与常见问题
|
||||
- [教程视频](/guide/tutorial) — 部署与使用的录屏教程
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<rect width="64" height="64" rx="12" fill="#0f766e"/>
|
||||
<path d="M20 18h24a4 4 0 0 1 4 4v20a4 4 0 0 1-4 4H20a4 4 0 0 1-4-4V22a4 4 0 0 1 4-4z" fill="none" stroke="#fff" stroke-width="3"/>
|
||||
<path d="M24 28h16M24 36h10" stroke="#fff" stroke-width="3" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 344 B |
Reference in New Issue
Block a user