📚 Webhook Proxy 文档

完整的使用指南和 API 文档

快速开始用户认证安全特性Proxy 管理CLI 工具Webhook 使用QQ Bot 集成Telegram 集成API 参考CI/CD 部署部署指南

🚀 快速开始

1. 登录系统

访问首页,使用 GitHub 或 GitLab 账号登录:

http://localhost:8787

点击登录按钮后,系统会引导你完成 OAuth 授权流程。

2. 创建 Proxy

登录成功后,在 Dashboard 页面点击"创建 Proxy"按钮:

  • 名称:为你的 Proxy 起一个便于识别的名字
  • 平台:选择 GitHub 或 GitLab
  • Webhook Secret:可选,用于签名验证
  • 启用签名验证:建议生产环境启用

3. 配置 Webhook

创建成功后,复制生成的 Webhook URL,在 GitHub/GitLab 中配置:

GitHub 配置:
Settings → Webhooks → Add webhook
Payload URL: 粘贴 Webhook URL
Content type: application/json
GitLab 配置:
Settings → Webhooks
URL: 粘贴 Webhook URL
选择触发事件

4. 接收事件

使用 WebSocket 或 SSE 连接到对应的 URL,开始接收实时事件:

// WebSocket 方式
const ws = new WebSocket('wss://your-worker.workers.dev/github/xxx/ws');
ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('收到事件:', data);
};

// SSE 方式
const es = new EventSource('https://your-worker.workers.dev/github/xxx/sse');
es.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('收到事件:', data);
};

🔐 用户认证

多种登录方式

系统支持以下登录方式:

  • 用户名/邮箱 + 密码 - 传统登录方式
  • GitHub OAuth - GitHub 账号登录
  • GitLab OAuth - GitLab 账号登录
  • Passkey (WebAuthn) - 无密码登录(生物识别或硬件密钥)

用户注册

新用户可以通过用户名/邮箱/密码注册:

POST /api/account/register
Content-Type: application/json

{
  "username": "your-username",
  "email": "your-email@example.com",
  "password": "your-secure-password"
}

账号绑定

登录后,可以在设置页面绑定多种登录方式:

  • 密码注册的用户可以绑定 GitHub/GitLab OAuth
  • OAuth 登录的用户可以设置密码
  • 所有用户都可以注册 Passkey

Session 管理

登录后,系统会设置一个 Session Cookie:

Set-Cookie: session=<token>; Path=/; SameSite=Lax; Max-Age=2592000

Session 有效期为 30 天,过期后需要重新登录。

退出登录

访问 /auth/logout 清除 Session。

🔒 安全特性

MFA (Multi-Factor Authentication)

双因素认证提供额外的安全保护:

  • 基于 TOTP (Time-based One-Time Password) 协议
  • 支持所有主流认证器应用(Google Authenticator、Authy 等)
  • 启用后,查看 Proxy 的 Secret 需要验证
📱 设置步骤:
1. 访问 Settings 页面
2. 点击"设置 MFA"
3. 扫描二维码或手动输入密钥
4. 输入验证码完成设置

Passkey (WebAuthn)

无密码登录,更安全更便捷:

  • 使用生物识别(指纹、Face ID)或硬件密钥
  • 基于 W3C WebAuthn 标准
  • 抵御钓鱼攻击和密码泄露
  • 可以注册多个 Passkey
🔑 设置步骤:
1. 访问 Settings 页面
2. 点击"注册 Passkey"
3. 按照浏览器提示完成验证
4. 给 Passkey 起个名字(如 "MacBook Pro")

邮箱验证

验证邮箱地址以增强账号安全:

  • 注册时提供邮箱地址
  • 系统发送 6 位验证码到邮箱
  • 验证码有效期 10 分钟
  • OAuth 登录的邮箱自动标记为已验证

Webhook 签名验证

创建 Proxy 时可以启用签名验证:

  • GitHub:HMAC-SHA256 签名验证
  • GitLab:Token 验证
  • 防止未授权的请求
  • 确保数据完整性

Access Token

每个 Proxy 都有唯一的 Access Token:

  • 用于 WebSocket/SSE 连接认证
  • 启用 MFA/Passkey 后,Token 会被掩码保护
  • 需要验证后才能查看完整 Token

⚙️ Proxy 管理

创建 Proxy

POST /api/proxies
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "My Project",
  "platform": "github",
  "webhook_secret": "optional-secret",
  "verify_signature": true
}

