#!/bin/bash # 遇到错误立即退出 set -e echo "========================================================" echo " ShuDao SafeAI 生产环境一键部署脚本 (Linux)" echo "========================================================" echo "" # 设置路径变量 ROOT_DIR=$(pwd) FRONTEND_DIR="$ROOT_DIR/shudao-vue-frontend" BACKEND_DIR="$ROOT_DIR/shudao-go-backend" DEPLOY_DIR="/opt/www/shudao-go-backend" SERVICE_NAME="shudao-go-backend" SERVICE_PORT=22001 # 1. 前端构建 echo "[1/8] 正在构建前端项目 (Vue)..." cd "$FRONTEND_DIR" npm run build if [ $? -ne 0 ]; then echo "[ERROR] 前端构建失败!请检查错误信息。" exit 1 fi echo "[SUCCESS] 前端构建完成。" echo "" # 2. 清理后端旧资源 echo "[2/8] 清理后端旧资源..." cd "$ROOT_DIR" rm -rf "$BACKEND_DIR/assets" 2>/dev/null || true rm -f "$BACKEND_DIR/views/index.html" 2>/dev/null || true echo "[SUCCESS] 清理完成。" echo "" # 3. 复制新资源 echo "[3/8] 整合前端资源到后端..." mkdir -p "$BACKEND_DIR/assets" mkdir -p "$BACKEND_DIR/views" cp -r "$FRONTEND_DIR/dist/assets/"* "$BACKEND_DIR/assets/" cp "$FRONTEND_DIR/dist/index.html" "$BACKEND_DIR/views/index.html" echo "[SUCCESS] 资源整合完成。" echo "" # 4. 复制生产环境配置 echo "[4/8] 复制生产环境配置..." mkdir -p "$BACKEND_DIR/conf" cp "$BACKEND_DIR/conf/app.conf.prod" "$BACKEND_DIR/conf/app.conf" echo "[SUCCESS] 配置文件已更新为生产环境。" echo "" # 5. 后端编译 (Linux amd64) echo "[5/8] 正在编译后端 (Target: Linux/amd64)..." cd "$BACKEND_DIR" GOOS=linux GOARCH=amd64 go build -o $SERVICE_NAME main.go if [ $? -ne 0 ]; then echo "[ERROR] 后端编译失败!" exit 1 fi chmod +x $SERVICE_NAME echo "[SUCCESS] 后端编译完成。" echo "" # 6. 停止旧服务 echo "[6/8] 停止旧服务..." pkill -f $SERVICE_NAME 2>/dev/null || true sleep 1 # 确认服务已停止 if pgrep -f $SERVICE_NAME > /dev/null 2>&1; then echo "[WARNING] 服务未完全停止,强制终止..." pkill -9 -f $SERVICE_NAME 2>/dev/null || true sleep 1 fi echo "[SUCCESS] 旧服务已停止。" echo "" # 7. 部署到目标目录 echo "[7/8] 部署到 $DEPLOY_DIR..." mkdir -p "$DEPLOY_DIR" cp "$BACKEND_DIR/$SERVICE_NAME" "$DEPLOY_DIR/" cp -r "$BACKEND_DIR/conf" "$DEPLOY_DIR/" cp -r "$BACKEND_DIR/assets" "$DEPLOY_DIR/" cp -r "$BACKEND_DIR/views" "$DEPLOY_DIR/" cp -r "$BACKEND_DIR/static" "$DEPLOY_DIR/" 2>/dev/null || true echo "[SUCCESS] 部署完成。" echo "" # 8. 启动新服务 echo "[8/8] 启动新服务..." cd "$DEPLOY_DIR" nohup ./$SERVICE_NAME > nohup.out 2>&1 & sleep 3 # 检查服务状态 if pgrep -f $SERVICE_NAME > /dev/null 2>&1; then echo "[SUCCESS] 服务已启动!" echo "" echo "========================================================" echo " 生产环境部署完成!" echo "========================================================" echo "" echo "服务状态: 运行中" echo "服务端口: $SERVICE_PORT" echo "部署目录: $DEPLOY_DIR" echo "日志文件: $DEPLOY_DIR/nohup.out" echo "" echo "查看日志: tail -f $DEPLOY_DIR/nohup.out" echo "" else echo "[ERROR] 服务启动失败!" echo "请检查日志:" tail -20 "$DEPLOY_DIR/nohup.out" exit 1 fi