181 lines
4.9 KiB
Bash
Executable File
181 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 情绪博物馆后端服务部署脚本
|
||
# 部署到远程服务器 101.200.208.45
|
||
|
||
set -e
|
||
|
||
# 配置变量
|
||
APP_NAME="emotion-museum-single"
|
||
JAR_NAME="backend-single-1.0.0.jar"
|
||
JAR_PATH="./target/${JAR_NAME}"
|
||
|
||
# 远程服务器配置
|
||
REMOTE_HOST="101.200.208.45"
|
||
REMOTE_USER="root"
|
||
REMOTE_DIR="/data/programs/emotion-museum"
|
||
REMOTE_LOG_DIR="/data/logs/emotion-museum"
|
||
REMOTE_JAR_NAME="emotion-single-1.0.0.jar"
|
||
SPRING_PROFILE="test"
|
||
|
||
# 颜色输出
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m'
|
||
|
||
log_info() {
|
||
echo -e "${GREEN}[INFO]${NC} $1"
|
||
}
|
||
|
||
log_warn() {
|
||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
# 构建项目
|
||
build_project() {
|
||
log_info "开始构建项目..."
|
||
|
||
if ! command -v mvn > /dev/null 2>&1; then
|
||
log_error "未找到Maven命令,请确保已安装Maven"
|
||
exit 1
|
||
fi
|
||
|
||
log_info "执行: mvn clean package -DskipTests"
|
||
if ! mvn clean package -DskipTests; then
|
||
log_error "项目构建失败"
|
||
exit 1
|
||
fi
|
||
|
||
if [ ! -f "$JAR_PATH" ]; then
|
||
log_error "项目构建失败,未找到JAR文件: $JAR_PATH"
|
||
exit 1
|
||
fi
|
||
|
||
log_info "✅ 项目构建成功: $JAR_PATH"
|
||
log_info "文件大小: $(ls -lh $JAR_PATH | awk '{print $5}')"
|
||
}
|
||
|
||
# 检查JAR文件
|
||
check_jar() {
|
||
if [ ! -f "$JAR_PATH" ]; then
|
||
log_error "JAR文件不存在: $JAR_PATH"
|
||
log_info "请先执行打包命令: mvn clean package"
|
||
exit 1
|
||
fi
|
||
log_info "JAR文件检查通过: $JAR_PATH"
|
||
}
|
||
|
||
# 显示服务状态
|
||
show_status() {
|
||
log_info "=== 服务信息 ==="
|
||
log_info "服务器地址: $REMOTE_HOST"
|
||
log_info "部署目录: $REMOTE_DIR"
|
||
log_info "日志目录: $REMOTE_LOG_DIR"
|
||
log_info "Spring Profile: $SPRING_PROFILE"
|
||
|
||
log_info "检查服务状态..."
|
||
ssh $REMOTE_USER@$REMOTE_HOST "ps aux | grep $REMOTE_JAR_NAME | grep -v grep" || log_info "服务未运行"
|
||
}
|
||
|
||
# 部署到远程服务器
|
||
# 参数: $1 - 可选,指定要上传的额外文件
|
||
deploy() {
|
||
UPLOAD_SCRIPT="$1"
|
||
|
||
log_info "开始部署到 $REMOTE_HOST..."
|
||
|
||
build_project
|
||
check_jar
|
||
|
||
# 创建远程目录
|
||
log_info "创建远程目录..."
|
||
ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_DIR" || { log_error "创建远程目录失败"; exit 1; }
|
||
ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_LOG_DIR" || { log_error "创建远程日志目录失败"; exit 1; }
|
||
|
||
# 上传JAR文件
|
||
log_info "上传JAR文件到远程服务器..."
|
||
log_info "本地文件: $JAR_PATH"
|
||
log_info "远程路径: $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$REMOTE_JAR_NAME"
|
||
|
||
if ! scp "$JAR_PATH" $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$REMOTE_JAR_NAME; then
|
||
log_error "上传JAR文件失败"
|
||
exit 1
|
||
fi
|
||
log_info "✅ JAR文件上传成功"
|
||
|
||
# 验证远程文件
|
||
log_info "验证远程文件..."
|
||
ssh $REMOTE_USER@$REMOTE_HOST "ls -lh $REMOTE_DIR/$REMOTE_JAR_NAME" || { log_error "远程文件验证失败"; exit 1; }
|
||
|
||
# 上传额外文件
|
||
if [ -n "$UPLOAD_SCRIPT" ] && [ -f "$UPLOAD_SCRIPT" ]; then
|
||
log_info "上传文件到远程服务器: $UPLOAD_SCRIPT"
|
||
if ! scp "$UPLOAD_SCRIPT" $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/; then
|
||
log_error "上传文件失败: $UPLOAD_SCRIPT"
|
||
exit 1
|
||
fi
|
||
log_info "✅ 文件上传成功: $UPLOAD_SCRIPT"
|
||
|
||
REMOTE_FILENAME=$(basename "$UPLOAD_SCRIPT")
|
||
if [[ "$REMOTE_FILENAME" == *.sh ]]; then
|
||
ssh $REMOTE_USER@$REMOTE_HOST "chmod +x $REMOTE_DIR/$REMOTE_FILENAME"
|
||
fi
|
||
fi
|
||
|
||
# 执行远程部署
|
||
log_info "在远程服务器上执行部署..."
|
||
if ! ssh $REMOTE_USER@$REMOTE_HOST "cd $REMOTE_DIR && ./deploy-server.sh $SPRING_PROFILE"; then
|
||
log_error "远程部署脚本执行失败"
|
||
exit 1
|
||
fi
|
||
|
||
log_info "✅ 部署完成!"
|
||
show_status
|
||
}
|
||
|
||
# 打印使用说明
|
||
print_usage() {
|
||
echo "用法: $0 [命令] [参数]"
|
||
echo ""
|
||
echo "命令:"
|
||
echo " (无参数) - 部署到远程服务器(默认)"
|
||
echo " [文件名] - 部署并上传指定文件(如 deploy-server.sh)"
|
||
echo " build - 仅构建项目"
|
||
echo " status - 查看远程服务状态"
|
||
echo ""
|
||
echo "示例:"
|
||
echo " $0 # 部署到远程服务器"
|
||
echo " $0 deploy-server.sh # 同时上传部署脚本"
|
||
echo " $0 build # 仅构建项目"
|
||
echo " $0 status # 查看服务状态"
|
||
}
|
||
|
||
# 主逻辑
|
||
case "${1:-}" in
|
||
"")
|
||
deploy
|
||
;;
|
||
"build")
|
||
build_project
|
||
;;
|
||
"status")
|
||
show_status
|
||
;;
|
||
"help"|"-h"|"--help")
|
||
print_usage
|
||
;;
|
||
*)
|
||
# 如果参数是文件,则上传该文件
|
||
if [ -f "$1" ]; then
|
||
deploy "$1"
|
||
else
|
||
deploy "$1"
|
||
fi
|
||
;;
|
||
esac
|