Files
ljwx-health/V2-MIGRATION-SUMMARY.md
T
2025-11-28 14:51:25 +08:00

9.9 KiB
Raw Blame History

LJWX v2.0 重构方案总结

📋 概览

本次重构完美解决了您提出的三个核心问题:

✅ 问题1: 配置管理统一化

改进前:

  • monitoring-versions.env - 版本配置
  • docker-compose.prod.yml - 硬编码配置值
  • build-and-push.sh - 脚本内硬编码逻辑

改进后:

  • 单一配置源: .env 文件
  • 所有版本号、密码、端口等配置统一管理
  • Docker Compose 使用环境变量替换
  • 构建脚本从 .env 读取所有配置

✅ 问题2: 脚本分阶段执行

改进前:

  • 一体化执行,无法分步操作
  • 出错后难以定位和恢复
  • 无法单独构建某个组件

改进后:

./build-and-push-v2.sh -b    # 仅构建
./build-and-push-v2.sh -p    # 仅推送
./build-and-push-v2.sh -d    # 仅部署
./build-and-push-v2.sh -a    # 全部执行

# 支持单组件操作
./build-and-push-v2.sh -b -c ljwx-boot
./build-and-push-v2.sh -p -c ljwx-mysql

✅ 问题3: 数据库版本管理

改进前:

  • 手动导出 data.sql
  • 容易出现版本不一致
  • 无法追踪变更历史
  • 升级困难且易出错

改进后:

  • 版本化迁移: Flyway风格的迁移脚本
  • 自动追踪: schema_migrations 表记录历史
  • 优雅升级: 增量迁移脚本
  • 支持回滚: 每个迁移有对应回滚脚本
  • 幂等性: 脚本可重复执行

📁 新增文件清单

核心配置文件

文件 说明 用途
.env.unified 统一配置模板 复制后作为实际配置
.env 实际配置文件 所有配置的唯一来源

核心脚本

文件 说明 主要功能
build-and-push-v2.sh v2构建脚本 分阶段构建、推送、部署
db-migrate.sh 数据库迁移工具 导出、迁移、回滚管理
verify-setup.sh 安装验证脚本 检查环境和配置

Docker配置

文件 说明 改进点
docker-compose.prod.v2.yml v2版本Compose 全部使用环境变量

数据库迁移

目录/文件 说明
docker/mysql/migrations/ 迁移脚本目录
docker/mysql/migrations/README.md 迁移文档
docker/mysql/migrations/V*.sql 版本化迁移脚本
docker/mysql/migrations/rollback/ 回滚脚本目录

文档

文件 说明
DEPLOYMENT-GUIDE-V2.md 完整部署指南(25页)
QUICK-START-V2.md 快速开始指南
V2-MIGRATION-SUMMARY.md 本文档

🔄 从v1迁移到v2

步骤1: 备份现有配置

# 备份现有文件
cp .env .env.v1.bak
cp docker-compose.prod.yml docker-compose.prod.v1.yml
cp build-and-push.sh build-and-push.v1.sh

步骤2: 创建v2配置

# 复制统一配置模板
cp .env.unified .env

# 从旧配置迁移设置
# 参考 monitoring-versions.env 和 docker-compose.prod.yml 中的值
vim .env

步骤3: 导出数据库基线

# 确保 .env 中配置了宿主机MySQL连接信息
./db-migrate.sh export 2.0.3

步骤4: 测试新脚本

# 验证环境
./verify-setup.sh

# 测试构建(先测试单个组件)
./build-and-push-v2.sh -b -c ljwx-mysql

# 如成功,构建所有组件
./build-and-push-v2.sh -b

步骤5: 完整部署

./build-and-push-v2.sh -p    # 推送镜像
./build-and-push-v2.sh -d    # 部署服务

💡 核心特性

1. 统一配置管理

# .env 文件示例
LJWX_VERSION=2.0.3
REGISTRY=localhost:15000/ljwx
MYSQL_ROOT_PASSWORD=123456
MYSQL_DATABASE=test
REDIS_PASSWORD=123456

