#!/bin/bash # ========================================== # 项目部署脚本 # 功能: # 1. 构建React项目 # 2. 清理无用文件 # 3. 部署到远程服务器 # ========================================== # 设置变量 SERVER_IP="121.40.192.128" SERVER_PATH="/root/build" BUILD_DIR="build" SERVER_PASSWORD="123quant-speed" # 颜色输出定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 打印带颜色的信息 print_info() { echo -e "${GREEN}[INFO]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查命令执行结果 check_result() { if [ $? -ne 0 ]; then print_error "$1" exit 1 fi } # 检查sshpass是否安装 check_sshpass() { if ! command -v sshpass &> /dev/null; then print_error "sshpass 未安装,请先安装 sshpass" print_info "Mac 用户可以使用以下命令安装: brew install hudochenkov/sshpass/sshpass" print_info "或者使用: brew install esolitos/ipa/sshpass" exit 1 fi } # 构建项目 print_info "开始构建项目..." npm run build check_result "项目构建失败" print_info "项目构建完成" # 检查构建目录是否存在 if [ ! -d "$BUILD_DIR" ]; then print_error "构建目录 $BUILD_DIR 不存在" exit 1 fi # 删除无用文件(可选) print_info "清理无用文件..." # 删除.map文件(通常用于调试,生产环境不需要) find $BUILD_DIR -name "*.map" -type f -delete # 删除.DS_Store文件(Mac系统自动生成的文件) find $BUILD_DIR -name ".DS_Store" -type f -delete # 删除Thumbs.db文件(Windows系统自动生成的文件) find $BUILD_DIR -name "Thumbs.db" -type f -delete # 添加其他需要删除的无用文件... print_info "无用文件清理完成" # 部署到服务器 print_info "开始部署到服务器 $SERVER_IP:$SERVER_PATH ..." # 使用rsync同步文件到服务器,-avz表示归档、详细输出、压缩传输 # --delete表示删除目标目录中源目录没有的文件,实现完全同步 # 使用sshpass提供密码认证 rsync -avz --delete -e "sshpass -p '$SERVER_PASSWORD' ssh -o StrictHostKeyChecking=no" $BUILD_DIR/ root@$SERVER_IP:$SERVER_PATH/ check_result "部署失败" print_info "部署完成!" print_info "项目已成功部署到 $SERVER_IP:$SERVER_PATH"