436 lines
21 KiB
Markdown
436 lines
21 KiB
Markdown
# 部署运维
|
||
|
||
<cite>
|
||
**本文引用的文件**
|
||
- [cmd/server/main.go](file://cmd/server/main.go)
|
||
- [internal/config/config.go](file://internal/config/config.go)
|
||
- [internal/config/database.go](file://internal/config/database.go)
|
||
- [internal/config/redis.go](file://internal/config/redis.go)
|
||
- [internal/config/meilisearch.go](file://internal/config/meilisearch.go)
|
||
- [internal/config/s3.go](file://internal/config/s3.go)
|
||
- [internal/config/share_code_ttl.go](file://internal/config/share_code_ttl.go)
|
||
- [internal/config/equalize.go](file://internal/config/equalize.go)
|
||
- [internal/database/mysql.go](file://internal/database/mysql.go)
|
||
- [internal/cache/redis.go](file://internal/cache/redis.go)
|
||
- [internal/search/meilisearch.go](file://internal/search/meilisearch.go)
|
||
- [internal/router/router.go](file://internal/router/router.go)
|
||
- [internal/middleware/cors.go](file://internal/middleware/cors.go)
|
||
- [internal/middleware/logger.go](file://internal/middleware/logger.go)
|
||
- [pkg/logger/logger.go](file://pkg/logger/logger.go)
|
||
- [Makefile](file://Makefile)
|
||
- [Dockerfile](file://Dockerfile)
|
||
- [docker-compose.yml](file://docker-compose.yml)
|
||
- [go.mod](file://go.mod)
|
||
- [README.md](file://README.md)
|
||
</cite>
|
||
|
||
## 更新摘要
|
||
**变更内容**
|
||
- 新增Docker容器化部署支持,包含多阶段构建和健康检查配置
|
||
- 新增docker-compose编排配置,支持完整的微服务部署
|
||
- 增强构建系统,支持Swagger文档自动生成
|
||
- 新增S3存储配置和AWS集成支持
|
||
- 新增定时任务配置选项,支持设备持久化任务
|
||
- 新增分享码TTL和最大数量配置
|
||
- 新增均衡器API配置,支持内外网切换
|
||
|
||
## 目录
|
||
1. [简介](#简介)
|
||
2. [项目结构](#项目结构)
|
||
3. [核心组件](#核心组件)
|
||
4. [架构总览](#架构总览)
|
||
5. [详细组件分析](#详细组件分析)
|
||
6. [依赖分析](#依赖分析)
|
||
7. [性能考虑](#性能考虑)
|
||
8. [故障排除指南](#故障排除指南)
|
||
9. [结论](#结论)
|
||
10. [附录](#附录)
|
||
|
||
## 简介
|
||
本运维文档面向 Luxsin 应用 API 项目的部署与运行维护,覆盖构建流程、环境配置与差异、数据库与外部服务连接、容器化与编排部署、监控与日志、性能优化、故障排查、备份恢复与版本升级、安全与合规以及自动化与 CI/CD 集成要点。随着Docker支持的引入,现在提供了更加完善的容器化部署能力,包括多阶段构建、健康检查和编排配置。
|
||
|
||
## 项目结构
|
||
该应用采用分层与功能模块化组织,核心入口在命令行程序,配置集中于内部包,业务路由与中间件位于独立模块,日志封装在可复用包中。关键目录与职责概览:
|
||
- cmd/server:应用入口,负责初始化配置、连接数据库与缓存、启动 HTTP 服务器、优雅关闭
|
||
- internal/config:集中加载与校验环境变量,生成运行所需配置,支持S3、均衡器等新配置
|
||
- internal/database:MySQL 连接与连接池配置
|
||
- internal/cache:Redis 客户端初始化
|
||
- internal/search:Meilisearch 客户端初始化与检索封装
|
||
- internal/router:路由注册与中间件装配
|
||
- internal/middleware:CORS、请求日志、请求 ID 等中间件
|
||
- pkg/logger:Zap 日志配置(开发/生产差异化)
|
||
- Makefile:增强的构建与测试命令,支持Swagger文档生成
|
||
- Dockerfile:多阶段Docker构建配置
|
||
- docker-compose.yml:容器编排配置
|
||
- go.mod:Go 模块与依赖声明
|
||
|
||
```mermaid
|
||
graph TB
|
||
subgraph "应用进程"
|
||
MAIN["cmd/server/main.go"]
|
||
ROUTER["internal/router/router.go"]
|
||
MW_CORS["internal/middleware/cors.go"]
|
||
MW_LOGGER["internal/middleware/logger.go"]
|
||
CFG["internal/config/config.go"]
|
||
LOGPKG["pkg/logger/logger.go"]
|
||
end
|
||
subgraph "外部服务"
|
||
MYSQL["MySQL 数据库"]
|
||
REDIS["Redis 缓存"]
|
||
MEILI["Meilisearch 搜索"]
|
||
S3["AWS S3 存储"]
|
||
EQ["均衡器 API"]
|
||
end
|
||
subgraph "容器化支持"
|
||
DOCKER["Dockerfile"]
|
||
COMPOSE["docker-compose.yml"]
|
||
ENDPOINT["健康检查端点"]
|
||
end
|
||
MAIN --> CFG
|
||
MAIN --> LOGPKG
|
||
MAIN --> ROUTER
|
||
ROUTER --> MW_CORS
|
||
ROUTER --> MW_LOGGER
|
||
MAIN --> MYSQL
|
||
MAIN --> REDIS
|
||
MAIN --> MEILI
|
||
MAIN --> S3
|
||
MAIN --> EQ
|
||
DOCKER --> ENDPOINT
|
||
COMPOSE --> ENDPOINT
|
||
```
|
||
|
||
**图表来源**
|
||
- [cmd/server/main.go:1-201](file://cmd/server/main.go#L1-L201)
|
||
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
||
- [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)
|
||
- [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)
|
||
- [docker-compose.yml:1-33](file://docker-compose.yml#L1-L33)
|
||
|
||
**章节来源**
|
||
- [README.md:5-17](file://README.md#L5-L17)
|
||
- [go.mod:1-81](file://go.mod#L1-L81)
|
||
|
||
## 核心组件
|
||
- 配置加载与校验:集中于 config 包,支持从环境变量覆盖默认值,并对生产环境进行强制校验(如数据库密码)
|
||
- 数据库连接:使用 MySQL 驱动,配置连接池参数并在启动时进行连通性校验
|
||
- 缓存连接:Redis 客户端初始化,支持主机、端口、密码、库号
|
||
- 搜索服务:Meilisearch 客户端初始化,提供模型列表检索能力
|
||
- S3存储:AWS S3客户端初始化,支持桶、区域和凭据配置
|
||
- 均衡器API:支持内外网切换的均衡器接口配置
|
||
- 路由与中间件:Gin 路由注册,内置 CORS、请求日志、请求 ID、恢复中间件
|
||
- 日志:Zap 生产/开发差异化配置,按状态输出不同级别日志
|
||
- **新增**:定时任务:支持设备和分享码的定时持久化任务
|
||
- **新增**:分享码配置:支持最大数量和TTL时间配置
|
||
|
||
**章节来源**
|
||
- [internal/config/config.go:18-95](file://internal/config/config.go#L18-L95)
|
||
- [internal/config/database.go:17-72](file://internal/config/database.go#L17-L72)
|
||
- [internal/config/redis.go:16-57](file://internal/config/redis.go#L16-L57)
|
||
- [internal/config/meilisearch.go:14-51](file://internal/config/meilisearch.go#L14-L51)
|
||
- [internal/config/s3.go:1-37](file://internal/config/s3.go#L1-L37)
|
||
- [internal/config/equalize.go:1-34](file://internal/config/equalize.go#L1-L34)
|
||
- [internal/config/share_code_ttl.go:1-60](file://internal/config/share_code_ttl.go#L1-L60)
|
||
- [internal/database/mysql.go:14-47](file://internal/database/mysql.go#L14-L47)
|
||
- [internal/cache/redis.go:10-17](file://internal/cache/redis.go#L10-L17)
|
||
- [internal/search/meilisearch.go:17-46](file://internal/search/meilisearch.go#L17-L46)
|
||
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
||
- [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)
|
||
|
||
## 架构总览
|
||
应用启动流程:读取配置 → 初始化日志 → 连接数据库/缓存/搜索/S3 → 注册路由与中间件 → 启动 HTTP 服务器 → 监听系统信号优雅退出。**新增**:支持定时任务启动和容器化部署。
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant OS as "操作系统"
|
||
participant DOCKER as "Docker容器"
|
||
participant MAIN as "main.go"
|
||
participant CFG as "config.Load()"
|
||
participant LOG as "logger.New()"
|
||
participant DB as "database.Open()"
|
||
participant RS as "cache.NewClient()"
|
||
participant MS as "search.NewClient()"
|
||
participant S3 as "storage.NewS3Storage()"
|
||
participant RT as "router.New()"
|
||
participant HTTP as "http.Server"
|
||
OS->>DOCKER : 启动容器
|
||
DOCKER->>MAIN : 执行入口
|
||
MAIN->>CFG : 加载配置
|
||
MAIN->>LOG : 创建日志实例
|
||
MAIN->>DB : 打开数据库连接
|
||
MAIN->>RS : 初始化 Redis 客户端
|
||
MAIN->>MS : 初始化 Meilisearch 客户端
|
||
MAIN->>S3 : 初始化 S3 存储
|
||
MAIN->>RT : 构建路由引擎
|
||
MAIN->>HTTP : 启动 HTTP 服务器
|
||
DOCKER->>DOCKER : 健康检查
|
||
OS-->>MAIN : 发送终止信号
|
||
MAIN->>HTTP : 优雅关闭
|
||
```
|
||
|
||
**图表来源**
|
||
- [cmd/server/main.go:38-140](file://cmd/server/main.go#L38-L140)
|
||
- [internal/config/config.go:24-71](file://internal/config/config.go#L24-L71)
|
||
- [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19)
|
||
- [internal/database/mysql.go:14-47](file://internal/database/mysql.go#L14-L47)
|
||
- [internal/cache/redis.go:10-17](file://internal/cache/redis.go#L10-L17)
|
||
- [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)
|
||
|
||
## 详细组件分析
|
||
|
||
### 配置与环境管理
|
||
- 环境变量键与默认值
|
||
- 运行环境:APP_ENV(默认 development),用于切换生产模式与日志配置
|
||
- 监听地址与端口:APP_HOST、APP_PORT(默认 0.0.0.0:8080)
|
||
- Gin 运行模式:GIN_MODE(由 APP_ENV 控制,生产模式使用 ReleaseMode)
|
||
- 数据库:DATABASE_HOST、DATABASE_PORT、DATABASE_NAME、DATABASE_USER、DATABASE_PASSWORD(生产环境必须提供 DATABASE_PASSWORD)
|
||
- Redis:REDIS_HOST、REDIS_PORT、REDIS_PASSWORD、REDIS_DATABASE
|
||
- Meilisearch:MEILISEARCH_HOST、MEILISEARCH_API_KEY、MEILISEARCH_INDEX
|
||
- **新增**:S3配置:S3_BUCKET、AWS_REGION、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY
|
||
- **新增**:均衡器配置:EQ_API_URL、EQ_EXTERNAL_API_URL
|
||
- **新增**:定时任务:ENABLE_PERSIST_TASK(默认 false)
|
||
- **新增**:分享码配置:SHARE_CODE_MAX_PER_MAC(默认1)、SHARE_CODE_TTL_MIN(默认30分钟)
|
||
- 环境差异
|
||
- 开发环境:本地 MySQL、公网 Meilisearch、默认 Redis 地址
|
||
- 生产环境:AWS RDS 主机、内网 Meilisearch 主机、固定 Redis 参数
|
||
- 校验规则
|
||
- 数据库:生产环境必须提供密码;必填项校验
|
||
- Redis:必填主机
|
||
- Meilisearch:必填主机、API Key、索引名
|
||
- **新增**:S3:根据环境自动判断是否需要访问密钥
|
||
|
||
**章节来源**
|
||
- [internal/config/config.go:18-95](file://internal/config/config.go#L18-L95)
|
||
- [internal/config/database.go:17-72](file://internal/config/database.go#L17-L72)
|
||
- [internal/config/redis.go:16-57](file://internal/config/redis.go#L16-L57)
|
||
- [internal/config/meilisearch.go:14-51](file://internal/config/meilisearch.go#L14-L51)
|
||
- [internal/config/s3.go:12-36](file://internal/config/s3.go#L12-L36)
|
||
- [internal/config/equalize.go:12-32](file://internal/config/equalize.go#L12-L32)
|
||
- [internal/config/share_code_ttl.go:12-59](file://internal/config/share_code_ttl.go#L12-L59)
|
||
- [README.md:39-73](file://README.md#L39-L73)
|
||
|
||
### 数据库连接与连接池
|
||
- 连接参数:用户、密码、TCP 地址、数据库名、字符集与时区参数
|
||
- 连接池:最大并发、空闲连接数、连接生命周期
|
||
- 启动校验:超时上下文下执行 Ping,失败则关闭并返回错误
|
||
|
||
**章节来源**
|
||
- [internal/database/mysql.go:14-47](file://internal/database/mysql.go#L14-L47)
|
||
|
||
### 缓存与搜索
|
||
- Redis:按主机:端口、密码、库号初始化客户端
|
||
- Meilisearch:按主机与 API Key 初始化索引客户端,提供模型列表检索方法
|
||
|
||
**章节来源**
|
||
- [internal/cache/redis.go:10-17](file://internal/cache/redis.go#L10-L17)
|
||
- [internal/search/meilisearch.go:17-46](file://internal/search/meilisearch.go#L17-L46)
|
||
|
||
### S3存储与均衡器配置
|
||
- **新增**:S3存储:支持AWS S3桶和区域配置,开发环境可使用模拟凭据,生产环境可使用IAM角色或环境变量
|
||
- **新增**:均衡器API:支持内外网切换,开发环境使用公网地址,生产环境使用内网地址
|
||
|
||
**章节来源**
|
||
- [internal/config/s3.go:12-36](file://internal/config/s3.go#L12-L36)
|
||
- [internal/config/equalize.go:12-32](file://internal/config/equalize.go#L12-L32)
|
||
|
||
### 定时任务与分享码配置
|
||
- **新增**:定时任务:支持设备和分享码的定时持久化,通过 ENABLE_PERSIST_TASK 控制启用
|
||
- **新增**:分享码配置:支持最大数量限制和TTL时间配置,支持多种时间单位格式
|
||
|
||
**章节来源**
|
||
- [cmd/server/main.go:86-98](file://cmd/server/main.go#L86-L98)
|
||
- [internal/config/share_code_ttl.go:12-59](file://internal/config/share_code_ttl.go#L12-L59)
|
||
|
||
### 路由与中间件
|
||
- 路由分组:/api/v1(健康检查)、/audio(品牌、型号、设备上报、模型列表等)
|
||
- 中间件:恢复、请求 ID、日志、CORS
|
||
- 日志字段:状态码、方法、路径、耗时、客户端 IP、请求 ID、查询参数、错误信息
|
||
|
||
**章节来源**
|
||
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
||
- [internal/middleware/logger.go:10-45](file://internal/middleware/logger.go#L10-L45)
|
||
- [internal/middleware/cors.go:7-19](file://internal/middleware/cors.go#L7-L19)
|
||
|
||
### 日志与运行模式
|
||
- 开发模式:开发配置,彩色日志等级编码
|
||
- 生产模式:生产配置,ISO 时间编码
|
||
- Gin 模式:生产模式启用 ReleaseMode
|
||
|
||
**章节来源**
|
||
- [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19)
|
||
- [cmd/server/main.go:46-48](file://cmd/server/main.go#L46-L48)
|
||
|
||
### Docker容器化部署
|
||
- **新增**:多阶段构建:使用golang:1.24-alpine作为构建镜像,alpine:3.20作为运行镜像
|
||
- **新增**:构建优化:CGO_ENABLED=0,GOOS=linux,使用ldflags="-s -w"减小二进制体积
|
||
- **新增**:时区配置:预装tzdata,设置Asia/Shanghai时区
|
||
- **新增**:健康检查:通过wget探测/api/v1/health端点
|
||
- **新增**:日志配置:json-file驱动,最大10MB,最多3个文件
|
||
|
||
**章节来源**
|
||
- [Dockerfile:1-26](file://Dockerfile#L1-L26)
|
||
- [docker-compose.yml:22-33](file://docker-compose.yml#L22-L33)
|
||
|
||
## 依赖分析
|
||
- 外部依赖: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集成
|
||
|
||
```mermaid
|
||
graph LR
|
||
MAIN["cmd/server/main.go"] --> CFG["internal/config/*"]
|
||
MAIN --> DB["internal/database/mysql.go"]
|
||
MAIN --> RC["internal/cache/redis.go"]
|
||
MAIN --> SRCH["internal/search/meilisearch.go"]
|
||
MAIN --> S3["internal/storage/s3.go"]
|
||
MAIN --> RT["internal/router/router.go"]
|
||
RT --> MW["internal/middleware/*"]
|
||
RT --> HND["internal/handler/*"]
|
||
MAIN --> LOG["pkg/logger/logger.go"]
|
||
DOCKER["Dockerfile"] --> MAIN
|
||
COMPOSE["docker-compose.yml"] --> DOCKER
|
||
```
|
||
|
||
**图表来源**
|
||
- [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)
|
||
|
||
**章节来源**
|
||
- [go.mod:5-46](file://go.mod#L5-L81)
|
||
|
||
## 性能考虑
|
||
- 连接池与超时
|
||
- 数据库连接池:最大并发、空闲连接、连接生命周期,减少连接抖动与资源占用
|
||
- 启动 Ping 超时:避免冷启动阻塞
|
||
- Gin 服务器超时
|
||
- 读取超时、写入超时、空闲超时,防止慢请求与资源泄漏
|
||
- 日志级别
|
||
- 错误与警告输出到生产日志,降低高基数日志对性能影响
|
||
- 搜索与缓存
|
||
- 合理设置搜索 Limit 与 AttributesToRetrieve,避免返回过多字段
|
||
- 缓存命中率优先,避免频繁访问上游服务
|
||
- **新增**:容器化优化
|
||
- 多阶段构建减少镜像大小
|
||
- 预装时区数据避免运行时下载
|
||
- 健康检查确保服务可用性
|
||
|
||
**章节来源**
|
||
- [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)
|
||
|
||
## 故障排除指南
|
||
- 启动失败(数据库连接)
|
||
- 现象:启动日志显示数据库连接失败
|
||
- 排查:确认 DATABASE_HOST/PORT/NAME/USER/PASSWORD;生产环境必须提供 DATABASE_PASSWORD;检查网络连通与安全组
|
||
- 启动失败(Redis 连接)
|
||
- 现象:无法连接缓存
|
||
- 排查:确认 REDIS_HOST/PORT/Password/Database;检查网络与认证
|
||
- 启动失败(Meilisearch 连接)
|
||
- 现象:搜索初始化失败或查询报错
|
||
- 排查:确认 MEILISEARCH_HOST/APIKey/Index;检查索引是否存在与权限
|
||
- **新增**:启动失败(S3连接)
|
||
- 现象:S3存储初始化失败
|
||
- 排查:确认S3桶、区域和凭据配置;检查AWS IAM权限
|
||
- **新增**:容器启动失败
|
||
- 现象:Docker容器无法启动或频繁重启
|
||
- 排查:检查环境变量配置、健康检查端点、日志输出
|
||
- 健康检查
|
||
- 访问 /api/v1/health,确认服务可用
|
||
- 日志定位
|
||
- 查看请求日志中的状态码、路径、耗时、请求 ID,结合错误字段定位问题
|
||
|
||
**章节来源**
|
||
- [cmd/server/main.go:57-60](file://cmd/server/main.go#L57-L60)
|
||
- [internal/config/database.go:57-71](file://internal/config/database.go#L57-L71)
|
||
- [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)
|
||
- [README.md:83-99](file://README.md#L83-L99)
|
||
|
||
## 结论
|
||
本项目提供了清晰的配置加载、中间件与路由结构,以及对数据库、缓存与搜索服务的标准化接入。通过明确的环境变量与校验规则,配合生产/开发差异化日志与 Gin 模式,可实现稳定高效的部署与运维。**新增的Docker支持进一步增强了部署灵活性,提供了多阶段构建、健康检查和容器编排能力。** 建议在生产环境中严格管理密钥与网络访问控制,并结合监控与日志体系完善可观测性。
|
||
|
||
## 附录
|
||
|
||
### 构建与运行
|
||
- 构建:使用 Makefile 的 build 目标生成二进制
|
||
- 运行:使用 Makefile 的 run 目标或直接运行二进制
|
||
- 测试:使用 Makefile 的 test 目标
|
||
- **新增**:Swagger文档:使用 Makefile 的 swag 目标自动生成API文档
|
||
|
||
**章节来源**
|
||
- [Makefile:3-19](file://Makefile#L3-L19)
|
||
- [README.md:75-81](file://README.md#L75-L81)
|
||
|
||
### 环境变量与默认值
|
||
- APP_ENV、APP_HOST、APP_PORT、GIN_MODE
|
||
- DATABASE_*、REDIS_*、MEILISEARCH_*
|
||
- **新增**:S3_*、EQ_*、ENABLE_PERSIST_TASK、SHARE_CODE_*、AWS_*
|
||
|
||
**章节来源**
|
||
- [internal/config/config.go:18-95](file://internal/config/config.go#L18-L95)
|
||
- [README.md:39-73](file://README.md#L39-L73)
|
||
|
||
### Docker 容器化部署
|
||
- **新增**:基础镜像:使用golang:1.24-alpine进行多阶段构建,最终运行alpine:3.20
|
||
- **新增**:构建优化:CGO_ENABLED=0,GOOS=linux,ldflags="-s -w"减小二进制体积
|
||
- **新增**:时区配置:预装ca-certificates和tzdata,设置Asia/Shanghai时区
|
||
- **新增**:端口映射:容器内部8080端口映射到宿主机8084端口
|
||
- **新增**:健康检查:通过wget探测http://localhost:8080/api/v1/health
|
||
- **新增**:日志配置:json-file驱动,max-size=10m,max-file=3
|
||
|
||
**章节来源**
|
||
- [Dockerfile:1-26](file://Dockerfile#L1-L26)
|
||
- [docker-compose.yml:1-33](file://docker-compose.yml#L1-L33)
|
||
|
||
### Kubernetes 部署示例要点
|
||
- **新增**:Deployment:副本数、资源限制、探针(Liveness/Readiness)
|
||
- **新增**:Service:ClusterIP/LoadBalancer,暴露监听端口
|
||
- **新增**:ConfigMap:存放非敏感配置(如 APP_ENV)
|
||
- **新增**:Secret:存放数据库密码、Redis 密码、Meilisearch API Key、AWS 凭据
|
||
- **新增**:Ingress:域名与 TLS(如需要)
|
||
- **新增**:HPA:基于 CPU/自定义指标扩缩容
|
||
- **新增**:PodDisruptionBudget:确保服务可用性
|
||
|
||
### 监控与告警
|
||
- 指标:QPS、P95/P99 延迟、错误率、连接池使用率、搜索延迟、容器资源使用
|
||
- 日志:请求日志、错误日志、启动/关闭事件、容器健康状态
|
||
- 告警:错误率阈值、延迟阈值、连接池耗尽、外部服务不可用、容器重启
|
||
|
||
### 备份与恢复
|
||
- 数据库:定期逻辑备份与增量备份,验证恢复流程
|
||
- 缓存:关注热数据重建策略,避免单点失效
|
||
- 配置:Secret/ConfigMap 版本化管理,变更审计
|
||
- **新增**:容器镜像:版本化管理,支持快速回滚
|
||
|
||
### 版本升级流程
|
||
- 预发布:灰度最小集群,验证健康检查与关键接口
|
||
- 升级:滚动更新,观察指标与日志
|
||
- 回滚:快速回滚至上一个稳定版本
|
||
- 文档:记录变更与回滚步骤
|
||
- **新增**:容器升级:支持镜像版本标签管理
|
||
|
||
### 安全与合规
|
||
- 最小权限:数据库、缓存、搜索服务账号只授予必要权限
|
||
- 网络隔离:生产网络与开发网络分离,安全组放通最小范围
|
||
- 密钥管理:通过 Secret 管理密钥,禁用明文存储
|
||
- 合规:日志保留策略、访问审计、数据加密传输
|
||
- **新增**:容器安全:镜像扫描、只读根文件系统、非root用户运行
|
||
|
||
### 自动化部署与 CI/CD 集成
|
||
- 构建:在 CI 中执行 go mod tidy、go test、go build、swag init
|
||
- 扫描:静态扫描与依赖漏洞扫描
|
||
- 镜像:构建镜像并推送制品库,支持多架构镜像
|
||
- 部署:Kubernetes 应用清单与版本标签管理
|
||
- 回滚:支持一键回滚至上一个版本
|
||
- **新增**:容器编排:docker-compose支持本地开发环境快速部署 |