列出所有 Proxies

GET /api/proxies
Authorization: Bearer <token>

更新 Proxy

PUT /api/proxies/:id
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "Updated Name",
  "active": false
}

删除 Proxy

DELETE /api/proxies/:id
Authorization: Bearer <token>
⚠️ 注意:删除 Proxy 后,所有关联的 Webhook URL 将失效,且操作不可恢复。

💻 CLI 命令行工具

除了 Web Dashboard,我们还提供了强大的命令行工具,让你在终端中快速管理 Proxies!

🌟 为什么选择 CLI?
- 🌐 开箱即用:默认连接到官方服务 https://hooks.zhin.dev
- 🚀 更快捷:无需打开浏览器,命令行操作更高效
- 🔐 多种登录:支持 GitHub、GitLab、密码、Passkey
- 🛡️ 完整信息:显示完整的 access_token 和 webhook_secret
- 🎨 友好界面:彩色输出和交互式命令
- ⚙️ 可自建:支持连接到自己部署的服务

安装

# 使用 npm 全局安装
npm install -g webhook-proxy-cli

# 或使用 yarn
yarn global add webhook-proxy-cli

# 验证安装
webhook-proxy --version

快速开始

1. 直接登录(官方服务用户)

# 运行登录命令
webhook-proxy login

# 选择登录方式:
# ❯ 🔐 GitHub OAuth(推荐)
#   🦊 GitLab OAuth
#   👤 用户名/邮箱 + 密码
#   🔑 Passkey / 指纹 / Face ID
#   📋 手动输入 Token

# CLI 会自动打开浏览器完成 OAuth 授权
# 或根据提示输入用户名密码
# 登录成功后自动保存 session token
💡 官方服务用户无需配置!
CLI 默认连接到 https://hooks.zhin.dev,直接登录即可使用。

2. 自建服务用户(可选)

如果你自建了 webhook-proxy 服务,需要先配置 API 地址:

# 设置自建服务地址
webhook-proxy config set-api https://your-api-domain.com

# 然后再登录
webhook-proxy login

常用命令

列出所有 Proxies:

# 完整命令
webhook-proxy proxy list

# 快捷命令
webhook-proxy list
webhook-proxy ls

创建新的 Proxy:

# 交互式创建
webhook-proxy proxy create

# 按提示输入:
# - Name: My GitHub Webhook
# - Platform: github / gitlab / qqbot / telegram
# - Webhook Secret: 可选
# - Verify Signature: Yes/No

查看 Proxy 详情:

# 使用 Proxy ID
webhook-proxy proxy get <proxy-id>

# 快捷命令
webhook-proxy get <proxy-id>

更新 Proxy:

# 交互式更新
webhook-proxy proxy update <proxy-id>

# 快捷命令
webhook-proxy update <proxy-id>

删除 Proxy:

# 删除(需确认)
webhook-proxy proxy delete <proxy-id>

# 快捷命令
webhook-proxy delete <proxy-id>
webhook-proxy del <proxy-id>
webhook-proxy rm <proxy-id>

配置管理:

# 查看当前配置
webhook-proxy config show

# 设置 API 地址(自建服务)
webhook-proxy config set-api https://your-api-domain.com

# 交互式配置
webhook-proxy config interactive
webhook-proxy config i

退出登录:

webhook-proxy logout

完整工作流示例

# 1. 登录
webhook-proxy login
# 选择 "🔐 GitHub OAuth"
# ✓ 登录成功!欢迎 your-username

# 2. 查看现有 Proxies
webhook-proxy list
# 显示所有 Proxy 列表

# 3. 创建新的 GitHub Proxy
webhook-proxy create
# Name: My Project
# Platform: github
# Webhook Secret: my-secret-key
# Verify Signature: Yes
# ✓ Proxy 创建成功!

# 4. 查看 Proxy 详情(包含完整 access_token)
webhook-proxy get abc123
# 显示完整信息,包括:
# - ID
# - Name
# - Platform
# - Webhook URL
# - WebSocket URL
# - SSE URL
# - Access Token(完整,不掩码)
# - Webhook Secret(完整,不掩码)

# 5. 更新 Proxy
webhook-proxy update abc123
# 按提示修改信息

# 6. 删除 Proxy
webhook-proxy delete abc123
# 确认后删除

CLI vs Web Dashboard

CLI 和 Web Dashboard 各有优势,可以根据场景选择:

