#!/bin/bash # PolyHermes 后端部署脚本 # 支持 Java 直接部署和 Docker 部署 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 配置 APP_NAME="polyhermes-backend" JAR_NAME="polyhermes-backend-1.0.0.jar" DEPLOY_DIR="./deploy" PROFILE="${SPRING_PROFILES_ACTIVE:-prod}" # 打印信息 info() { echo -e "${GREEN}[INFO]${NC} $1" } warn() { echo -e "${YELLOW}[WARN]${NC} $1" } error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查 Java 环境 check_java() { if ! command -v java &> /dev/null; then error "Java 未安装,请先安装 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 error "Java 版本过低,需要 Java 17+,当前版本: $JAVA_VERSION" exit 1 fi info "Java 环境检查通过: $(java -version 2>&1 | head -n 1)" } # 构建应用 build_app() { info "开始构建应用..." if ! command -v gradle &> /dev/null; then error "Gradle 未安装,请先安装 Gradle 或使用 Gradle Wrapper" exit 1 fi ./gradlew clean bootJar if [ ! -f "build/libs/$JAR_NAME" ]; then error "构建失败,JAR 文件不存在" exit 1 fi info "构建完成: build/libs/$JAR_NAME" } # Java 部署 deploy_java() { info "使用 Java 方式部署..." # 创建部署目录 mkdir -p "$DEPLOY_DIR" # 复制 JAR 文件 cp "build/libs/$JAR_NAME" "$DEPLOY_DIR/" # 创建启动脚本 cat > "$DEPLOY_DIR/start.sh" < "$DEPLOY_DIR/${APP_NAME}.service" < /dev/null; then error "Docker 未安装,请先安装 Docker" exit 1 fi if ! command -v docker-compose &> /dev/null; then error "Docker Compose 未安装,请先安装 Docker Compose" exit 1 fi # 生成随机字符串 generate_random_string() { local length=${1:-32} openssl rand -hex $length 2>/dev/null || \ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $length | head -n 1 } # 创建 .env 文件(如果不存在) if [ ! -f ".env" ]; then warn ".env 文件不存在,创建示例文件..." # 生成随机值 DB_PASSWORD=$(generate_random_string 32) JWT_SECRET=$(generate_random_string 64) ADMIN_RESET_KEY=$(generate_random_string 32) cat > .env <