# Docker Compose 自动使用
services:
  ljwx-mysql:
    image: ${REGISTRY}/ljwx-mysql:${LJWX_VERSION}
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}

2. 灵活的构建流程

# 场景1: 快速迭代单个组件
./build-and-push-v2.sh -b -c ljwx-boot
./build-and-push-v2.sh -p -c ljwx-boot
docker-compose restart ljwx-boot

# 场景2: 完整发版
./build-and-push-v2.sh -e    # 导出DB
./build-and-push-v2.sh -b    # 构建
./build-and-push-v2.sh -p    # 推送
./build-and-push-v2.sh -d    # 部署

# 场景3: 一键部署
./build-and-push-v2.sh -e -a

3. 数据库版本控制

# 创建新迁移
./db-migrate.sh create 2.0.4 add_features

# 编辑迁移脚本
vim docker/mysql/migrations/V2.0.4__add_features.sql

# 应用迁移
./db-migrate.sh apply 2.0.4

# 查看历史
./db-migrate.sh status

# 回滚
./db-migrate.sh rollback 2.0.3

🎯 最佳实践

开发环境

# 1. 修改代码后
./build-and-push-v2.sh -b -c ljwx-boot

# 2. 推送并重启
./build-and-push-v2.sh -p -c ljwx-boot
docker-compose restart ljwx-boot

# 3. 查看日志
docker-compose logs -f ljwx-boot

生产环境

# 1. 备份数据
docker exec ljwx-mysql mysqldump -u root -p123456 test > backup.sql

# 2. 更新版本号
vim .env  # LJWX_VERSION=2.0.4

# 3. 导出数据库
./db-migrate.sh export 2.0.4

# 4. 构建新版本
./build-and-push-v2.sh -b

# 5. 推送到Registry
./build-and-push-v2.sh -p

# 6. 部署
./build-and-push-v2.sh -d

数据库升级

# 1. 创建迁移脚本
./db-migrate.sh create 2.0.4 add_user_score_table

# 2. 编辑SQL(包括幂等性检查)
vim docker/mysql/migrations/V2.0.4__add_user_score_table.sql

# 3. 编辑回滚脚本
vim docker/mysql/migrations/rollback/R2.0.4__rollback.sql

# 4. 测试环境验证
./db-migrate.sh apply 2.0.4
# 测试功能...
./db-migrate.sh rollback 2.0.3  # 测试回滚

# 5. 重新应用
./db-migrate.sh apply 2.0.4

# 6. 构建新镜像
./build-and-push-v2.sh -b -c ljwx-mysql

📊 改进对比

维度 v1.x v2.0 改进
配置文件数量 3+ 1 ⭐⭐⭐⭐⭐
构建灵活性 一体化 分阶段 ⭐⭐⭐⭐⭐
数据库管理 手动 自动化 ⭐⭐⭐⭐⭐
版本追踪 ❌ ✅ ⭐⭐⭐⭐⭐
回滚支持 ❌ ✅ ⭐⭐⭐⭐⭐
错误恢复 困难 容易 ⭐⭐⭐⭐
学习曲线 中等 低 ⭐⭐⭐⭐
文档完整性 基础 详尽 ⭐⭐⭐⭐⭐

🔍 关键改进点

1. 配置管理

Before:

# monitoring-versions.env
LJWX_VERSION=2.0.3

# docker-compose.prod.yml (硬编码)
image: localhost:15000/ljwx/ljwx-mysql:2.0.3
environment:
  - MYSQL_ROOT_PASSWORD=123456

# build-and-push.sh (硬编码)
LJWX_VERSION="1.2.16"
REGISTRY="localhost:15000/ljwx"

After:

# .env (唯一配置源)
LJWX_VERSION=2.0.3
REGISTRY=localhost:15000/ljwx
MYSQL_ROOT_PASSWORD=123456

