#!/bin/bash # 检查参数 if [ $# -ne 1 ]; then echo "使用方法: ./update.sh [dev|prod]" exit 1 fi MODE=$1 # 检查参数是否有效 if [ "$MODE" != "dev" ] && [ "$MODE" != "prod" ]; then echo "无效的参数。请使用 dev 或 prod" exit 1 fi # 构建 VuePress 项目 echo "开始构建 VuePress 项目..." cd doc pnpm docs:build cd .. # 确保 gateway/static 目录存在 mkdir -p gateway/static # 清理 gateway/static 目录 rm -rf gateway/static/* # 复制 VuePress 构建文件到 gateway/static echo "复制 VuePress 构建文件到 gateway/static..." cp -r doc/src/.vuepress/dist/* gateway/static/ if [ "$MODE" = "prod" ]; then echo "生产环境模式 - 开始编译 Go 项目..." # 进入 gateway 目录 cd gateway # 编译 Go 项目 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go # 创建临时部署目录 DEPLOY_DIR="deploy_tmp" mkdir -p $DEPLOY_DIR # 复制必要文件到部署目录 cp main $DEPLOY_DIR/ cp -r templates $DEPLOY_DIR/ cp -r static $DEPLOY_DIR/ # 创建 config 目录并复制必要的配置文件 mkdir -p $DEPLOY_DIR/config # 复制生产环境的配置文件并重命名 cp .env_prod $DEPLOY_DIR/.env 2>/dev/null || echo "警告: .env_prod 文件不存在" # 使用 zip 打包,包含隐藏文件但排除 .DS_Store cd $DEPLOY_DIR && find . -name ".DS_Store" -delete && zip -q -r ../gateway_deploy.zip . -x "*.DS_Store" && cd .. # 上传到生产服务器 echo "上传文件到生产服务器..." scp gateway_deploy.zip root@106.55.227.223:/opt/1panel/deploy/yroot/gateway/ # 远程执行部署命令 echo "在生产服务器上执行部署..." ssh root@106.55.227.223 "cd /opt/1panel/deploy/yroot/gateway && \ rm -rf main templates static .env config && \ unzip -q gateway_deploy.zip && \ rm gateway_deploy.zip && \ docker restart a44a1de83e26bfd6ce845fbb88d0945362134e94b550933be22bfc080543b727" # 清理临时文件 rm -rf $DEPLOY_DIR rm gateway_deploy.zip echo "生产环境部署完成!" else echo "开发环境部署完成!" fi