Family-Tree/update.sh

81 lines
2.1 KiB
Bash
Executable File

#!/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 yroot"
# 清理临时文件
rm -rf $DEPLOY_DIR
rm gateway_deploy.zip
echo "生产环境部署完成!"
else
echo "开发环境部署完成!"
fi