- 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
4.8 KiB
部署
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 PEM(BEGIN 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.jsonc 的 vars 中设置 DISCORD_GATEWAY_ENABLED(默认为 "false")。参见下方 Gateway(可选)。
3. 部署
npx wrangler deploy
Worker 现在可通过 https://webhooker.<your-subdomain>.workers.dev 访问。
4. 配置 GitHub Webhook
- 进入 GitHub App 设置页面
- 设置 Webhook URL 为
https://webhooker.<your-subdomain>.workers.dev/webhook - 设置 Webhook secret 与
GITHUB_WEBHOOK_SECRET一致
GitHub App 设置
1. 创建 App
- 打开 https://github.com/settings/apps/new
- 填写:
- GitHub App name:
WebHooker(或自定义名称) - Homepage URL: 你的域名
- Webhook URL:
https://your-domain/webhook - Webhook secret: 生成并复制到
GITHUB_WEBHOOK_SECRET
- GitHub App name:
- 设置权限:
- Repository permissions: Contents (read)、Issues (write)、Pull requests (write)、Metadata (read)
- Organization permissions: Members (read)——如果需要
- 订阅事件(全部 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
- 生成私钥 → 将内容保存到
GITHUB_PRIVATE_KEY环境变量
2. 安装 App
- 创建后,进入 App 设置页面
- 点击 "Install App" → 选择组织/用户
- 选择要监控的仓库
3. 配置 OAuth
- 进入 App → OAuth 设置
- 设置 Callback URL:
https://your-domain/auth/github/callback - 将 Client ID 和 Client Secret 复制到环境变量
Discord Bot 设置
-
创建新应用 → 进入 Bot 部分
-
将 Bot Token 复制到
DISCORD_TOKEN -
使用
bot与applications.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 -
在 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:
- 进入 Cloudflare Worker 设置
- 添加自定义域名或路由
- 更新
BASE_URL以匹配
Docker
提供 Dockerfile 用于容器化部署(例如在反向代理后面):
docker build -t webhooker .
docker run -p 8787:8787 --env-file .env webhooker
注意:Docker 模式下不包含 Durable Objects 和 KV。完整功能请使用 Cloudflare 部署。