diff --git a/scripts/deploy/deploy-admin.sh b/scripts/deploy/deploy-admin.sh new file mode 100755 index 0000000..5b667e0 --- /dev/null +++ b/scripts/deploy/deploy-admin.sh @@ -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 "============================================" diff --git a/scripts/deploy/deploy-all.sh b/scripts/deploy/deploy-all.sh new file mode 100755 index 0000000..808fa1f --- /dev/null +++ b/scripts/deploy/deploy-all.sh @@ -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 "============================================" diff --git a/scripts/deploy/deploy-config.sh b/scripts/deploy/deploy-config.sh new file mode 100755 index 0000000..f1812bf --- /dev/null +++ b/scripts/deploy/deploy-config.sh @@ -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" +} diff --git a/scripts/deploy/deploy-mobile.sh b/scripts/deploy/deploy-mobile.sh new file mode 100755 index 0000000..3d95ad6 --- /dev/null +++ b/scripts/deploy/deploy-mobile.sh @@ -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 "============================================" diff --git a/scripts/deploy/deploy-service.sh b/scripts/deploy/deploy-service.sh new file mode 100755 index 0000000..a63c618 --- /dev/null +++ b/scripts/deploy/deploy-service.sh @@ -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 "============================================"