9.9 KiB
9.9 KiB
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重构完美解决了您提出的所有问题:
- ✅ 单一配置源 -
.env统一管理所有配置 - ✅ 灵活脚本 - 支持 -b/-p/-d/-a 分阶段执行
- ✅ 版本化迁移 - 数据库变更可追踪、可回滚、优雅升级
核心优势:
- 🚀 提升效率: 分阶段操作,快速定位问题
- 🛡️ 降低风险: 版本追踪,支持回滚
- 📝 易于维护: 配置集中,文档完整
- 🔧 灵活扩展: 易于添加新组件
下一步建议:
- 阅读
QUICK-START-V2.md快速上手 - 参考
DEPLOYMENT-GUIDE-V2.md了解详细流程 - 使用
verify-setup.sh验证环境 - 执行
./build-and-push-v2.sh -e -a完成首次部署
欢迎使用LJWX v2.0! 🎊