|
|
@@ -1,141 +1,65 @@
|
|
|
-# 自动部署配置指南
|
|
|
+# 部署指南
|
|
|
|
|
|
-## 架构说明
|
|
|
+> 2026-06-14 更新:已废弃 Webhook 自动部署方案,改为**手动 SSH 部署**。
|
|
|
|
|
|
-```
|
|
|
-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
|
|
|
+- 主机: `8.159.134.106` (SSH 别名: `aliyunos4`)
|
|
|
+- SSH 端口: `22622`
|
|
|
+- 用户: `root`
|
|
|
+- 部署目录: `/data/ai/audio_codebuddy`
|
|
|
+- 前端产物目录: `/data/ai/audio/frontend/build/h5`
|
|
|
+- 后端端口: `3100` (PM2 进程名 `server`)
|
|
|
|
|
|
-[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
|
|
|
+# 1. SSH 到服务器
|
|
|
+ssh aliyunos4
|
|
|
+
|
|
|
+# 2. 进入项目目录
|
|
|
+cd /data/ai/audio_codebuddy
|
|
|
+
|
|
|
+# 3. 拉取最新代码 (git pull,或本地 scp 上传后 git checkout)
|
|
|
+# 方式 A: git pull (gogs 正常时)
|
|
|
+git pull origin master
|
|
|
+
|
|
|
+# 方式 B: 本地 scp 推送 (gogs 500 故障时)
|
|
|
+# 在本地执行:
|
|
|
+# scp -P 22622 -r <本地路径> aliyunos4:/data/ai/audio_codebuddy/<目标路径>
|
|
|
+
|
|
|
+# 4. 构建后端
|
|
|
+cd server
|
|
|
+npx prisma generate # 如果改动了 prisma/schema.prisma
|
|
|
+npm install # 如果改动了 package.json
|
|
|
+npm run build
|
|
|
+
|
|
|
+# 5. 构建前端
|
|
|
+cd ../my-uniapp-vue3
|
|
|
+npm install
|
|
|
+npm run build:h5
|
|
|
+rm -rf /data/ai/audio/frontend/build/h5
|
|
|
+cp -r dist/build/h5 /data/ai/audio/frontend/build/h5
|
|
|
+
|
|
|
+# 6. 重启后端
|
|
|
+pm2 delete server 2>/dev/null || true
|
|
|
+SERVER_PORT=3100 pm2 start dist/app.js --name server
|
|
|
+pm2 save
|
|
|
```
|
|
|
|
|
|
## 故障排查
|
|
|
|
|
|
```bash
|
|
|
-# 查看 webhook 服务状态
|
|
|
-systemctl status webhook
|
|
|
+# 查看后端 PM2 状态
|
|
|
+pm2 list
|
|
|
+pm2 logs server --lines 100
|
|
|
|
|
|
-# 查看 webhook 日志
|
|
|
-tail -f /tmp/webhook-deploy.log
|
|
|
+# 查看健康检查
|
|
|
+curl -s http://localhost:3100/health
|
|
|
|
|
|
-# 查看 PM2 日志
|
|
|
-pm2 logs server
|
|
|
+# 查看 nginx 配置
|
|
|
+cat /etc/nginx/conf.d/*.conf
|
|
|
|
|
|
-# 测试 webhook 端点
|
|
|
-curl -X POST https://book.rrbrr.com/webhook -d "test=1"
|
|
|
+# 清理服务器磁盘(临时文件)
|
|
|
+ssh aliyunos4 'du -sh /data/ai/audio_codebuddy/server/temp/* 2>/dev/null'
|
|
|
```
|
|
|
-
|
|
|
-## 简化版(无需 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。
|