#!/bin/bash # Document AI Frontend 部署脚本 # 功能:构建项目并部署到 ecs 服务器 set -e # 遇到错误立即退出 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 服务器配置 ECS_HOST="ecs" DEPLOY_PATH="/texpixel" # 打印带颜色的消息 print_info() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查命令是否存在 check_command() { if ! command -v $1 &> /dev/null; then print_error "$1 命令未找到,请先安装" exit 1 fi } # 部署到服务器 deploy_to_server() { local server=$1 print_info "开始部署到 ${server}..." # 上传构建产物 print_info "上传 dist 目录到 ${server}..." if scp -r dist ${server}:~ > /dev/null 2>&1; then print_success "文件上传成功" else print_error "文件上传失败" return 1 fi # SSH 执行部署操作 print_info "在 ${server} 上执行部署操作..." ssh ${server} << EOF set -e cd ${DEPLOY_PATH} # 备份旧版本 if [ -d "dist" ]; then echo "备份旧版本..." rm -rf dist_bak/ mv dist dist_bak fi # 移动新版本 if [ -d ~/dist ]; then mv ~/dist . echo "部署完成!" else echo "错误:找不到 ~/dist 目录" exit 1 fi # 重新加载 nginx(如果配置了) if command -v nginx &> /dev/null; then echo "重新加载 nginx..." nginx -t && nginx -s reload || echo "警告:nginx 重新加载失败,请手动检查" fi EOF if [ $? -eq 0 ]; then print_success "${server} 部署成功!" else print_error "${server} 部署失败!" return 1 fi } # 主函数 main() { print_info "==========================================" print_info "Document AI Frontend 部署脚本" print_info "==========================================" echo "" # 检查必要的命令 print_info "检查环境..." check_command "npm" check_command "scp" check_command "ssh" # 步骤1: 构建项目 print_info "步骤 1/2: 构建项目..." if npm run build; then print_success "构建完成!" else print_error "构建失败!" exit 1 fi echo "" # 检查 dist 目录是否存在 if [ ! -d "dist" ]; then print_error "dist 目录不存在,构建可能失败" exit 1 fi # 步骤2: 部署到 ecs print_info "步骤 2/2: 部署到 ecs..." if deploy_to_server ${ECS_HOST}; then print_success "ecs 部署完成" else print_error "ecs 部署失败" exit 1 fi echo "" # 完成 print_info "清理临时文件..." # 可以选择是否删除本地的 dist 目录 # rm -rf dist print_success "==========================================" print_success "部署完成!" print_success "==========================================" } # 运行主函数 main