功能CLIWeb Dashboard
快速操作✅ 极快⚪ 中等
显示完整 Secret✅ 始终显示⚠️ MFA/Passkey 掩码
批量操作✅ 适合⚪ 一般
脚本自动化✅ 完美❌ 不支持
可视化界面⚪ 文本✅ 图形化
适合新手⚪ 需学习✅ 更直观
💡 推荐使用场景:
- CLI:开发人员、DevOps、自动化脚本、快速操作、需要完整 Secret
- Web Dashboard:新手、可视化操作、安全管理(启用 MFA/Passkey)

📦 GitHub 仓库

Webhook Proxy 是一个开源项目,欢迎查看源码、提交 Issue 和贡献代码!

⭐ 给我们一个 Star!

如果你觉得这个项目有用,请在 GitHub 上给我们一个 Star!
这是对开发者最大的鼓励和支持 🙏

⭐ Star on GitHub
🎉 加入社区!
- 🐛 报告 Bug - 遇到问题?提交 Issue
- 💡 功能建议 - 有好想法?告诉我们
- 🤝 贡献代码 - Pull Request 欢迎
- 📖 阅读文档 - 完整使用指南
- ⭐ Star 项目 - 支持我们持续开发

技术栈

了解项目使用的技术:

  • CLI:TypeScript + Commander.js + Inquirer.js + Chalk + Ora
  • 后端:Cloudflare Workers + Hono + D1 + KV + Durable Objects
  • 前端:Hono JSX + Vanilla JavaScript
  • 认证:OAuth 2.0 + WebAuthn (Passkey) + TOTP (MFA)
  • CI/CD:GitHub Actions + pnpm Monorepo
📚 更多资源:
- CLI 完整文档:查看项目仓库的 packages/cli/README.md
- 部署指南:手动部署CI/CD 自动部署
- 示例代码:examples/ 目录
- 变更日志:CHANGELOG.md

🔗 Webhook 使用

Webhook 端点

每个 Proxy 生成三个 URL:

  • Webhook URL/[platform]/[random-key]
  • WebSocket URL/[platform]/[random-key]/ws
  • SSE URL/[platform]/[random-key]/sse

签名验证

如果启用了签名验证,系统会验证以下请求头:

  • GitHubX-Hub-Signature-256
  • GitLabX-Gitlab-Token

事件格式

接收到的事件包含以下字段:

{
  "id": "github-1234567890-abcdef",
  "type": "push",
  "platform": "github",
  "timestamp": 1234567890000,
  "raw": { /* 原始 webhook 数据 */ },
  "headers": {
    "x-github-event": "push",
    "x-github-delivery": "..."
  }
}

WebSocket 连接示例

const ws = new WebSocket('wss://your-worker.workers.dev/github/xxx/ws');

ws.onopen = () => {
  console.log('WebSocket 已连接');
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('事件类型:', data.type);
  console.log('原始数据:', data.raw);
};

ws.onerror = (error) => {
  console.error('WebSocket 错误:', error);
};

ws.onclose = () => {
  console.log('WebSocket 已断开');
};

SSE 连接示例

const eventSource = new EventSource(
  'https://your-worker.workers.dev/github/xxx/sse'
);

eventSource.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('收到事件:', data);
};

eventSource.onerror = (error) => {
  console.error('SSE 错误:', error);
};

// 关闭连接
eventSource.close();

🤖 QQ Bot Webhook 集成

Webhook Proxy 支持 QQ 官方机器人的 Webhook 事件转发,使用 Ed25519 数字签名算法进行身份验证。

1. 获取 QQ Bot 凭据

访问 QQ 开放平台 并完成以下步骤:

  • 创建或选择一个机器人
  • 开发设置 中获取:
    • App ID:机器人的唯一标识
    • App Secret:用于 Ed25519 签名的密钥
⚠️ 重要提示:
App Secret 是敏感信息,请妥善保管!不要将其泄露或提交到代码仓库。如果 Secret 泄露,请立即在 QQ 开放平台重置。

2. 创建 QQ Bot Proxy

在 Dashboard 创建 Proxy 时:

  • 平台:选择 QQ Bot
  • App ID:填入机器人的 App ID
  • Webhook Secret:填入 App Secret(不是公钥
  • 签名验证:建议启用(生产环境必须启用)
POST /api/proxies
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "My QQ Bot",
  "platform": "qqbot",
  "platform_app_id": "102005927",
  "webhook_secret": "your_app_secret_here",
  "verify_signature": true
}

