feat: 添加生产环境部署脚本

- deploy-config.sh: 部署配置文件(服务器信息、路径配置)
- deploy-mobile.sh: 移动端部署脚本
- deploy-admin.sh: 管理后台部署脚本
- deploy-service.sh: 服务部署脚本(只更新lib目录)
- deploy-all.sh: 全量部署脚本
This commit is contained in:
zhangjf 2026-02-23 15:03:14 +08:00
parent 06dfa26514
commit 1e346c3a2e
5 changed files with 434 additions and 0 deletions

69
scripts/deploy/deploy-admin.sh Executable file
View 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
View 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
View 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
View 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
View 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 "============================================"