# docker-compose.prod.v2.yml (使用变量)
image: ${REGISTRY}/ljwx-mysql:${LJWX_VERSION}
environment:
  - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}

# build-and-push-v2.sh (从.env读取)
source .env

2. 数据库管理

Before:

# 手动导出
mysqldump -h 127.0.0.1 -u root -p123456 test > data.sql
cp data.sql docker/mysql/

# 构建MySQL镜像
docker build -t ljwx-mysql .

# 问题:容易忘记导出,版本不一致

After:

# 导出时自动版本化
./db-migrate.sh export 2.0.3
# 生成:
#   - docker/mysql/data.sql (Docker使用)
#   - docker/mysql/migrations/V2.0.3__baseline.sql (版本化)
#   - backups/mysql/baseline_2.0.3_*.sql (备份)

# 增量升级
./db-migrate.sh create 2.0.4 add_features
./db-migrate.sh apply 2.0.4

# 自动记录历史
SELECT * FROM schema_migrations;

3. 构建流程

Before:

# 只能一次性执行
./build-and-push.sh
# 失败后难以定位问题

After:

# 分阶段执行,每步可单独调试
./build-and-push-v2.sh -b    # 构建失败?查看 logs/build/
./build-and-push-v2.sh -p    # 推送失败?检查Registry
./build-and-push-v2.sh -d    # 部署失败?查看 logs/deploy/

# 单组件操作
./build-and-push-v2.sh -b -c ljwx-boot  # 只构建boot

📖 快速参考

常用命令速查

# 配置
cp .env.unified .env          # 创建配置
vim .env                      # 编辑配置
./verify-setup.sh             # 验证环境

# 构建部署
./build-and-push-v2.sh -b     # 构建所有
./build-and-push-v2.sh -p     # 推送所有
./build-and-push-v2.sh -d     # 部署服务
./build-and-push-v2.sh -a     # 全部执行

# 单组件
./build-and-push-v2.sh -b -c ljwx-boot  # 构建单个
./build-and-push-v2.sh -p -c ljwx-boot  # 推送单个

# 数据库
./db-migrate.sh export 2.0.3         # 导出基线
./db-migrate.sh create 2.0.4 desc    # 创建迁移
./db-migrate.sh apply 2.0.4          # 应用迁移
./db-migrate.sh apply-all            # 应用所有
./db-migrate.sh status               # 查看状态
./db-migrate.sh rollback 2.0.3       # 回滚

# Docker Compose
docker-compose -f docker-compose.prod.v2.yml up -d
docker-compose -f docker-compose.prod.v2.yml ps
docker-compose -f docker-compose.prod.v2.yml logs -f
docker-compose -f docker-compose.prod.v2.yml restart
docker-compose -f docker-compose.prod.v2.yml down

🎓 学习资源

  • 快速开始: QUICK-START-V2.md (5分钟上手)
  • 完整指南: DEPLOYMENT-GUIDE-V2.md (详细文档)
  • 迁移指南: docker/mysql/migrations/README.md (数据库迁移)
  • 配置说明: .env.unified (所有配置项说明)

🎉 总结

v2.0重构完美解决了您提出的所有问题:

  1. ✅ 单一配置源 - .env 统一管理所有配置
  2. ✅ 灵活脚本 - 支持 -b/-p/-d/-a 分阶段执行
  3. ✅ 版本化迁移 - 数据库变更可追踪、可回滚、优雅升级

核心优势:

  • 🚀 提升效率: 分阶段操作,快速定位问题
  • 🛡️ 降低风险: 版本追踪,支持回滚
  • 📝 易于维护: 配置集中,文档完整
  • 🔧 灵活扩展: 易于添加新组件

下一步建议:

  1. 阅读 QUICK-START-V2.md 快速上手
  2. 参考 DEPLOYMENT-GUIDE-V2.md 了解详细流程
  3. 使用 verify-setup.sh 验证环境
  4. 执行 ./build-and-push-v2.sh -e -a 完成首次部署

欢迎使用LJWX v2.0! 🎊