3. 配置 QQ 开放平台

在 QQ 机器人管理页面:

  1. 进入 事件订阅Webhook 方式
  2. 填写回调地址:从 Dashboard 复制的 Webhook URL
  3. QQ 平台会发送 OpCode 13 验证请求,系统会自动响应
  4. 验证成功后,选择需要订阅的事件
  5. 保存配置
✅ 验证流程自动完成!
Webhook Proxy 会自动处理 OpCode 13 回调验证,无需手动操作。

4. 支持的事件类型

Webhook Proxy 支持所有 QQ Bot 事件类型(OpCode 0 - Dispatch):

公域事件:

  • AT_MESSAGE_CREATE - 用户 @ 机器人
  • PUBLIC_MESSAGE_DELETE - 频道消息删除

私域事件(需要权限):

  • MESSAGE_CREATE - 频道消息
  • MESSAGE_DELETE - 消息删除
  • MESSAGE_REACTION_ADD / MESSAGE_REACTION_REMOVE - 表情反应

群聊和私聊:

  • C2C_MESSAGE_CREATE - 用户单聊消息
  • FRIEND_ADD / FRIEND_DEL - 好友管理
  • GROUP_AT_MESSAGE_CREATE - 群聊 @ 机器人
  • GROUP_ADD_ROBOT / GROUP_DEL_ROBOT - 群机器人管理

其他事件:

  • 频道、子频道、成员、互动、音频事件等
📚 完整事件列表:
访问 QQ Bot 事件文档 查看所有支持的事件类型。

5. 接收 QQ Bot 事件

WebSocket 方式:

const ws = new WebSocket('wss://your-domain.com/qqbot/xxxxx/ws?token=your_access_token');

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('QQ Bot 事件:', data);
  
  // 事件结构:
  // {
  //   id: '事件ID',
  //   platform: 'qqbot',
  //   type: 'AT_MESSAGE_CREATE',  // 事件类型
  //   timestamp: 1234567890,
  //   headers: { ... },
  //   payload: { ... },  // 原始 QQ Bot 数据
  //   data: {
  //     opcode: 0,
  //     event_type: 'AT_MESSAGE_CREATE',
  //     sequence: 42,
  //     event_data: { ... }
  //   }
  // }
};

SSE 方式:

const es = new EventSource('https://your-domain.com/qqbot/xxxxx/sse?token=your_access_token');

es.onmessage = (event) => {
  const data = JSON.parse(event.data);
  
  // 根据事件类型处理
  if (data.type === 'AT_MESSAGE_CREATE') {
    console.log('收到 @ 消息:', data.data.event_data);
  }
  
  if (data.type === 'GROUP_AT_MESSAGE_CREATE') {
    console.log('收到群聊 @ 消息:', data.data.event_data);
  }
};

6. Ed25519 签名验证

QQ Bot 使用 Ed25519 数字签名算法:

  • OpCode 13(回调验证):Webhook Proxy 使用 App Secret 签名响应
  • OpCode 0(事件推送):Webhook Proxy 验证 QQ 平台的签名

验证流程:

// QQ 平台发送请求时携带:
X-Signature-Timestamp: 时间戳
X-Signature-Ed25519: 签名(hex 编码)

// Webhook Proxy 验证签名:
message = timestamp + body
verify(message, signature, publicKey)

// 签名验证通过后,转发事件
✅ 自动验证:
所有签名验证流程由 Webhook Proxy 自动完成,你只需要正确配置 App Secret。

7. 故障排查

回调地址验证失败:

  • 检查 App Secret 是否配置正确
  • 确保 Webhook URL 可以从公网访问
  • 使用允许的端口(80、443、8080、8443)

