移除ota_target_device表中的type 字段
This commit is contained in:
@@ -18,14 +18,23 @@
|
||||
- [internal/middleware/logger.go](file://internal/middleware/logger.go)
|
||||
- [pkg/logger/logger.go](file://pkg/logger/logger.go)
|
||||
- [Makefile](file://Makefile)
|
||||
- [Dockerfile.multistage](file://Dockerfile.multistage)
|
||||
- [Dockerfile](file://Dockerfile)
|
||||
- [docker-compose.yml](file://docker-compose.yml)
|
||||
- [scripts/deploy.sh](file://scripts/deploy.sh)
|
||||
- [scripts/upload.sh](file://scripts/upload.sh)
|
||||
- [scripts/reorganize_csv.sh](file://scripts/reorganize_csv.sh)
|
||||
- [go.mod](file://go.mod)
|
||||
- [README.md](file://README.md)
|
||||
</cite>
|
||||
|
||||
## 更新摘要
|
||||
**变更内容**
|
||||
- 新增完整的部署脚本自动化功能,包含本地交叉编译、远程部署、容器重启等完整流程
|
||||
- 新增多阶段Docker构建流程,支持跨平台编译和优化的镜像构建
|
||||
- 新增批量代码同步脚本,支持增量同步和虚拟执行预览
|
||||
- 新增CSV文件整理工具,支持按首字母分类归档
|
||||
- 增强构建系统,支持跨平台编译和Swagger文档自动生成
|
||||
- 新增Docker容器化部署支持,包含多阶段构建和健康检查配置
|
||||
- 新增docker-compose编排配置,支持完整的微服务部署
|
||||
- 增强构建系统,支持Swagger文档自动生成
|
||||
@@ -47,7 +56,7 @@
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本运维文档面向 Luxsin 应用 API 项目的部署与运行维护,覆盖构建流程、环境配置与差异、数据库与外部服务连接、容器化与编排部署、监控与日志、性能优化、故障排查、备份恢复与版本升级、安全与合规以及自动化与 CI/CD 集成要点。随着Docker支持的引入,现在提供了更加完善的容器化部署能力,包括多阶段构建、健康检查和编排配置。
|
||||
本运维文档面向 Luxsin 应用 API 项目的部署与运行维护,覆盖构建流程、环境配置与差异、数据库与外部服务连接、容器化与编排部署、监控与日志、性能优化、故障排查、备份恢复与版本升级、安全与合规以及自动化与 CI/CD 集成要点。随着Docker支持的引入和部署脚本自动化功能的完善,现在提供了更加完善的容器化部署能力和完整的自动化运维解决方案,包括多阶段构建、健康检查、批量部署和代码同步等功能。
|
||||
|
||||
## 项目结构
|
||||
该应用采用分层与功能模块化组织,核心入口在命令行程序,配置集中于内部包,业务路由与中间件位于独立模块,日志封装在可复用包中。关键目录与职责概览:
|
||||
@@ -59,9 +68,11 @@
|
||||
- internal/router:路由注册与中间件装配
|
||||
- internal/middleware:CORS、请求日志、请求 ID 等中间件
|
||||
- pkg/logger:Zap 日志配置(开发/生产差异化)
|
||||
- Makefile:增强的构建与测试命令,支持Swagger文档生成
|
||||
- Dockerfile:多阶段Docker构建配置
|
||||
- Makefile:增强的构建与测试命令,支持跨平台编译和Swagger文档生成
|
||||
- Dockerfile.multistage:多阶段Docker构建配置
|
||||
- Dockerfile:标准Docker构建配置
|
||||
- docker-compose.yml:容器编排配置
|
||||
- scripts:部署脚本自动化工具集
|
||||
- go.mod:Go 模块与依赖声明
|
||||
|
||||
```mermaid
|
||||
@@ -82,10 +93,16 @@ S3["AWS S3 存储"]
|
||||
EQ["均衡器 API"]
|
||||
end
|
||||
subgraph "容器化支持"
|
||||
DOCKER["Dockerfile"]
|
||||
DOCKER["Dockerfile.multistage"]
|
||||
COMPOSE["docker-compose.yml"]
|
||||
ENDPOINT["健康检查端点"]
|
||||
end
|
||||
subgraph "自动化部署"
|
||||
DEPLOY["scripts/deploy.sh"]
|
||||
UPLOAD["scripts/upload.sh"]
|
||||
CSV["scripts/reorganize_csv.sh"]
|
||||
MAKE["Makefile"]
|
||||
end
|
||||
MAIN --> CFG
|
||||
MAIN --> LOGPKG
|
||||
MAIN --> ROUTER
|
||||
@@ -98,6 +115,9 @@ MAIN --> S3
|
||||
MAIN --> EQ
|
||||
DOCKER --> ENDPOINT
|
||||
COMPOSE --> ENDPOINT
|
||||
DEPLOY --> MAKE
|
||||
UPLOAD --> DEPLOY
|
||||
CSV --> UPLOAD
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
@@ -107,8 +127,12 @@ COMPOSE --> ENDPOINT
|
||||
- [internal/middleware/logger.go:10-45](file://internal/middleware/logger.go#L10-L45)
|
||||
- [internal/config/config.go:18-95](file://internal/config/config.go#L18-L95)
|
||||
- [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19)
|
||||
- [Dockerfile:1-26](file://Dockerfile#L1-L26)
|
||||
- [Dockerfile.multistage:1-26](file://Dockerfile.multistage#L1-L26)
|
||||
- [docker-compose.yml:1-33](file://docker-compose.yml#L1-L33)
|
||||
- [scripts/deploy.sh:1-134](file://scripts/deploy.sh#L1-L134)
|
||||
- [scripts/upload.sh:1-128](file://scripts/upload.sh#L1-L128)
|
||||
- [scripts/reorganize_csv.sh:1-64](file://scripts/reorganize_csv.sh#L1-L64)
|
||||
- [Makefile:1-22](file://Makefile#L1-L22)
|
||||
|
||||
**章节来源**
|
||||
- [README.md:5-17](file://README.md#L5-L17)
|
||||
@@ -125,6 +149,9 @@ COMPOSE --> ENDPOINT
|
||||
- 日志:Zap 生产/开发差异化配置,按状态输出不同级别日志
|
||||
- **新增**:定时任务:支持设备和分享码的定时持久化任务
|
||||
- **新增**:分享码配置:支持最大数量和TTL时间配置
|
||||
- **新增**:部署脚本自动化:支持本地交叉编译、远程部署、容器重启等完整流程
|
||||
- **新增**:批量代码同步:支持增量同步和虚拟执行预览
|
||||
- **新增**:多阶段Docker构建:支持跨平台编译和镜像优化
|
||||
|
||||
**章节来源**
|
||||
- [internal/config/config.go:18-95](file://internal/config/config.go#L18-L95)
|
||||
@@ -141,13 +168,17 @@ COMPOSE --> ENDPOINT
|
||||
- [internal/middleware/cors.go:7-19](file://internal/middleware/cors.go#L7-L19)
|
||||
- [internal/middleware/logger.go:10-45](file://internal/middleware/logger.go#L10-L45)
|
||||
- [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19)
|
||||
- [scripts/deploy.sh:1-134](file://scripts/deploy.sh#L1-L134)
|
||||
- [scripts/upload.sh:1-128](file://scripts/upload.sh#L1-L128)
|
||||
- [Dockerfile.multistage:1-26](file://Dockerfile.multistage#L1-L26)
|
||||
|
||||
## 架构总览
|
||||
应用启动流程:读取配置 → 初始化日志 → 连接数据库/缓存/搜索/S3 → 注册路由与中间件 → 启动 HTTP 服务器 → 监听系统信号优雅退出。**新增**:支持定时任务启动和容器化部署。
|
||||
应用启动流程:读取配置 → 初始化日志 → 连接数据库/缓存/搜索/S3 → 注册路由与中间件 → 启动 HTTP 服务器 → 监听系统信号优雅退出。**新增**:支持定时任务启动、容器化部署和自动化脚本执行。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant OS as "操作系统"
|
||||
participant DEPLOY as "部署脚本"
|
||||
participant DOCKER as "Docker容器"
|
||||
participant MAIN as "main.go"
|
||||
participant CFG as "config.Load()"
|
||||
@@ -158,7 +189,9 @@ participant MS as "search.NewClient()"
|
||||
participant S3 as "storage.NewS3Storage()"
|
||||
participant RT as "router.New()"
|
||||
participant HTTP as "http.Server"
|
||||
OS->>DOCKER : 启动容器
|
||||
DEPLOY->>DOCKER : 本地交叉编译
|
||||
DEPLOY->>DOCKER : 上传二进制文件
|
||||
DEPLOY->>DOCKER : 重启容器
|
||||
DOCKER->>MAIN : 执行入口
|
||||
MAIN->>CFG : 加载配置
|
||||
MAIN->>LOG : 创建日志实例
|
||||
@@ -182,6 +215,7 @@ MAIN->>HTTP : 优雅关闭
|
||||
- [internal/search/meilisearch.go:17-20](file://internal/search/meilisearch.go#L17-L20)
|
||||
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
||||
- [docker-compose.yml:22-27](file://docker-compose.yml#L22-L27)
|
||||
- [scripts/deploy.sh:79-93](file://scripts/deploy.sh#L79-L93)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
@@ -275,13 +309,43 @@ MAIN->>HTTP : 优雅关闭
|
||||
- **新增**:日志配置:json-file驱动,最大10MB,最多3个文件
|
||||
|
||||
**章节来源**
|
||||
- [Dockerfile:1-26](file://Dockerfile#L1-L26)
|
||||
- [Dockerfile.multistage:1-26](file://Dockerfile.multistage#L1-L26)
|
||||
- [docker-compose.yml:22-33](file://docker-compose.yml#L22-L33)
|
||||
|
||||
### 自动化部署脚本系统
|
||||
- **新增**:部署脚本(deploy.sh):支持本地交叉编译、远程部署、容器重启的完整流程
|
||||
- 本地编译:make build-linux 生成跨平台二进制
|
||||
- 远程部署:rsync 同步二进制到服务器
|
||||
- 容器重启:SSH 执行 docker compose up -d --build
|
||||
- 功能选项:-a(同时上传Docker文件)、-r(重启容器)、-s(跳过编译)、-n(虚拟执行)
|
||||
- **新增**:代码同步脚本(upload.sh):支持增量同步和虚拟执行预览
|
||||
- 默认路径:cmd/、internal/、pkg/、docs/、go.mod、go.sum
|
||||
- 增量同步:支持目录和文件的增量同步
|
||||
- 虚拟执行:-n 参数预览同步操作
|
||||
- **新增**:CSV文件整理工具(reorganize_csv.sh):按首字母分类归档CSV文件
|
||||
- 支持预览模式:--dry-run 参数
|
||||
- 字符处理:强制使用 C locale 确保字符范围正确
|
||||
- 目录创建:自动创建目标子目录
|
||||
|
||||
**章节来源**
|
||||
- [scripts/deploy.sh:1-134](file://scripts/deploy.sh#L1-L134)
|
||||
- [scripts/upload.sh:1-128](file://scripts/upload.sh#L1-L128)
|
||||
- [scripts/reorganize_csv.sh:1-64](file://scripts/reorganize_csv.sh#L1-L64)
|
||||
|
||||
### 构建系统增强
|
||||
- **新增**:跨平台编译:GOOS=linux,GOARCH=amd64 支持Linux x86_64
|
||||
- **新增**:二进制优化:ldflags="-s -w" 移除符号表和调试信息
|
||||
- **新增**:Swagger文档:swag init 自动生成API文档
|
||||
- **新增**:依赖管理:go mod tidy 维护依赖关系
|
||||
|
||||
**章节来源**
|
||||
- [Makefile:11-22](file://Makefile#L11-L22)
|
||||
|
||||
## 依赖分析
|
||||
- 外部依赖:Gin、MySQL 驱动、Meilisearch SDK、Redis SDK、Zap、godotenv、AWS SDK
|
||||
- 内部耦合:main.go 依赖 config、database、cache、search、router、logger;router 依赖 handler、middleware、search、redis;middleware 依赖 Gin 与 Zap
|
||||
- **新增**:S3存储依赖:aws-sdk-go,支持AWS S3集成
|
||||
- **新增**:部署脚本依赖:rsync、ssh、docker compose 等系统工具
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
@@ -294,14 +358,18 @@ MAIN --> RT["internal/router/router.go"]
|
||||
RT --> MW["internal/middleware/*"]
|
||||
RT --> HND["internal/handler/*"]
|
||||
MAIN --> LOG["pkg/logger/logger.go"]
|
||||
DOCKER["Dockerfile"] --> MAIN
|
||||
DOCKER["Dockerfile.multistage"] --> MAIN
|
||||
COMPOSE["docker-compose.yml"] --> DOCKER
|
||||
DEPLOY["scripts/deploy.sh"] --> MAKE["Makefile"]
|
||||
UPLOAD["scripts/upload.sh"] --> DEPLOY
|
||||
CSV["scripts/reorganize_csv.sh"] --> UPLOAD
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [cmd/server/main.go:13-28](file://cmd/server/main.go#L13-L28)
|
||||
- [internal/router/router.go:3-12](file://internal/router/router.go#L3-L12)
|
||||
- [internal/config/s3.go:1-10](file://internal/config/s3.go#L1-L10)
|
||||
- [scripts/deploy.sh:79-93](file://scripts/deploy.sh#L79-L93)
|
||||
|
||||
**章节来源**
|
||||
- [go.mod:5-46](file://go.mod#L5-L81)
|
||||
@@ -321,12 +389,17 @@ COMPOSE["docker-compose.yml"] --> DOCKER
|
||||
- 多阶段构建减少镜像大小
|
||||
- 预装时区数据避免运行时下载
|
||||
- 健康检查确保服务可用性
|
||||
- **新增**:部署脚本优化
|
||||
- 本地交叉编译减少远程编译时间
|
||||
- rsync 增量同步提高传输效率
|
||||
- 虚拟执行预览避免误操作
|
||||
|
||||
**章节来源**
|
||||
- [internal/database/mysql.go:33-35](file://internal/database/mysql.go#L33-L35)
|
||||
- [cmd/server/main.go:111-117](file://cmd/server/main.go#L111-L117)
|
||||
- [internal/middleware/logger.go:37-43](file://internal/middleware/logger.go#L37-L43)
|
||||
- [Dockerfile:15-17](file://Dockerfile#L15-L17)
|
||||
- [Dockerfile.multistage:15-17](file://Dockerfile.multistage#L15-L17)
|
||||
- [scripts/deploy.sh:96-99](file://scripts/deploy.sh#L96-L99)
|
||||
|
||||
## 故障排除指南
|
||||
- 启动失败(数据库连接)
|
||||
@@ -344,6 +417,9 @@ COMPOSE["docker-compose.yml"] --> DOCKER
|
||||
- **新增**:容器启动失败
|
||||
- 现象:Docker容器无法启动或频繁重启
|
||||
- 排查:检查环境变量配置、健康检查端点、日志输出
|
||||
- **新增**:部署脚本执行失败
|
||||
- 现象:deploy.sh 或 upload.sh 执行中断
|
||||
- 排查:检查 rsync、ssh、docker compose 可用性;确认服务器可达性
|
||||
- 健康检查
|
||||
- 访问 /api/v1/health,确认服务可用
|
||||
- 日志定位
|
||||
@@ -355,21 +431,24 @@ COMPOSE["docker-compose.yml"] --> DOCKER
|
||||
- [internal/config/redis.go:51-56](file://internal/config/redis.go#L51-L56)
|
||||
- [internal/config/meilisearch.go:39-50](file://internal/config/meilisearch.go#L39-L50)
|
||||
- [internal/middleware/logger.go:22-43](file://internal/middleware/logger.go#L22-L43)
|
||||
- [scripts/deploy.sh:40-48](file://scripts/deploy.sh#L40-L48)
|
||||
- [README.md:83-99](file://README.md#L83-L99)
|
||||
|
||||
## 结论
|
||||
本项目提供了清晰的配置加载、中间件与路由结构,以及对数据库、缓存与搜索服务的标准化接入。通过明确的环境变量与校验规则,配合生产/开发差异化日志与 Gin 模式,可实现稳定高效的部署与运维。**新增的Docker支持进一步增强了部署灵活性,提供了多阶段构建、健康检查和容器编排能力。** 建议在生产环境中严格管理密钥与网络访问控制,并结合监控与日志体系完善可观测性。
|
||||
本项目提供了清晰的配置加载、中间件与路由结构,以及对数据库、缓存与搜索服务的标准化接入。通过明确的环境变量与校验规则,配合生产/开发差异化日志与 Gin 模式,可实现稳定高效的部署与运维。**新增的Docker支持和完整的部署脚本自动化功能进一步增强了部署灵活性,提供了多阶段构建、健康检查、批量部署、代码同步和CSV文件整理等完整运维能力。** 建议在生产环境中严格管理密钥与网络访问控制,并结合监控与日志体系完善可观测性。
|
||||
|
||||
## 附录
|
||||
|
||||
### 构建与运行
|
||||
- 构建:使用 Makefile 的 build 目标生成二进制
|
||||
- **新增**:跨平台构建:make build-linux 生成 Linux x86_64 二进制
|
||||
- 运行:使用 Makefile 的 run 目标或直接运行二进制
|
||||
- 测试:使用 Makefile 的 test 目标
|
||||
- **新增**:Swagger文档:使用 Makefile 的 swag 目标自动生成API文档
|
||||
- **新增**:依赖管理:make tidy 维护Go模块依赖
|
||||
|
||||
**章节来源**
|
||||
- [Makefile:3-19](file://Makefile#L3-L19)
|
||||
- [Makefile:3-22](file://Makefile#L3-L22)
|
||||
- [README.md:75-81](file://README.md#L75-L81)
|
||||
|
||||
### 环境变量与默认值
|
||||
@@ -390,7 +469,7 @@ COMPOSE["docker-compose.yml"] --> DOCKER
|
||||
- **新增**:日志配置:json-file驱动,max-size=10m,max-file=3
|
||||
|
||||
**章节来源**
|
||||
- [Dockerfile:1-26](file://Dockerfile#L1-L26)
|
||||
- [Dockerfile.multistage:1-26](file://Dockerfile.multistage#L1-L26)
|
||||
- [docker-compose.yml:1-33](file://docker-compose.yml#L1-L33)
|
||||
|
||||
### Kubernetes 部署示例要点
|
||||
@@ -412,6 +491,7 @@ COMPOSE["docker-compose.yml"] --> DOCKER
|
||||
- 缓存:关注热数据重建策略,避免单点失效
|
||||
- 配置:Secret/ConfigMap 版本化管理,变更审计
|
||||
- **新增**:容器镜像:版本化管理,支持快速回滚
|
||||
- **新增**:部署脚本:支持一键回滚至上一个版本
|
||||
|
||||
### 版本升级流程
|
||||
- 预发布:灰度最小集群,验证健康检查与关键接口
|
||||
@@ -419,6 +499,7 @@ COMPOSE["docker-compose.yml"] --> DOCKER
|
||||
- 回滚:快速回滚至上一个稳定版本
|
||||
- 文档:记录变更与回滚步骤
|
||||
- **新增**:容器升级:支持镜像版本标签管理
|
||||
- **新增**:脚本升级:支持一键部署新版本
|
||||
|
||||
### 安全与合规
|
||||
- 最小权限:数据库、缓存、搜索服务账号只授予必要权限
|
||||
@@ -426,11 +507,19 @@ COMPOSE["docker-compose.yml"] --> DOCKER
|
||||
- 密钥管理:通过 Secret 管理密钥,禁用明文存储
|
||||
- 合规:日志保留策略、访问审计、数据加密传输
|
||||
- **新增**:容器安全:镜像扫描、只读根文件系统、非root用户运行
|
||||
- **新增**:部署安全:SSH密钥认证、防火墙限制、操作审计
|
||||
|
||||
### 自动化部署与 CI/CD 集成
|
||||
- 构建:在 CI 中执行 go mod tidy、go test、go build、swag init
|
||||
- **新增**:跨平台构建:支持 Linux x86_64 二进制生成
|
||||
- **新增**:镜像构建:多阶段Docker构建,优化镜像大小
|
||||
- **新增**:部署流水线:自动化部署脚本集成
|
||||
- **新增**:代码同步:增量同步到多台服务器
|
||||
- **新增**:CSV处理:自动化文件整理工具
|
||||
- 扫描:静态扫描与依赖漏洞扫描
|
||||
- 镜像:构建镜像并推送制品库,支持多架构镜像
|
||||
- 部署:Kubernetes 应用清单与版本标签管理
|
||||
- 回滚:支持一键回滚至上一个版本
|
||||
- **新增**:容器编排:docker-compose支持本地开发环境快速部署
|
||||
- **新增**:容器编排:docker-compose支持本地开发环境快速部署
|
||||
- **新增**:批量部署:支持多服务器同时部署
|
||||
- **新增**:虚拟执行:预览部署操作,避免误操作
|
||||
File diff suppressed because one or more lines are too long
@@ -52,11 +52,10 @@ type BlackList struct {
|
||||
CreateAt time.Time `json:"create_at"`
|
||||
}
|
||||
|
||||
// OTATargetDevice OTA 定向设备
|
||||
// OTATargetDevice OTA 灰度升级设备
|
||||
type OTATargetDevice struct {
|
||||
ID int `json:"id"`
|
||||
OTAID int `json:"ota_id"`
|
||||
MacAddr string `json:"mac_addr"`
|
||||
Type int `json:"type"`
|
||||
CreateAt time.Time `json:"create_at"`
|
||||
}
|
||||
|
||||
@@ -144,10 +144,10 @@ func (r *OTARepository) IsInBlackList(ctx context.Context, otaID int, mac string
|
||||
|
||||
// FindTargetDevice 检查 mac 是否在指定 ota_id 的定向设备中
|
||||
func (r *OTARepository) FindTargetDevice(ctx context.Context, otaID int, mac string) (*model.OTATargetDevice, error) {
|
||||
const query = `SELECT id, ota_id, mac_addr, type, create_at FROM ota_target_device WHERE ota_id = ? AND mac_addr = ?`
|
||||
const query = `SELECT id, ota_id, mac_addr, create_at FROM ota_target_device WHERE ota_id = ? AND mac_addr = ?`
|
||||
|
||||
var d model.OTATargetDevice
|
||||
err := r.db.QueryRowContext(ctx, query, otaID, mac).Scan(&d.ID, &d.OTAID, &d.MacAddr, &d.Type, &d.CreateAt)
|
||||
err := r.db.QueryRowContext(ctx, query, otaID, mac).Scan(&d.ID, &d.OTAID, &d.MacAddr, &d.CreateAt)
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@ CREATE TABLE `ota_target_device` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`ota_id` int NOT NULL,
|
||||
`mac_addr` varchar(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`type` int NOT NULL DEFAULT 1 COMMENT '1-白名单;2-黑名单',
|
||||
`create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
|
||||
|
||||
Reference in New Issue
Block a user