deploy.sh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #!/bin/bash
  2. ##############################################
  3. # Snapshot 后端部署脚本
  4. # 适用于 Linux 环境
  5. ##############################################
  6. # 颜色输出
  7. RED='\033[0;31m'
  8. GREEN='\033[0;32m'
  9. YELLOW='\033[1;33m'
  10. NC='\033[0m' # No Color
  11. # 打印带颜色的消息
  12. print_info() {
  13. echo -e "${GREEN}[INFO]${NC} $1"
  14. }
  15. print_error() {
  16. echo -e "${RED}[ERROR]${NC} $1"
  17. }
  18. print_warning() {
  19. echo -e "${YELLOW}[WARNING]${NC} $1"
  20. }
  21. # 检查命令是否存在
  22. command_exists() {
  23. command -v "$1" >/dev/null 2>&1
  24. }
  25. echo "============================================"
  26. echo "Snapshot 后端部署脚本"
  27. echo "============================================"
  28. echo
  29. # 1. 检查Java环境
  30. echo "[1/6] 检查Java环境..."
  31. if ! command_exists java; then
  32. print_error "未检测到Java环境"
  33. echo "请安装 Java 17 或更高版本"
  34. exit 1
  35. fi
  36. JAVA_VERSION=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d'.' -f1)
  37. if [ "$JAVA_VERSION" -lt 17 ]; then
  38. print_warning "Java版本较低,建议使用 Java 17+"
  39. fi
  40. print_info "Java环境检查通过"
  41. java -version | head -n 1
  42. echo
  43. # 2. 检查Maven环境
  44. echo "[2/6] 检查Maven环境..."
  45. if ! command_exists mvn; then
  46. print_error "未检测到Maven环境"
  47. echo "请安装 Maven"
  48. exit 1
  49. fi
  50. print_info "Maven环境检查通过"
  51. mvn -version | head -n 1
  52. echo
  53. # 3. 初始化数据库
  54. echo "[3/6] 数据库初始化..."
  55. print_info "默认使用 SQLite,无需初始化数据库。"
  56. echo "如需使用 MySQL,请先修改 application-mysql.properties 中的连接信息。"
  57. echo
  58. read -p "是否跳过数据库初始化?(Y/n): " confirm
  59. if [ "$confirm" = "n" ] || [ "$confirm" = "N" ]; then
  60. print_info "请先配置 application-mysql.properties,然后手动执行:"
  61. echo " mysql -u<USER> -p<PASSWORD> < src/main/resources/sql/create.sql"
  62. exit 0
  63. fi
  64. print_info "跳过数据库初始化"
  65. echo
  66. # 4. 清理之前的构建
  67. echo "[4/6] 清理之前的构建..."
  68. mvn clean
  69. if [ $? -neq 0 ]; then
  70. print_error "清理失败"
  71. exit 1
  72. fi
  73. print_info "清理完成"
  74. echo
  75. # 5. 编译打包
  76. echo "[5/6] 编译打包项目..."
  77. mvn clean package -DskipTests
  78. if [ $? -neq 0 ]; then
  79. print_error "编译打包失败"
  80. exit 1
  81. fi
  82. print_info "编译打包完成"
  83. echo
  84. # 6. 启动应用
  85. echo "[6/6] 启动应用..."
  86. echo "正在启动Spring Boot应用..."
  87. echo
  88. # 检查是否已经在运行
  89. if pgrep -f "snapshot-backend-1.0.0.jar" > /dev/null; then
  90. print_warning "检测到Java进程正在运行"
  91. read -p "是否停止现有进程?(y/n): " kill
  92. if [ "$kill" = "y" ] || [ "$kill" = "Y" ]; then
  93. pkill -f "snapshot-backend-1.0.0.jar"
  94. sleep 2
  95. fi
  96. fi
  97. # 启动应用
  98. JAR_FILE="target/snapshot-backend-1.0.0.jar"
  99. if [ ! -f "$JAR_FILE" ]; then
  100. print_error "JAR文件不存在: $JAR_FILE"
  101. exit 1
  102. fi
  103. print_info "启动命令: nohup java -jar $JAR_FILE > app.log 2>&1 &"
  104. nohup java -jar "$JAR_FILE" > app.log 2>&1 &
  105. PID=$!
  106. # 等待应用启动
  107. print_info "等待应用启动..."
  108. sleep 10
  109. # 检查应用是否启动成功
  110. if ps -p $PID > /dev/null; then
  111. echo
  112. echo "============================================"
  113. print_info "部署完成!"
  114. echo "============================================"
  115. echo
  116. echo "应用PID: $PID"
  117. echo "应用访问地址: http://localhost:7626"
  118. echo "日志文件: app.log"
  119. echo
  120. echo "查看日志: tail -f app.log"
  121. echo "停止应用: kill $PID"
  122. echo
  123. echo "应用正在后台运行..."
  124. else
  125. print_error "应用启动失败"
  126. echo "请查看日志文件: cat app.log"
  127. exit 1
  128. fi