#!/bin/bash # ============================================ # Tailchat Sales 服务器部署脚本 # ============================================ set -e # ==================== 1. 核心路径配置 ==================== PROJECT_DIR="/www/wwwroot/tailchat-sales" # 源码目录 FLUTTER_WEB_DIR="/www/wwwroot/tailchat-h5" # Flutter Web 目录 TAILCHAT_WEB_DIR="/www/wwwroot/tailchat-web" # Tailchat Web 目录 BUILD_LOG="/tmp/tailchat_build_$(date +%Y%m%d).log" # ==================== 2. 工具函数 ==================== log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $BUILD_LOG } # ==================== 3. 构建并同步前端 ==================== sync_frontend() { log "📂 [前端] 开始构建..." # Flutter Web - 从 Git 拉取的 build/web 复制(服务器无 Flutter 环境) # 本地需先构建:flutter build web --release --dart-define=ENV=prod # 然后 git add client/flutter/build/web/ && git commit && git push log "3.1 同步 Flutter Web..." FLUTTER_BUILD_DIR="$PROJECT_DIR/client/flutter/build/web" if [ -d "$FLUTTER_BUILD_DIR" ]; then mkdir -p $FLUTTER_WEB_DIR rm -rf $FLUTTER_WEB_DIR/* cp -r $FLUTTER_BUILD_DIR/* $FLUTTER_WEB_DIR/ log "✅ Flutter Web 同步完成" else log "⚠️ Flutter Web 构建目录不存在,跳过" fi # Tailchat Web 构建 log "3.2 构建 Tailchat Web..." cd $PROJECT_DIR/client/web pnpm install >> $BUILD_LOG 2>&1 pnpm run build >> $BUILD_LOG 2>&1 if [ $? -eq 0 ]; then log "✅ Tailchat Web 构建完成" else log "❌ Tailchat Web 构建失败" exit 1 fi # 同步 Tailchat Web WEB_BUILD_DIR="$PROJECT_DIR/client/web/dist" mkdir -p $TAILCHAT_WEB_DIR rm -rf $TAILCHAT_WEB_DIR/* cp -r $WEB_BUILD_DIR/* $TAILCHAT_WEB_DIR/ log "✅ Tailchat Web 同步完成" } # ==================== 4. 后端部署 ==================== deploy_backend() { log "🚀 [后端] 开始部署..." cd $PROJECT_DIR log "4.1 同步代码..." git fetch origin git reset --hard origin/main log "4.2 重启 Tailchat 服务..." cd $PROJECT_DIR docker-compose down docker-compose up -d --build log "4.3 等待服务启动..." sleep 10 # 检查服务状态 if docker-compose ps | grep -q "Up"; then log "✅ Tailchat 服务启动成功" else log "❌ Tailchat 服务启动失败" docker-compose logs >> $BUILD_LOG exit 1 fi } # ==================== 5. 执行主流程 ==================== case "$1" in frontend) sync_frontend ;; backend) deploy_backend ;; *) sync_frontend deploy_backend ;; esac log "🏁 [$(date '+%H:%M:%S')] 部署完成!"