# 自动部署配置指南

## 架构说明

```
Git Push → Gogs Webhook → 服务器 Webhook 接收器 → 自动部署脚本 → PM2 重启
```

## 服务器端配置

### 1. 上传 webhook 脚本到服务器

```bash
# 上传到服务器
scp -P 22622 server/webhook-deploy.py root@8.159.134.106:/data/ai/

# 或者直接编辑服务器上的文件
ssh -p 22622 root@8.159.134.106
```

### 2. 设置 webhook 服务自启动

创建 systemd 服务文件 `/etc/systemd/system/webhook.service`:

```ini
[Unit]
Description=Webhook Deploy Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/data/ai
Environment=WEBHOOK_SECRET=your-secret-key
Environment=WEBHOOK_PORT=8080
ExecStart=/usr/bin/python3 /data/ai/webhook-deploy.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
```

启用服务:
```bash
systemctl enable webhook
systemctl start webhook
systemctl status webhook
```

### 3. 配置 Nginx 转发

在 Nginx 配置中添加:

```nginx
location /webhook {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
}
```

重载 Nginx:
```bash
nginx -t && nginx -s reload
```

## Gogs Webhook 配置

1. 登录 Gogs 进入仓库
2. 设置 → Webhook → 添加 Webhook
3. 选择 "Gogs"
4. 填写:
   - **URL**: `https://book.rrbrr.com/webhook?secret=your-secret-key`
   - **Secret**: `your-secret-key` (与脚本中设置的一致)
   - **触发条件**: 选择 "Push" 事件
5. 点击"测试"验证连接

## 安全建议

1. **使用 HTTPS**: 确保域名已配置 SSL 证书
2. **设置强 Secret**: 不要使用默认的 `your-secret-key-change-me`
3. **限制 IP**: 可以在 Nginx 中限制只有 Gogs 服务器 IP 可以访问 `/webhook`
4. **日志监控**: 定期检查 `/tmp/webhook-deploy.log`

## 手动触发部署

```bash
# SSH 到服务器
ssh -p 22622 root@8.159.134.106

# 手动执行部署
cd /data/ai
bash deploy-auto.sh
```

## 故障排查

```bash
# 查看 webhook 服务状态
systemctl status webhook

# 查看 webhook 日志
tail -f /tmp/webhook-deploy.log

# 查看 PM2 日志
pm2 logs server

# 测试 webhook 端点
curl -X POST https://book.rrbrr.com/webhook -d "test=1"
```

## 简化版（无需 Python）

如果服务器没有 Python，也可以用纯 bash + Nginx + Git Hook:

### 创建 Git Post-Receive Hook

在服务器的 Git 仓库中创建 `hooks/post-receive`:

```bash
#!/bin/bash
while read oldrev newrev refname; do
    branch=$(echo $refname | cut -d/ -f3)
    if [ "$branch" = "master" ]; then
        echo "Detected push to master, deploying..."
        cd /data/ai/audio_codebuddy
        git pull origin master
        cd /data/ai/audio_codebuddy/server
        npm run build
        pm2 restart server
        echo "Deploy completed at $(date)" >> /tmp/deploy.log
    fi
done
```

```bash
chmod +x /data/ai/audio_codebuddy/.git/hooks/post-receive
```

注意: 这种方式需要 Gogs 使用服务器的本地 Git 仓库路径，而不是 HTTP/HTTPS 克隆 URL。
