• 简体中文
  • 存储位置

    评论数据可以放在评论系统自己的仓库,也可以放在另一个仓库。由 COMMENTS_REPO 的值决定,没有额外开关。

    COMMENTS_REPO=owner/comments-repo   # 推荐:独立仓库
    # 或
    COMMENTS_REPO=owner/gitpigeon    # 与评论系统同仓库

    推荐不同仓库

    两者都支持,但不是平级选项。

    1. 爆炸半径

    • 不同仓库:PAT 泄露 = 攻击者能往评论仓库写垃圾文件
    • 同仓库:PAT 泄露 = 攻击者能往「正在运行这段函数」的仓库推代码 → 平台 Git 集成自动部署 → 攻击者拿到函数运行时,可读取全部环境变量(含 GITHUB_TOKEN 与 COMMENTS_SECRET),等于完整接管

    2. 自身重新部署

    平台 Git 集成监听的是「仓库 push」,不是「代码 push」。每次批准评论都会让函数重建一次。功能上无害,但会消耗构建分钟数。

    各平台跳过构建的方式:

    平台手段
    VercelIgnored Build Step 判断只有 comments/ 变更时跳过
    Netlifyignore 构建命令,同上思路
    Cloudflare PagesBuild watch paths 排除 comments/*
    Cloudflare Workers(wrangler 手工部署)无 Git 集成,不存在此问题

    3. 硬约束

    构建过程绝对不能写回仓库。 写入只发生在 approve 动作里,构建永远只读。否则同仓库会变成无限部署循环。

    同仓库告警

    若配置了 SELF_REPO 且与 COMMENTS_REPO 相同,/api/health 会返回 sameRepo: true 并附警告。不填 SELF_REPO 则不比对、不告警。

    对客户端透明

    无论同仓还是异仓、私有还是公开,widget 配置完全一致。只有服务端的 COMMENTS_REPO 不同。