收不到事件:

  • 在 QQ 开放平台检查事件订阅配置
  • 检查日志确认签名验证状态(wrangler tail
  • 实现 WebSocket 重连机制

签名验证失败:

  • 确认 App Secret 配置正确(不是公钥)
  • 检查服务器时间是否同步
  • 查看详细日志:npx wrangler tail --format pretty

✈️ Telegram Bot Webhook 集成

Webhook Proxy 支持 Telegram 机器人的 Webhook 事件转发,使用简单的 Secret Token 进行身份验证。

1. 创建 Telegram Bot

通过 BotFather 创建 Telegram Bot:

  1. 在 Telegram 中搜索 @BotFather
  2. 发送命令 /newbot
  3. 按提示设置机器人名称和用户名
  4. BotFather 会返回 Bot Token(格式:123456789:ABCdefGHIjklMNOpqrsTUVwxyz
  5. 妥善保管 Bot Token,不要泄露给他人
⚠️ 安全提示:
Bot Token 是敏感信息,拥有它的人可以完全控制你的机器人。请勿将其泄露或提交到代码仓库。

2. 创建 Telegram Bot Proxy

在 Dashboard 创建 Proxy 时:

  • 平台:选择 Telegram
  • Bot Token:填入从 BotFather 获取的 Token
  • Secret Token:可选,填写自定义的安全令牌(推荐)
  • 签名验证:建议启用
POST /api/proxies
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "My Telegram Bot",
  "platform": "telegram",
  "platform_app_id": "123456789:ABCdefGHIjklMNOpqrsTUVwxyz",
  "webhook_secret": "my-custom-secret-token",
  "verify_signature": true
}

3. 设置 Webhook URL

使用 Telegram Bot API 设置 Webhook URL:

# 使用 curl 设置 Webhook
curl -X POST "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/setWebhook" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-domain.com/telegram/xxxxx",
    "secret_token": "your-secret-token-if-enabled"
  }'

# 验证 Webhook 设置
curl "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getWebhookInfo"
💡 提示:
- 将 <YOUR_BOT_TOKEN> 替换为你的 Bot Token
- 将 xxxxx 替换为 Dashboard 中生成的 random key
- secret_token 必须与创建 Proxy 时设置的一致

4. 支持的更新类型

Telegram Bot 支持多种更新类型:

消息类型:

  • message - 新消息(文本、图片、视频等)
  • edited_message - 编辑的消息
  • channel_post - 频道消息
  • edited_channel_post - 编辑的频道消息

交互类型:

  • callback_query - 内联键盘按钮回调
  • inline_query - 内联查询
  • chosen_inline_result - 选中的内联结果

支付和其他:

  • shipping_query - 配送查询
  • pre_checkout_query - 预结账查询
  • poll / poll_answer - 投票
  • my_chat_member / chat_member - 成员状态变更
  • chat_join_request - 入群请求
📚 完整文档:
访问 Telegram Bot API 文档 查看所有更新类型。

5. 接收 Telegram 事件

WebSocket 方式:

const ws = new WebSocket('wss://your-domain.com/telegram/xxxxx/ws?token=your_access_token');

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('Telegram 事件:', data);
  
  // 事件结构:
  // {
  //   id: '事件ID',
  //   platform: 'telegram',
  //   type: 'message',  // 更新类型
  //   timestamp: 1234567890,
  //   headers: { ... },
  //   payload: { ... },  // 原始 Telegram Update
  //   data: {
  //     update_id: 123456789,
  //     event_type: 'message',
  //     chat_id: 123456789,
  //     user_id: 987654321,
  //     message_text: 'Hello, Bot!'
  //   }
  // }
  
  // 处理不同类型的消息
  if (data.type === 'message' && data.payload.message) {
    const msg = data.payload.message;
    console.log('消息文本:', msg.text);
    console.log('发送者:', msg.from.username);
  }
};

SSE 方式:

const es = new EventSource('https://your-domain.com/telegram/xxxxx/sse?token=your_access_token');

es.onmessage = (event) => {
  const data = JSON.parse(event.data);
  
  // 根据事件类型处理
  switch (data.type) {
    case 'message':
      console.log('新消息:', data.data.message_text);
      break;
    case 'callback_query':
      console.log('按钮回调:', data.payload.callback_query.data);
      break;
    case 'inline_query':
      console.log('内联查询:', data.payload.inline_query.query);
      break;
  }
};

6. Secret Token 验证

Secret Token 提供额外的安全保护:

  • Telegram 在每次请求时发送 X-Telegram-Bot-Api-Secret-Token
  • Webhook Proxy 验证该 Token 是否与配置的 Secret Token 匹配
  • 验证失败返回 401 Unauthorized
  • Secret Token 长度应为 1-256 个字符
// Telegram 请求头示例:
X-Telegram-Bot-Api-Secret-Token: my-custom-secret-token

