deploy-java.sh 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/usr/bin/env bash
  2. # DMS 一键部署脚本(Java 版):构建前端 + Maven 打包 + 组装发行包
  3. # 用法:在项目根目录执行 ./build/deploy-java.sh [--skip-frontend]
  4. set -e
  5. ROOT="$(cd "$(dirname "$0")/.." && pwd)"
  6. BACKEND="$ROOT/backend-java"
  7. FRONTEND="$ROOT/frontend"
  8. RELEASE="$ROOT/dist-package-java/dms-server"
  9. TEMPLATES="$ROOT/build/java-templates"
  10. SKIP_FRONTEND=0
  11. for arg in "$@"; do
  12. case "$arg" in
  13. --skip-frontend|-SkipFrontend) SKIP_FRONTEND=1 ;;
  14. esac
  15. done
  16. echo "========== DMS 一键部署(Java 版) =========="
  17. echo "项目根目录: $ROOT"
  18. # ---------- 1. 前端构建 ----------
  19. if [ "$SKIP_FRONTEND" -eq 0 ]; then
  20. echo "[1/4] 构建前端..."
  21. (cd "$FRONTEND" && { [ -d node_modules ] || npm install; } && npm run build)
  22. else
  23. echo "[1/4] 跳过前端构建 (--skip-frontend)"
  24. fi
  25. [ -f "$FRONTEND/dist/index.html" ] || { echo "错误:前端产物不存在,请先 npm run build"; exit 1; }
  26. # ---------- 2. Maven 打包 ----------
  27. echo "[2/4] Maven 打包..."
  28. (cd "$BACKEND" && mvn -q clean package -Pfrontend)
  29. [ -f "$BACKEND/target/dms-server.jar" ] || { echo "错误:未找到打包产物 dms-server.jar"; exit 1; }
  30. # ---------- 3. 整理发行包 ----------
  31. echo "[3/4] 整理发行包..."
  32. # 暂存现有 dms-storage:删除发行目录前移出,重打包后自动还原,
  33. # 避免运行数据每次丢失(mv 同卷瞬时完成;被占用时中止打包而非删数据)
  34. KEEP_STORAGE="$ROOT/dist-package-java/dms-storage.keep"
  35. if [ -d "$RELEASE/dms-storage" ]; then
  36. rm -rf "$KEEP_STORAGE"
  37. if ! mv "$RELEASE/dms-storage" "$KEEP_STORAGE"; then
  38. echo "错误:dms-storage 暂存失败(可能被运行中的服务占用),请先停止 dms-server 再打包" >&2
  39. exit 1
  40. fi
  41. fi
  42. rm -rf "$RELEASE"
  43. mkdir -p "$RELEASE"
  44. cp "$BACKEND/target/dms-server.jar" "$RELEASE/"
  45. cp "$ROOT/backend/.env.example" "$RELEASE/"
  46. cp "$TEMPLATES/run.bat" "$TEMPLATES/run.sh" "$TEMPLATES/upgrade-db.bat" \
  47. "$TEMPLATES/upgrade-db.sh" "$TEMPLATES/README.txt" "$RELEASE/"
  48. if [ -f "$ROOT/tools/export_full_demo_data.py" ]; then
  49. # 工具三参数均必填:--env-file 提供库连接、--storage 提供文件根、--output 为输出目录
  50. # (产物含 full_demo_data.sql 与 storage 文件副本),仅取 SQL 进发行包,临时目录用完即删
  51. EXPORT_ENV=""
  52. for CAND in "$ROOT/backend/.env" "$ROOT/dist-package-java-bak/dms-server/.env"; do
  53. if [ -f "$CAND" ]; then EXPORT_ENV="$CAND"; break; fi
  54. done
  55. EXPORT_STORAGE="$ROOT/backend/dms-storage"
  56. if [ -z "$EXPORT_ENV" ]; then
  57. echo "警告:未找到可用的 .env(backend/.env 或备份目录),跳过导出示例数据库 SQL"
  58. elif [ ! -d "$EXPORT_STORAGE" ]; then
  59. echo "警告:未找到存储目录 $EXPORT_STORAGE,跳过导出示例数据库 SQL"
  60. else
  61. echo " 导出示例数据库 SQL..."
  62. EXPORT_TMP="$(mktemp -d)"
  63. if python "$ROOT/tools/export_full_demo_data.py" \
  64. --env-file "$EXPORT_ENV" --storage "$EXPORT_STORAGE" --output "$EXPORT_TMP" \
  65. && [ -f "$EXPORT_TMP/full_demo_data.sql" ]; then
  66. cp "$EXPORT_TMP/full_demo_data.sql" "$RELEASE/database-init.sql"
  67. echo " 已生成 database-init.sql"
  68. else
  69. echo "警告:导出示例数据库 SQL 失败,跳过"
  70. fi
  71. rm -rf "$EXPORT_TMP"
  72. fi
  73. fi
  74. # ---------- 4. 恢复 .env 和 dms-storage ----------
  75. # 优先级:打包前暂存(原地数据,mv 回)> 备份目录;发行目录已有的 dms-storage 绝不覆盖
  76. echo "[4/4] 恢复 .env 和 dms-storage..."
  77. BAK="$ROOT/dist-package-java-bak/dms-server"
  78. if [ -d "$BAK" ]; then
  79. [ -f "$BAK/.env" ] && cp "$BAK/.env" "$RELEASE/" && echo " 已恢复 .env"
  80. else
  81. echo " 备份目录不存在: $BAK - 跳过备份恢复"
  82. fi
  83. if [ -d "$KEEP_STORAGE" ]; then
  84. mv "$KEEP_STORAGE" "$RELEASE/dms-storage" && echo " 已保留重打包前的 dms-storage"
  85. elif [ -d "$BAK/dms-storage" ]; then
  86. cp -r "$BAK/dms-storage" "$RELEASE/" && echo " 已恢复 dms-storage(备份)"
  87. else
  88. echo " 无 dms-storage 可恢复(暂存与备份均无),跳过"
  89. fi
  90. echo "========== 部署完成(Java 版) =========="
  91. echo "发行包目录: $RELEASE"