背景:小五已在 OpenClaw 容器里搭好 webhook 接收服务(监听 8899 端口,运行中)。本仓库 webhook 已创建(URL: http://172.21.0.2:8899/gitea,事件:Issues + Issue Comments),但 Test Delivery 报错:
http://172.21.0.2:8899/gitea
webhook can only call allowed HTTP servers (check your security.ALLOWED_HOST_LIST setting), deny '172.21.0.2(172.21.0.2:8899)'
原因:Gitea 默认 webhook 出站白名单为 external(仅公网),私有 IP 全部被拦,需改配置。
external
操作步骤(群晖 SSH,约 5 分钟):
确认 Gitea 是 Docker 还是套件装的:
docker ps --format '{{.Names}} {{.Image}}' | grep -i gitea
有输出 = Docker 版;无输出 = 套件版。
编辑 app.ini:
/data/gitea/conf/app.ini
/etc/gitea/app.ini
[security]
[security] ALLOWED_HOST_LIST = private,loopback,172.21.0.2,192.168.27.11
重启 Gitea:
# Docker 版 docker restart <gitea容器名> # 套件版 synosystemctl restart pkgctl-Gitea
回本仓库 Settings → Webhooks → 找到 webhook → 点 Test Delivery 重发,把结果(✅ 成功 / ❌ 新错误信息)告诉小五。
后续:gemdalepi 仓库也要配同样的 webhook(quanxiel 通了之后配)。
(secret 已通过微信发给爸爸,不贴在 issue 里)
目标:仓库里有人 @xiaowu 时,自动把通知推给 OpenClaw 主实例(经飞书提醒爸爸)。
最终状态:2026-09-12 13:50 打通,实测 issue_comment 事件成功送达并唤醒 agent ✅
issue_comment
ALLOWED_HOST_LIST
dial tcp 192.168.27.11:8899: connect: connection refused
context deadline exceeded (Client.Timeout exceeded while awaiting headers)
DOCKER-USER
插曲:原 webhook 记录曾丢失,导致一段时间完全无投递 —— 重建即可。
[security] ALLOWED_HOST_LIST
private
-A FORWARD
webhook 目标 URL:http://192.168.27.11:8899/gitea
http://192.168.27.11:8899/gitea
# 1) DNAT:主机 8899 → OpenClaw 容器 iptables -t nat -A PREROUTING -p tcp --dport 8899 -j DNAT --to-destination 172.21.0.2:8899 # 2) 放行跨 docker 网络转发(必须插到 DOCKER-USER 最前,绕过隔离 DROP) iptables -I DOCKER-USER 1 -p tcp -d 172.21.0.2 --dport 8899 -j ACCEPT
已做成开机自启(幂等脚本):ops/openclaw-webhook-iptables.sh
ops/openclaw-webhook-iptables.sh
sh /volume1/scripts/openclaw-webhook-iptables.sh
POST
application/json
~/.openclaw/gitea-webhook-secret
curl http://192.168.27.11:8899/health
ok
收到 webhook: issue_comment
OC_IP=172.21.0.2
记录:小五 / 2026-09-12
@xiaowu 测试下能不能正常通过webhook来通信,小五收到了话请回复“收到”。
收到 ✅
小五通过 webhook 收到你本条 @(22:10:27 送达),通道双向验证成功。以后在 Gitea 里 @xiaowu 我就能收到。
—— 自动回复 / 小五 🖐️
No dependencies set.
The note is not visible to the blocked user.
待办:配置 Gitea webhook 白名单,让小五能收到 @ 提醒
背景:小五已在 OpenClaw 容器里搭好 webhook 接收服务(监听 8899 端口,运行中)。本仓库 webhook 已创建(URL:
http://172.21.0.2:8899/gitea,事件:Issues + Issue Comments),但 Test Delivery 报错:原因:Gitea 默认 webhook 出站白名单为
external(仅公网),私有 IP 全部被拦,需改配置。操作步骤(群晖 SSH,约 5 分钟):
确认 Gitea 是 Docker 还是套件装的:
有输出 = Docker 版;无输出 = 套件版。
编辑 app.ini:
/data/gitea/conf/app.ini/etc/gitea/app.ini在
[security]段添加(没有就新建):重启 Gitea:
回本仓库 Settings → Webhooks → 找到 webhook → 点 Test Delivery 重发,把结果(✅ 成功 / ❌ 新错误信息)告诉小五。
后续:gemdalepi 仓库也要配同样的 webhook(quanxiel 通了之后配)。
(secret 已通过微信发给爸爸,不贴在 issue 里)
测试 issue 创建权限to 🟡 待办:Gitea webhook 白名单配置(ALLOWED_HOST_LIST),让 @xiaowu 收到 @ 提醒✅ 已解决:Gitea webhook → OpenClaw(@xiaowu 自动提醒)
目标:仓库里有人 @xiaowu 时,自动把通知推给 OpenClaw 主实例(经飞书提醒爸爸)。
最终状态:2026-09-12 13:50 打通,实测
issue_comment事件成功送达并唤醒 agent ✅一、报错演变(很有代表性)
ALLOWED_HOST_LIST拦截 / 无投递dial tcp 192.168.27.11:8899: connect: connection refusedcontext deadline exceeded (Client.Timeout exceeded while awaiting headers)DOCKER-USER放行后打通二、根因
[security] ALLOWED_HOST_LIST需包含目标主机(private即覆盖 172.21.0.2 / 192.168.27.11)。-A FORWARD追加的放行规则排在隔离 DROP 之后,无效。三、最终方案(群晖主机上执行)
webhook 目标 URL:
http://192.168.27.11:8899/gitea已做成开机自启(幂等脚本):
ops/openclaw-webhook-iptables.shsh /volume1/scripts/openclaw-webhook-iptables.sh四、webhook 侧配置(Gitea)
http://192.168.27.11:8899/giteaPOST| POST 内容类型application/json~/.openclaw/gitea-webhook-secret)五、验证方法
curl http://192.168.27.11:8899/health→ 返回ok收到 webhook: issue_comment并唤醒 agent六、遗留 / 注意
OC_IP=172.21.0.2为容器 IP;容器重建后若 IP 变化需同步修改(后续可做自动探测版)。记录:小五 / 2026-09-12
@xiaowu 测试下能不能正常通过webhook来通信,小五收到了话请回复“收到”。
收到 ✅
小五通过 webhook 收到你本条 @(22:10:27 送达),通道双向验证成功。以后在 Gitea 里 @xiaowu 我就能收到。
—— 自动回复 / 小五 🖐️