From f9076df6e8acee89d6294e811c97c74922a0eb56 Mon Sep 17 00:00:00 2001 From: Vaica <94612053+zqlit@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:50:26 +0800 Subject: [PATCH] 1350 --- write-server/deploy.sh | 103 ++++++++++++++++++++++++++ write-server/next.config.ts | 1 - write-server/scripts/install-hooks.sh | 41 ++++++++++ write-server/scripts/post-merge | 20 +++++ 4 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 write-server/deploy.sh create mode 100644 write-server/scripts/install-hooks.sh create mode 100644 write-server/scripts/post-merge diff --git a/write-server/deploy.sh b/write-server/deploy.sh new file mode 100644 index 00000000..24f8ed9d --- /dev/null +++ b/write-server/deploy.sh @@ -0,0 +1,103 @@ +#!/bin/bash +# Write Server Docker 一键部署脚本 +# 用法: ./deploy.sh 或 cd /hugo && bash write-server/deploy.sh + +set -e + +# 颜色定义 +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +echo "" +echo "===================================" +echo " Write Server 自动部署" +echo "===================================" +echo "" + +# 检测脚本所在目录 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +# 1. 检查是否有更新 +echo -e "${YELLOW}[1/5]${NC} 检查代码更新..." +CHANGES_BEFORE=$(git rev-parse HEAD) +git pull origin main +CHANGES_AFTER=$(git rev-parse HEAD) + +if [ "$CHANGES_BEFORE" = "$CHANGES_AFTER" ]; then + echo -e "${GREEN}✓${NC} 代码已是最新,无需重新构建" + exit 0 +fi + +echo -e "${GREEN}✓${NC} 检测到新代码,开始构建..." + +# 2. 停止旧容器 +echo "" +echo -e "${YELLOW}[2/5]${NC} 停止旧容器..." +docker compose down +echo -e "${GREEN}✓${NC} 旧容器已停止" + +# 3. 重新构建 +echo "" +echo -e "${YELLOW}[3/5]${NC} 重新构建镜像..." +docker compose build --no-cache +echo -e "${GREEN}✓${NC} 镜像构建完成" + +# 4. 启动新容器 +echo "" +echo -e "${YELLOW}[4/5]${NC} 启动新容器..." +docker compose up -d +echo -e "${GREEN}✓${NC} 容器已启动" + +# 5. 等待服务就绪 +echo "" +echo -e "${YELLOW}[5/5]${NC} 等待服务就绪..." +sleep 5 + +# 健康检查 +echo "" +echo "===================================" +echo " 检查服务状态" +echo "===================================" +echo "" + +# 检查容器状态 +if docker compose ps | grep -q "Up"; then + echo -e "${GREEN}✓${NC} 容器运行正常" +else + echo -e "${RED}✗${NC} 容器启动失败" + echo "" + echo "查看日志:" + echo " docker compose logs -f" + exit 1 +fi + +# 检查 Bot 启动日志 +echo "" +echo "检查 Bot 启动状态..." +sleep 3 +if docker compose logs --tail 20 2>&1 | grep -q "\[bot\]"; then + echo -e "${GREEN}✓${NC} Telegram Bot 已启动" +else + echo -e "${YELLOW}⚠${NC} 未检测到 Bot 启动日志(可能需要检查配置)" +fi + +# 检查 comment notifier +if docker compose logs --tail 20 2>&1 | grep -q "\[comment-notify\]"; then + echo -e "${GREEN}✓${NC} 评论通知已启动" +else + echo -e "${YELLOW}⚠${NC} 未检测到评论通知日志" +fi + +echo "" +echo "===================================" +echo -e " ${GREEN}部署完成!${NC}" +echo "===================================" +echo "" +echo "常用命令:" +echo " 查看日志: docker compose logs -f" +echo " 重启服务: docker compose restart" +echo " 停止服务: docker compose down" +echo "" diff --git a/write-server/next.config.ts b/write-server/next.config.ts index 20b6b6a0..a50daff4 100644 --- a/write-server/next.config.ts +++ b/write-server/next.config.ts @@ -11,7 +11,6 @@ const nextConfig: NextConfig = { serverActions: { bodySizeLimit: "10mb", }, - instrumentationHook: true, // 启用 instrumentation,用于自动启动 Bot }, // 压缩配置 diff --git a/write-server/scripts/install-hooks.sh b/write-server/scripts/install-hooks.sh new file mode 100644 index 00000000..0df1b782 --- /dev/null +++ b/write-server/scripts/install-hooks.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# 安装 Git Hook 脚本 +# 用法: ./scripts/install-hooks.sh + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +GIT_HOOKS_DIR="$REPO_ROOT/.git/hooks" + +echo "" +echo "===================================" +echo " 安装 Git Hooks" +echo "===================================" +echo "" + +# 确保 hooks 目录存在 +mkdir -p "$GIT_HOOKS_DIR" + +# 复制 post-merge hook +if [ -f "$SCRIPT_DIR/post-merge" ]; then + cp "$SCRIPT_DIR/post-merge" "$GIT_HOOKS_DIR/post-merge" + chmod +x "$GIT_HOOKS_DIR/post-merge" + echo "✓ 已安装 post-merge hook" +else + echo "✗ 未找到 post-merge 脚本" + exit 1 +fi + +echo "" +echo "===================================" +echo " 安装完成!" +echo "===================================" +echo "" +echo "现在在项目根目录执行 git pull 时," +echo "如果 write-server 有更新,会自动触发 Docker 构建。" +echo "" +echo "手动执行部署:" +echo " cd $REPO_ROOT/write-server" +echo " ./deploy.sh" +echo "" diff --git a/write-server/scripts/post-merge b/write-server/scripts/post-merge new file mode 100644 index 00000000..a2ac3849 --- /dev/null +++ b/write-server/scripts/post-merge @@ -0,0 +1,20 @@ +#!/bin/bash +# Git post-merge hook +# 在 git pull 成功后自动触发 Docker 重建 + +# 获取项目根目录 +REPO_ROOT="$(git rev-parse --show-toplevel)" + +# 检查是否是 write-server 目录更新 +if [ -f "$REPO_ROOT/write-server/package.json" ]; then + echo "" + echo "===================================" + echo " 检测到 write-server 更新" + echo " 自动开始 Docker 构建..." + echo "===================================" + echo "" + + # 切换到 write-server 目录并执行部署 + cd "$REPO_ROOT/write-server" + ./deploy.sh +fi