// Webhook Proxy 验证流程:
if (secretToken !== configured_secret_token) {
  return 401 Unauthorized;
}
✅ 最佳实践:
1. 始终使用 HTTPS(Telegram 要求)
2. 设置 Secret Token 增强安全性
3. 定期检查 Webhook 状态(使用 getWebhookInfo
4. 处理所有可能的更新类型

7. 常见问题

Webhook 设置失败:

  • 确保 URL 使用 HTTPS
  • 检查端口是否为 443、80、88 或 8443
  • 验证 SSL 证书是否有效
  • 确认 Bot Token 正确

收不到消息:

  • 使用 getWebhookInfo 检查 Webhook 状态
  • 查看是否有待处理的更新(pending_update_count
  • 检查 Secret Token 是否匹配
  • 查看 Cloudflare Workers 日志

删除 Webhook:

curl -X POST "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/deleteWebhook"

📖 API 参考

认证相关

  • GET /auth/github - GitHub OAuth 登录
  • GET /auth/gitlab - GitLab OAuth 登录
  • GET /auth/logout - 退出登录
  • GET /api/me - 获取当前用户信息

Proxy 管理

  • GET /api/proxies - 列出所有 Proxies
  • POST /api/proxies - 创建 Proxy
  • GET /api/proxies/:id - 获取 Proxy 详情
  • PUT /api/proxies/:id - 更新 Proxy
  • DELETE /api/proxies/:id - 删除 Proxy

Webhook 端点

  • POST /:platform/:key - 接收 Webhook
  • GET /:platform/:key/ws - WebSocket 连接
  • GET /:platform/:key/sse - SSE 连接

其他

  • GET /health - 健康检查
  • GET / - 首页
  • GET /about - 关于页面
  • GET /docs - 文档页面

🔄 CI/CD 自动部署

项目已配置 GitHub Actions 自动部署到 Cloudflare Workers。

工作流

  • CI: 每次 Push 和 PR 都会运行类型检查
  • Preview: PR 创建时运行预览部署验证
  • Deploy: 合并到 master 后自动部署到生产环境

配置步骤

1. Fork 本仓库

2. 配置 GitHub Secrets

在仓库的 Settings → Secrets and variables → Actions 中添加:

  • CLOUDFLARE_API_TOKEN - Cloudflare API Token
  • CLOUDFLARE_ACCOUNT_ID - Cloudflare Account ID
获取 API Token:
访问 Cloudflare Dashboard → API Tokens → Create Token
使用 "Edit Cloudflare Workers" 模板
获取 Account ID:
访问 Cloudflare Dashboard,在右侧边栏找到 Account ID

3. 推送代码自动部署

git push origin master

GitHub Actions 会自动:

  • ✅ 类型检查
  • ✅ 应用数据库迁移
  • ✅ 部署到 Cloudflare Workers

查看部署状态

访问仓库的 Actions 页面查看工作流运行状态。

💡 提示:
详细配置说明请查看 .github/CI_CD_SETUP.md

🚀 手动部署指南

环境要求

  • Node.js 18+
  • Cloudflare 账号(免费)
  • Wrangler CLI

本地开发

# 安装依赖
npm install

# 配置环境变量
cp .dev.vars.example .dev.vars

# 创建本地数据库
npm run db:migrate:local

# 启动开发服务器
npm run dev

部署到 Cloudflare

# 登录 Cloudflare
npx wrangler login

# 创建 D1 数据库
npm run db:create

# 运行数据库迁移
npm run db:migrate

# 配置环境变量
npx wrangler secret put GITHUB_CLIENT_ID
npx wrangler secret put GITHUB_CLIENT_SECRET
npx wrangler secret put GITLAB_CLIENT_ID
npx wrangler secret put GITLAB_CLIENT_SECRET
npx wrangler secret put SESSION_SECRET
npx wrangler secret put JWT_SECRET
npx wrangler secret put RESEND_API_KEY

# 部署
npm run deploy
✅ 部署完成!
你的服务已经在 Cloudflare Workers 上运行,完全免费!

环境变量说明

  • GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET - GitHub OAuth 应用凭据
  • GITLAB_CLIENT_ID / GITLAB_CLIENT_SECRET - GitLab OAuth 应用凭据
  • SESSION_SECRET - Session 加密密钥(至少 32 字符)
  • JWT_SECRET - JWT 签名密钥(至少 32 字符)
  • RESEND_API_KEY - Resend 邮件服务 API Key(格式:re_xxx)
    获取方式:访问 resend.com 注册并创建 API Key
💡 提示:生成随机密钥可以使用:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
开始使用关于项目返回首页