#!/bin/bash ############################################## # Snapshot 后端部署脚本 # 适用于 Linux 环境 ############################################## # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 打印带颜色的消息 print_info() { echo -e "${GREEN}[INFO]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } # 检查命令是否存在 command_exists() { command -v "$1" >/dev/null 2>&1 } echo "============================================" echo "Snapshot 后端部署脚本" echo "============================================" echo # 1. 检查Java环境 echo "[1/6] 检查Java环境..." if ! command_exists java; then print_error "未检测到Java环境" echo "请安装 Java 17 或更高版本" exit 1 fi JAVA_VERSION=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d'.' -f1) if [ "$JAVA_VERSION" -lt 17 ]; then print_warning "Java版本较低,建议使用 Java 17+" fi print_info "Java环境检查通过" java -version | head -n 1 echo # 2. 检查Maven环境 echo "[2/6] 检查Maven环境..." if ! command_exists mvn; then print_error "未检测到Maven环境" echo "请安装 Maven" exit 1 fi print_info "Maven环境检查通过" mvn -version | head -n 1 echo # 3. 初始化数据库 echo "[3/6] 数据库初始化..." print_info "默认使用 SQLite,无需初始化数据库。" echo "如需使用 MySQL,请先修改 application-mysql.properties 中的连接信息。" echo read -p "是否跳过数据库初始化?(Y/n): " confirm if [ "$confirm" = "n" ] || [ "$confirm" = "N" ]; then print_info "请先配置 application-mysql.properties,然后手动执行:" echo " mysql -u -p < src/main/resources/sql/create.sql" exit 0 fi print_info "跳过数据库初始化" echo # 4. 清理之前的构建 echo "[4/6] 清理之前的构建..." mvn clean if [ $? -neq 0 ]; then print_error "清理失败" exit 1 fi print_info "清理完成" echo # 5. 编译打包 echo "[5/6] 编译打包项目..." mvn clean package -DskipTests if [ $? -neq 0 ]; then print_error "编译打包失败" exit 1 fi print_info "编译打包完成" echo # 6. 启动应用 echo "[6/6] 启动应用..." echo "正在启动Spring Boot应用..." echo # 检查是否已经在运行 if pgrep -f "snapshot-backend-1.0.0.jar" > /dev/null; then print_warning "检测到Java进程正在运行" read -p "是否停止现有进程?(y/n): " kill if [ "$kill" = "y" ] || [ "$kill" = "Y" ]; then pkill -f "snapshot-backend-1.0.0.jar" sleep 2 fi fi # 启动应用 JAR_FILE="target/snapshot-backend-1.0.0.jar" if [ ! -f "$JAR_FILE" ]; then print_error "JAR文件不存在: $JAR_FILE" exit 1 fi print_info "启动命令: nohup java -jar $JAR_FILE > app.log 2>&1 &" nohup java -jar "$JAR_FILE" > app.log 2>&1 & PID=$! # 等待应用启动 print_info "等待应用启动..." sleep 10 # 检查应用是否启动成功 if ps -p $PID > /dev/null; then echo echo "============================================" print_info "部署完成!" echo "============================================" echo echo "应用PID: $PID" echo "应用访问地址: http://localhost:7626" echo "日志文件: app.log" echo echo "查看日志: tail -f app.log" echo "停止应用: kill $PID" echo echo "应用正在后台运行..." else print_error "应用启动失败" echo "请查看日志文件: cat app.log" exit 1 fi