铸渊 ICE-GL-ZY001 a3ea92bf8a 更新 Forgejo 访问令牌 · git-sync 认证修复
- 旧 token (3e16b79c) 已失效,Forgejo 返回 'password is invalid'
- 通过 forgejo admin CLI 生成新 token (e0fed575)
- 更新 deploy.sh 中的 TOKEN 引用
- git-sync PM2 进程已用新 token 重启并验证通过
2026-05-24 09:08:17 +00:00

162 lines
5.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ════════════════════════════════════════════════════════════════
# 光湖 · Git Sync 服务一键部署脚本
# 在新服务器 ZY-CVM-MAIN 上执行
# ════════════════════════════════════════════════════════════════
#
# 功能:
# 1. 部署 Git Sync 服务到 /data/guanghulab/server/git-sync/
# 2. 用 PM2 启动并设置开机自启
# 3. 配置 Nginx 反向代理
# 4. 在 Gitea 配置 Webhook
#
# 前提Forgejo 已运行PM2 已安装Nginx 已配置
# ════════════════════════════════════════════════════════════════
set -e
REPO_DIR="/data/guanghulab/repo"
SYNC_DIR="$REPO_DIR/server/git-sync"
TOKEN="e0fed57503db0d26046b7e30c51c80458da364b4"
GITEA_URL="http://127.0.0.1:3001"
echo "═══════════════════════════════════════"
echo "光湖 · Git Sync 部署"
echo "═══════════════════════════════════════"
# ─── 1. 同步代码到服务器 ───
echo ""
echo "▸ 步骤 1/5: 同步最新代码..."
cd "$REPO_DIR"
git fetch origin
git reset --hard origin/main
echo "✅ 代码已同步: $(git log --oneline -1)"
# ─── 2. 确保依赖已安装 ───
echo ""
echo "▸ 步骤 2/5: 安装依赖..."
if [ ! -d "$SYNC_DIR/node_modules" ]; then
cd "$SYNC_DIR"
npm install --production 2>/dev/null || true
echo "✅ 依赖已安装"
else
echo "✅ 依赖已存在,跳过"
fi
# ─── 3. 用 PM2 启动 Git Sync ───
echo ""
echo "▸ 步骤 3/5: 启动 Git Sync 服务..."
# 停止旧的(如果有)
pm2 delete guanghulab-git-sync 2>/dev/null || true
# 启动
cd "$SYNC_DIR"
ZY_REPO_TOKEN="$TOKEN" \
pm2 start server.js \
--name guanghulab-git-sync \
--env production
pm2 save
echo "✅ Git Sync 已启动 (端口 8082)"
# ─── 4. 配置 Nginx ───
echo ""
echo "▸ 步骤 4/5: 配置 Nginx 反向代理..."
NGINX_CONF="/etc/nginx/sites-enabled/guanghulab"
if grep -q "/sync/" "$NGINX_CONF" 2>/dev/null; then
echo "✅ Nginx 已有 /sync/ 路由,跳过"
else
# 在 /wake/ location 后面添加 /sync/ location
sed -i '/location \/wake\//,/}/a\
\
# ─── Git Sync 同步服务 (/sync/) ───\
location /sync/ {\
proxy_pass http://127.0.0.1:8082/;\
proxy_set_header Host $host;\
proxy_set_header X-Real-IP $remote_addr;\
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
proxy_set_header X-Forwarded-Proto $scheme;\
}' "$NGINX_CONF"
nginx -t && systemctl reload nginx
echo "✅ Nginx 已添加 /sync/ 路由"
fi
# ─── 5. 配置 Gitea Webhook ───
echo ""
echo "▸ 步骤 5/5: 配置 Gitea Webhook..."
# 生成 Webhook Secret
WEBHOOK_SECRET=$(openssl rand -hex 16)
echo " Webhook Secret: $WEBHOOK_SECRET"
# 检查是否已存在 Webhook
EXISTING=$(curl -s -H "Authorization: token $TOKEN" \
"$GITEA_URL/api/v1/repos/bingshuo/guanghulab/hooks" | \
python3 -c "
import sys, json
hooks = json.load(sys.stdin)
for h in hooks:
if h.get('config', {}).get('url', '').endswith('/sync/webhook'):
print(h['id'])
break
" 2>/dev/null || echo "")
if [ -n "$EXISTING" ]; then
# 更新现有 Webhook
curl -s -X PATCH -H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
"$GITEA_URL/api/v1/repos/bingshuo/guanghulab/hooks/$EXISTING" \
-d "{
\"config\": {
\"url\": \"http://127.0.0.1:8082/webhook\",
\"content_type\": \"json\",
\"secret\": \"$WEBHOOK_SECRET\"
},
\"events\": [\"push\"],
\"active\": true
}" > /dev/null
echo "✅ Webhook 已更新 (ID: $EXISTING)"
else
# 创建新 Webhook
curl -s -X POST -H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
"$GITEA_URL/api/v1/repos/bingshuo/guanghulab/hooks" \
-d "{
\"type\": \"gitea\",
\"config\": {
\"url\": \"http://127.0.0.1:8082/webhook\",
\"content_type\": \"json\",
\"secret\": \"$WEBHOOK_SECRET\"
},
\"events\": [\"push\"],
\"active\": true
}" > /dev/null
echo "✅ Webhook 已创建"
fi
# 将 Secret 写入 Git Sync 环境变量
pm2 set guanghulab-git-sync:GIT_SYNC_SECRET "$WEBHOOK_SECRET" 2>/dev/null || true
# 重启 Git Sync 让环境变量生效
pm2 restart guanghulab-git-sync --update-env \
--env ZY_REPO_TOKEN="$TOKEN" \
--env GIT_SYNC_SECRET="$WEBHOOK_SECRET"
echo ""
echo "═══════════════════════════════════════"
echo "✅ Git Sync 部署完成!"
echo ""
echo "工作方式:"
echo " · 你在 Gitea 合并 PR → 自动触发 Webhook"
echo " · Git Sync 收到通知 → 自动 git pull 到服务器"
echo " · 代码立即可用,无需手动操作"
echo ""
echo "测试命令:"
echo " curl http://127.0.0.1:8082/health"
echo " curl http://127.0.0.1:8082/status"
echo "═══════════════════════════════════════"