Files
junhong_cmp_fiber/openspec/changes/archive/2026-01-26-deployment-self-init/proposal.md
huang 45aa7deb87
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m33s
feat: 添加环境变量管理工具和部署配置改版
主要改动:
- 新增交互式环境配置脚本 (scripts/setup-env.sh)
- 新增本地启动快捷脚本 (scripts/run-local.sh)
- 新增环境变量模板文件 (.env.example)
- 部署模式改版:使用嵌入式配置 + 环境变量覆盖
- 添加对象存储功能支持
- 改进 IoT 卡片导入任务
- 优化 OpenAPI 文档生成
- 删除旧的配置文件,改用嵌入式默认配置
2026-01-26 10:28:29 +08:00

3.9 KiB
Raw Blame History

提案:部署自初始化

Why

当前应用部署需要手动创建目录结构、拷贝配置文件,过程繁琐且容易出错。临时目录创建逻辑分散在各组件中,非 root 用户可能因权限问题导致启动失败。配置文件必须外部提供,无法实现"开箱即用"的部署体验。

本变更旨在实现应用自初始化,让应用启动时自动创建所需目录、使用嵌入的默认配置,大幅简化部署流程。

What Changes

1. 集中化目录初始化

  • 新增 pkg/bootstrap/directories.go,在应用启动时统一创建所有必需目录
  • 移除各组件(如 s3.go)中分散的目录创建逻辑
  • 提供降级策略:权限不足时自动使用备用路径

2. 配置嵌入机制

  • 使用 go:embed 将默认配置嵌入二进制文件
  • 配置优先级:环境变量 > 嵌入默认值(移除外部配置文件依赖)
  • 敏感配置(数据库密码等)通过环境变量提供
  • 移除 configs/ 目录和配置文件热重载机制(开发阶段不需要)

3. Docker 部署简化

  • Dockerfile 预创建关键目录并设置正确权限
  • 移除 configs 目录挂载,全部使用环境变量
  • docker-compose 只挂载日志目录(持久化需求)

4. 环境变量规范化

  • 统一环境变量前缀:JUNHONG_
  • 支持嵌套配置:JUNHONG_DATABASE_HOSTJUNHONG_REDIS_ADDRESS
  • 配置验证:必填配置未设置时启动失败并给出明确提示

5. 清理冗余

  • 删除 pkg/config/watcher.go(配置热重载)
  • 删除 configs/*.yaml 外部配置文件
  • 删除 docker-compose 中的 configs 卷挂载
  • 简化 pkg/config/loader.go

Capabilities

New Capabilities

  • bootstrap-init: 应用启动时的集中化初始化机制,包括目录创建、配置加载、验证等
  • embedded-config: 配置嵌入机制,使用 go:embed + 环境变量覆盖,无需外部配置文件

Modified Capabilities

  • dependency-injection: 调整 bootstrap 流程,在组件初始化前完成目录和配置的准备

Impact

代码变更

文件/目录 变更类型 说明
pkg/bootstrap/directories.go 新增 目录初始化逻辑
pkg/config/embedded.go 新增 配置嵌入和加载逻辑
pkg/config/defaults/config.yaml 新增 嵌入的默认配置文件
pkg/config/loader.go 重写 简化为嵌入配置 + 环境变量
pkg/config/watcher.go 删除 不再需要热重载
pkg/storage/s3.go 修改 移除目录创建逻辑
cmd/api/main.go 修改 调用目录初始化
cmd/worker/main.go 修改 调用目录初始化
internal/bootstrap/ 修改 调整初始化顺序
configs/*.yaml 删除 配置嵌入后不再需要

Docker 变更

文件 变更类型 说明
Dockerfile.api 修改 预创建目录、删除 COPY configs
Dockerfile.worker 修改 预创建目录、删除 COPY configs
docker-compose.prod.yml 重写 纯环境变量配置、删除 configs 挂载
docker/entrypoint-api.sh 简化 只保留迁移逻辑

部署流程变更

变更前5 步):

# 1. SSH 到服务器
# 2. 创建目录 mkdir -p /opt/junhong_cmp/{configs,logs}
# 3. 复制 docker-compose.prod.yml
# 4. 复制配置文件到 configs/
# 5. docker-compose up -d

变更后1 步):

# docker-compose up -dCI/CD 自动部署,或手动拉取 compose 文件)

依赖

  • Go 1.16+go:embed 支持)
  • 无新增外部依赖

预期收益

指标 变更前 变更后
首次部署步骤 5 步 1 步
配置文件 4 个外部文件 0 个(嵌入)
权限失败风险 低(降级策略)
环境可移植性 Docker only Docker/K8s/裸机
配置热重载 支持 移除(开发阶段不需要)