feat: 添加生产环境部署脚本
- deploy-config.sh: 部署配置文件(服务器信息、路径配置) - deploy-mobile.sh: 移动端部署脚本 - deploy-admin.sh: 管理后台部署脚本 - deploy-service.sh: 服务部署脚本(只更新lib目录) - deploy-all.sh: 全量部署脚本
This commit is contained in:
parent
06dfa26514
commit
1e346c3a2e
69
scripts/deploy/deploy-admin.sh
Executable file
69
scripts/deploy/deploy-admin.sh
Executable file
@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# 管理后台部署脚本
|
||||
# 用法: ./deploy-admin.sh [本地zip文件路径]
|
||||
# ============================================
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
source "$SCRIPT_DIR/deploy-config.sh"
|
||||
|
||||
# 获取本地zip文件路径
|
||||
if [ -n "$1" ]; then
|
||||
LOCAL_ZIP="$1"
|
||||
else
|
||||
# 默认使用deploy目录下的fund-admin.zip
|
||||
LOCAL_ZIP="$SCRIPT_DIR/$LOCAL_DEPLOY_DIR/$LOCAL_ADMIN_ZIP"
|
||||
fi
|
||||
|
||||
log_info "============================================"
|
||||
log_info "管理后台部署开始"
|
||||
log_info "============================================"
|
||||
log_info "本地文件: $LOCAL_ZIP"
|
||||
log_info "远程路径: $ADMIN_DEPLOY_PATH"
|
||||
log_info ""
|
||||
|
||||
# 检查sshpass
|
||||
check_sshpass
|
||||
|
||||
# 检查本地文件是否存在
|
||||
if [ ! -f "$LOCAL_ZIP" ]; then
|
||||
log_error "本地zip文件不存在: $LOCAL_ZIP"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 显示文件大小
|
||||
FILE_SIZE=$(ls -lh "$LOCAL_ZIP" | awk '{print $5}')
|
||||
log_info "文件大小: $FILE_SIZE"
|
||||
|
||||
# 1. 备份旧版本
|
||||
log_info "备份旧版本..."
|
||||
remote_exec "if [ -d '$ADMIN_DEPLOY_PATH' ]; then \
|
||||
mkdir -p '$ADMIN_DEPLOY_PATH/../backup'; \
|
||||
BACKUP_NAME='fadmin_backup_\$(date +%Y%m%d_%H%M%S)'; \
|
||||
mv '$ADMIN_DEPLOY_PATH' '$ADMIN_DEPLOY_PATH/../backup/\$BACKUP_NAME' 2>/dev/null || true; \
|
||||
echo '备份完成: '\$BACKUP_NAME; \
|
||||
fi"
|
||||
|
||||
# 2. 创建新目录
|
||||
log_info "创建新目录..."
|
||||
remote_exec "mkdir -p '$ADMIN_DEPLOY_PATH'"
|
||||
|
||||
# 3. 上传zip文件
|
||||
log_info "上传zip文件..."
|
||||
TEMP_REMOTE_PATH="/tmp/fund-admin-$$.zip"
|
||||
upload_file "$LOCAL_ZIP" "$TEMP_REMOTE_PATH"
|
||||
log_info "上传完成"
|
||||
|
||||
# 4. 解压文件
|
||||
log_info "解压文件..."
|
||||
remote_exec "cd '$ADMIN_DEPLOY_PATH' && unzip -o '$TEMP_REMOTE_PATH' && rm -f '$TEMP_REMOTE_PATH'"
|
||||
log_info "解压完成"
|
||||
|
||||
# 5. 验证部署
|
||||
log_info "验证部署..."
|
||||
FILE_COUNT=$(remote_exec "find '$ADMIN_DEPLOY_PATH' -type f | wc -l")
|
||||
log_info "部署文件数: $FILE_COUNT"
|
||||
|
||||
log_info "============================================"
|
||||
log_info "管理后台部署完成!"
|
||||
log_info "============================================"
|
||||
94
scripts/deploy/deploy-all.sh
Executable file
94
scripts/deploy/deploy-all.sh
Executable file
@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# 全量部署脚本
|
||||
# 用法: ./deploy-all.sh [mobile|admin|services|all]
|
||||
# 示例: ./deploy-all.sh mobile # 只部署移动端
|
||||
# ./deploy-all.sh admin # 只部署管理后台
|
||||
# ./deploy-all.sh services # 只部署所有服务
|
||||
# ./deploy-all.sh all # 部署全部
|
||||
# ============================================
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
source "$SCRIPT_DIR/deploy-config.sh"
|
||||
|
||||
DEPLOY_TYPE="${1:-all}"
|
||||
|
||||
log_info "============================================"
|
||||
log_info "全量部署脚本"
|
||||
log_info "============================================"
|
||||
log_info "部署类型: $DEPLOY_TYPE"
|
||||
log_info ""
|
||||
|
||||
# 检查sshpass
|
||||
check_sshpass
|
||||
|
||||
# 部署移动端
|
||||
deploy_mobile() {
|
||||
log_info ">>> 开始部署移动端..."
|
||||
"$SCRIPT_DIR/deploy-mobile.sh"
|
||||
}
|
||||
|
||||
# 部署管理后台
|
||||
deploy_admin() {
|
||||
log_info ">>> 开始部署管理后台..."
|
||||
"$SCRIPT_DIR/deploy-admin.sh"
|
||||
}
|
||||
|
||||
# 部署单个服务
|
||||
deploy_service() {
|
||||
local service_name="$1"
|
||||
log_info ">>> 开始部署服务: $service_name"
|
||||
"$SCRIPT_DIR/deploy-service.sh" "$service_name"
|
||||
}
|
||||
|
||||
# 部署所有服务
|
||||
deploy_all_services() {
|
||||
for service in "${SERVICES[@]}"; do
|
||||
deploy_service "$service"
|
||||
echo ""
|
||||
done
|
||||
}
|
||||
|
||||
# 根据参数执行部署
|
||||
case "$DEPLOY_TYPE" in
|
||||
mobile)
|
||||
deploy_mobile
|
||||
;;
|
||||
admin)
|
||||
deploy_admin
|
||||
;;
|
||||
services)
|
||||
deploy_all_services
|
||||
;;
|
||||
all)
|
||||
deploy_mobile
|
||||
echo ""
|
||||
deploy_admin
|
||||
echo ""
|
||||
deploy_all_services
|
||||
;;
|
||||
*)
|
||||
# 检查是否是服务名
|
||||
FOUND=0
|
||||
for service in "${SERVICES[@]}"; do
|
||||
if [ "$service" = "$DEPLOY_TYPE" ]; then
|
||||
deploy_service "$DEPLOY_TYPE"
|
||||
FOUND=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ $FOUND -eq 0 ]; then
|
||||
log_error "未知参数: $DEPLOY_TYPE"
|
||||
echo "用法: $0 [mobile|admin|services|all|服务名]"
|
||||
echo "可用服务:"
|
||||
for svc in "${SERVICES[@]}"; do
|
||||
echo " - $svc"
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
log_info "============================================"
|
||||
log_info "部署完成!"
|
||||
log_info "============================================"
|
||||
72
scripts/deploy/deploy-config.sh
Executable file
72
scripts/deploy/deploy-config.sh
Executable file
@ -0,0 +1,72 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# 部署配置文件
|
||||
# ============================================
|
||||
|
||||
# 生产环境SSH配置
|
||||
PROD_HOST="82.156.159.46"
|
||||
PROD_USER="fundsp"
|
||||
PROD_PASSWORD="fdsp@Ywj\$107P#KM"
|
||||
|
||||
# 部署路径配置
|
||||
MOBILE_DEPLOY_PATH="/home/fundsp/portal/fmobile"
|
||||
ADMIN_DEPLOY_PATH="/home/fundsp/portal/fadmin"
|
||||
SERVICE_DEPLOY_BASE="/home/fundsp/app"
|
||||
|
||||
# 本地打包路径(相对于项目根目录)
|
||||
LOCAL_DEPLOY_DIR="../deploy"
|
||||
LOCAL_MOBILE_ZIP="fund-mobile.zip"
|
||||
LOCAL_ADMIN_ZIP="fund-admin.zip"
|
||||
|
||||
# 服务列表
|
||||
SERVICES=(
|
||||
"fund-gateway"
|
||||
"fund-sys"
|
||||
"fund-cust"
|
||||
"fund-proj"
|
||||
"fund-exp"
|
||||
"fund-receipt"
|
||||
"fund-report"
|
||||
"fund-req"
|
||||
"fund-file"
|
||||
)
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 检查sshpass是否安装
|
||||
check_sshpass() {
|
||||
if ! command -v sshpass &> /dev/null; then
|
||||
log_error "sshpass 未安装,请先安装: sudo apt install sshpass"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行远程命令
|
||||
remote_exec() {
|
||||
local cmd="$1"
|
||||
sshpass -p "$PROD_PASSWORD" ssh -o StrictHostKeyChecking=no "$PROD_USER@$PROD_HOST" "$cmd"
|
||||
}
|
||||
|
||||
# 上传文件
|
||||
upload_file() {
|
||||
local local_path="$1"
|
||||
local remote_path="$2"
|
||||
sshpass -p "$PROD_PASSWORD" scp -o StrictHostKeyChecking=no "$local_path" "$PROD_USER@$PROD_HOST:$remote_path"
|
||||
}
|
||||
69
scripts/deploy/deploy-mobile.sh
Executable file
69
scripts/deploy/deploy-mobile.sh
Executable file
@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# 移动端部署脚本
|
||||
# 用法: ./deploy-mobile.sh [本地zip文件路径]
|
||||
# ============================================
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
source "$SCRIPT_DIR/deploy-config.sh"
|
||||
|
||||
# 获取本地zip文件路径
|
||||
if [ -n "$1" ]; then
|
||||
LOCAL_ZIP="$1"
|
||||
else
|
||||
# 默认使用deploy目录下的fund-mobile.zip
|
||||
LOCAL_ZIP="$SCRIPT_DIR/$LOCAL_DEPLOY_DIR/$LOCAL_MOBILE_ZIP"
|
||||
fi
|
||||
|
||||
log_info "============================================"
|
||||
log_info "移动端部署开始"
|
||||
log_info "============================================"
|
||||
log_info "本地文件: $LOCAL_ZIP"
|
||||
log_info "远程路径: $MOBILE_DEPLOY_PATH"
|
||||
log_info ""
|
||||
|
||||
# 检查sshpass
|
||||
check_sshpass
|
||||
|
||||
# 检查本地文件是否存在
|
||||
if [ ! -f "$LOCAL_ZIP" ]; then
|
||||
log_error "本地zip文件不存在: $LOCAL_ZIP"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 显示文件大小
|
||||
FILE_SIZE=$(ls -lh "$LOCAL_ZIP" | awk '{print $5}')
|
||||
log_info "文件大小: $FILE_SIZE"
|
||||
|
||||
# 1. 备份旧版本
|
||||
log_info "备份旧版本..."
|
||||
remote_exec "if [ -d '$MOBILE_DEPLOY_PATH' ]; then \
|
||||
mkdir -p '$MOBILE_DEPLOY_PATH/../backup'; \
|
||||
BACKUP_NAME='fmobile_backup_\$(date +%Y%m%d_%H%M%S)'; \
|
||||
mv '$MOBILE_DEPLOY_PATH' '$MOBILE_DEPLOY_PATH/../backup/\$BACKUP_NAME' 2>/dev/null || true; \
|
||||
echo '备份完成: '\$BACKUP_NAME; \
|
||||
fi"
|
||||
|
||||
# 2. 创建新目录
|
||||
log_info "创建新目录..."
|
||||
remote_exec "mkdir -p '$MOBILE_DEPLOY_PATH'"
|
||||
|
||||
# 3. 上传zip文件
|
||||
log_info "上传zip文件..."
|
||||
TEMP_REMOTE_PATH="/tmp/fund-mobile-$$.zip"
|
||||
upload_file "$LOCAL_ZIP" "$TEMP_REMOTE_PATH"
|
||||
log_info "上传完成"
|
||||
|
||||
# 4. 解压文件
|
||||
log_info "解压文件..."
|
||||
remote_exec "cd '$MOBILE_DEPLOY_PATH' && unzip -o '$TEMP_REMOTE_PATH' && rm -f '$TEMP_REMOTE_PATH'"
|
||||
log_info "解压完成"
|
||||
|
||||
# 5. 验证部署
|
||||
log_info "验证部署..."
|
||||
FILE_COUNT=$(remote_exec "find '$MOBILE_DEPLOY_PATH' -type f | wc -l")
|
||||
log_info "部署文件数: $FILE_COUNT"
|
||||
|
||||
log_info "============================================"
|
||||
log_info "移动端部署完成!"
|
||||
log_info "============================================"
|
||||
130
scripts/deploy/deploy-service.sh
Executable file
130
scripts/deploy/deploy-service.sh
Executable file
@ -0,0 +1,130 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# 服务部署脚本
|
||||
# 用法: ./deploy-service.sh <服务名> [本地tar.gz文件路径]
|
||||
# 示例: ./deploy-service.sh fund-gateway
|
||||
# ./deploy-service.sh fund-gateway /path/to/fund-gateway.tar.gz
|
||||
# ============================================
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
source "$SCRIPT_DIR/deploy-config.sh"
|
||||
|
||||
# 检查参数
|
||||
if [ -z "$1" ]; then
|
||||
log_error "请指定服务名称"
|
||||
echo "可用服务:"
|
||||
for svc in "${SERVICES[@]}"; do
|
||||
echo " - $svc"
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SERVICE_NAME="$1"
|
||||
|
||||
# 获取本地tar.gz文件路径
|
||||
if [ -n "$2" ]; then
|
||||
LOCAL_TAR="$2"
|
||||
else
|
||||
# 默认使用deploy目录下的服务tar.gz文件
|
||||
LOCAL_TAR="$SCRIPT_DIR/$LOCAL_DEPLOY_DIR/${SERVICE_NAME}.tar.gz"
|
||||
fi
|
||||
|
||||
SERVICE_DEPLOY_PATH="$SERVICE_DEPLOY_BASE/$SERVICE_NAME"
|
||||
|
||||
log_info "============================================"
|
||||
log_info "服务部署开始: $SERVICE_NAME"
|
||||
log_info "============================================"
|
||||
log_info "本地文件: $LOCAL_TAR"
|
||||
log_info "远程路径: $SERVICE_DEPLOY_PATH"
|
||||
log_info ""
|
||||
|
||||
# 检查sshpass
|
||||
check_sshpass
|
||||
|
||||
# 检查本地文件是否存在
|
||||
if [ ! -f "$LOCAL_TAR" ]; then
|
||||
log_error "本地tar.gz文件不存在: $LOCAL_TAR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 显示文件大小
|
||||
FILE_SIZE=$(ls -lh "$LOCAL_TAR" | awk '{print $5}')
|
||||
log_info "文件大小: $FILE_SIZE"
|
||||
|
||||
# 1. 检查远程服务目录是否存在
|
||||
log_info "检查远程服务目录..."
|
||||
DIR_EXISTS=$(remote_exec "if [ -d '$SERVICE_DEPLOY_PATH' ]; then echo 'yes'; else echo 'no'; fi")
|
||||
if [ "$DIR_EXISTS" != "yes" ]; then
|
||||
log_error "远程服务目录不存在: $SERVICE_DEPLOY_PATH"
|
||||
log_error "请先完整部署服务"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. 备份旧版本lib目录
|
||||
log_info "备份旧版本lib目录..."
|
||||
remote_exec "cd '$SERVICE_DEPLOY_PATH' && \
|
||||
mkdir -p backup && \
|
||||
BACKUP_NAME='lib_backup_\$(date +%Y%m%d_%H%M%S)' && \
|
||||
if [ -d 'lib' ]; then \
|
||||
cp -r lib backup/\$BACKUP_NAME; \
|
||||
echo '备份完成: '\$BACKUP_NAME; \
|
||||
else \
|
||||
echo 'lib目录不存在,跳过备份'; \
|
||||
fi"
|
||||
|
||||
# 3. 上传tar.gz文件
|
||||
log_info "上传tar.gz文件..."
|
||||
TEMP_REMOTE_PATH="/tmp/${SERVICE_NAME}-$$.tar.gz"
|
||||
upload_file "$LOCAL_TAR" "$TEMP_REMOTE_PATH"
|
||||
log_info "上传完成"
|
||||
|
||||
# 4. 解压并更新lib目录
|
||||
log_info "解压并更新lib目录..."
|
||||
remote_exec "
|
||||
TEMP_DIR=\"/tmp/${SERVICE_NAME}_extract_\$\$\"
|
||||
mkdir -p \$TEMP_DIR
|
||||
cd \$TEMP_DIR
|
||||
tar -xzf '$TEMP_REMOTE_PATH'
|
||||
|
||||
# 查找解压后的目录(通常是服务名目录)
|
||||
EXTRACTED_DIR=\$(ls -d */ 2>/dev/null | head -1 | tr -d '/')
|
||||
|
||||
if [ -n \"\$EXTRACTED_DIR\" ] && [ -d \"\$EXTRACTED_DIR/lib\" ]; then
|
||||
# 停止服务(如果存在启动脚本)
|
||||
if [ -f '$SERVICE_DEPLOY_PATH/stop.sh' ]; then
|
||||
cd '$SERVICE_DEPLOY_PATH' && ./stop.sh
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
# 删除旧lib目录
|
||||
rm -rf '$SERVICE_DEPLOY_PATH/lib'
|
||||
|
||||
# 复制新lib目录
|
||||
cp -r \"\$EXTRACTED_DIR/lib\" '$SERVICE_DEPLOY_PATH/'
|
||||
|
||||
echo 'lib目录更新完成'
|
||||
|
||||
# 启动服务(如果存在启动脚本)
|
||||
if [ -f '$SERVICE_DEPLOY_PATH/start.sh' ]; then
|
||||
cd '$SERVICE_DEPLOY_PATH' && ./start.sh
|
||||
echo '服务已重启'
|
||||
fi
|
||||
else
|
||||
echo '错误: 解压后未找到lib目录'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 清理临时文件
|
||||
rm -rf \$TEMP_DIR
|
||||
rm -f '$TEMP_REMOTE_PATH'
|
||||
"
|
||||
log_info "解压完成"
|
||||
|
||||
# 5. 验证部署
|
||||
log_info "验证部署..."
|
||||
JAR_COUNT=$(remote_exec "ls '$SERVICE_DEPLOY_PATH/lib/*.jar' 2>/dev/null | wc -l")
|
||||
log_info "lib目录jar文件数: $JAR_COUNT"
|
||||
|
||||
log_info "============================================"
|
||||
log_info "服务部署完成: $SERVICE_NAME"
|
||||
log_info "============================================"
|
||||
Loading…
x
Reference in New Issue
Block a user