WebHooker/docs/zh/guide/deployment.md
RhenCloud d996dbe45d
docs: align VitePress site with REST send, optional gateway and slash commands
- deployment: drop DISCORD_CHANNEL_ID, add ADMIN_USER_IDS, PKCS#8 key note,
  applications.commands invite scope, and an optional Gateway section
- getting-started: PKCS#8 .dev.vars example, remove channel ID
- introduction: REST delivery, optional DiscordGateway DO, delivery dedup,
  /admin Web UI in architecture and data flow
- index: refresh Workers feature, add Web UI & slash commands feature
2026-08-02 07:02:40 +08:00

4.8 KiB
Raw Blame History

部署

Cloudflare 设置

1. 创建 KV 命名空间

npx wrangler kv namespace create KV

这会输出一个命名空间 ID。更新 wrangler.jsonc,填入 ID

{
  "kv_namespaces": [
    {
      "binding": "KV",
      "id": "your-namespace-id",
    },
  ],
}

2. 设置密钥

npx wrangler secret put GITHUB_WEBHOOK_SECRET
npx wrangler secret put GITHUB_APP_ID
npx wrangler secret put GITHUB_PRIVATE_KEY   # PKCS#8 PEMBEGIN PRIVATE KEY
npx wrangler secret put GITHUB_CLIENT_ID
npx wrangler secret put GITHUB_CLIENT_SECRET
npx wrangler secret put DISCORD_TOKEN
npx wrangler secret put ADMIN_USER_IDS       # 逗号分隔的 GitHub ID/登录名,允许进入 Web UI

::: tip 目标频道按路由配置 不存在全局频道密钥。每条路由在 Web 控制台 中声明各自的目标频道(及可选的子区/thread因此不需要 DISCORD_CHANNEL_ID。 :::

::: warning GitHub App 私钥必须是 PKCS#8 GitHub 下发的私钥为 PKCS#1 格式(BEGIN RSA PRIVATE KEY。Cloudflare Workers 的 JWT 签名要求 PKCS#8需先转换

openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt \
  -in your-app.private-key.pem -out gh_pk_pkcs8.pem

然后将 gh_pk_pkcs8.pem 作为 GITHUB_PRIVATE_KEY 上传。 :::

Discord Gateway 是可选的。在 wrangler.jsoncvars 中设置 DISCORD_GATEWAY_ENABLED(默认为 "false")。参见下方 Gateway可选

3. 部署

npx wrangler deploy

Worker 现在可通过 https://webhooker.<your-subdomain>.workers.dev 访问。

4. 配置 GitHub Webhook

  1. 进入 GitHub App 设置页面
  2. 设置 Webhook URLhttps://webhooker.<your-subdomain>.workers.dev/webhook
  3. 设置 Webhook secretGITHUB_WEBHOOK_SECRET 一致

GitHub App 设置

1. 创建 App

  1. 打开 https://github.com/settings/apps/new
  2. 填写:
    • GitHub App name: WebHooker(或自定义名称)
    • Homepage URL: 你的域名
    • Webhook URL: https://your-domain/webhook
    • Webhook secret: 生成并复制到 GITHUB_WEBHOOK_SECRET
  3. 设置权限:
    • Repository permissions: Contents (read)、Issues (write)、Pull requests (write)、Metadata (read)
    • Organization permissions: Members (read)——如果需要
  4. 订阅事件(全部 23 种支持的事件):
    • Push、Pull request、Issues、Issue comment、Workflow run、Release、Create、Delete、Star、Fork、Check run、Pull request review、Pull request review comment、Commit comment、Deployment status、Member、Label、Milestone、Discussion、Discussion comment、Repository、Code scanning alert、Dependabot alert
  5. 生成私钥 → 将内容保存到 GITHUB_PRIVATE_KEY 环境变量

2. 安装 App

  1. 创建后,进入 App 设置页面
  2. 点击 "Install App" → 选择组织/用户
  3. 选择要监控的仓库

3. 配置 OAuth

  1. 进入 App → OAuth 设置
  2. 设置 Callback URL: https://your-domain/auth/github/callback
  3. 将 Client ID 和 Client Secret 复制到环境变量

Discord Bot 设置

  1. 打开 https://discord.com/developers/applications

  2. 创建新应用 → 进入 Bot 部分

  3. 将 Bot Token 复制到 DISCORD_TOKEN

  4. 使用 botapplications.commands 两个 scope 邀请 Bot并勾选 View Channels + Send Messages + Send Messages in Threads 权限(组合整数 274877910016

    https://discord.com/oauth2/authorize?client_id=YOUR_BOT_CLIENT_ID&permissions=274877910016&scope=bot+applications.commands
    
  5. 在 Web UI/admin)中按路由配置目标频道——无需全局频道 ID。

Gateway可选

消息通过 Discord REST API 发送,因此仅凭 DISCORD_TOKEN 即可推送。Gateway 连接仅用于:(a) 让 Bot 显示为在线(b) 启用 Discord 内的斜杠 / 右键菜单命令。

  • DISCORD_GATEWAY_ENABLED=false(默认):仅 REST不建立 Gateway 连接。
  • DISCORD_GATEWAY_ENABLED=true:由一个 Durable Object 持有 Gateway 连接,并按服务器注册 /gh 斜杠命令以及 GitHub: 添加/编辑/删除评论 消息命令。

启用后,用户运行 /gh login 绑定自己的 GitHub 账号,即可以本人身份评论 issue/PR。完整命令说明见 README

自定义域名(可选)

要使用自定义域名替代 *.workers.dev

  1. 进入 Cloudflare Worker 设置
  2. 添加自定义域名或路由
  3. 更新 BASE_URL 以匹配

Docker

提供 Dockerfile 用于容器化部署(例如在反向代理后面):

docker build -t webhooker .
docker run -p 8787:8787 --env-file .env webhooker

注意Docker 模式下不包含 Durable Objects 和 KV。完整功能请使用 Cloudflare 部署。