${OVERLEAF_SITE_URL}/git/<project id> 进行克隆和推送;Ayakaleaf Pro Pod 将这些请求转发给 git-bridge,git-bridge 再回调该 Pod 以获取项目内容和历史记录。开启该功能还会启用 MCP 服务器,并且 GitHub、GitLab、Gitea 和 Dropbox 同步都需要它。
本页在使用 Kubernetes 中的单副本安装基础上进行扩展。对于多个副本,请参见水平扩展。
1
部署 git-bridge
45-git-bridge.yaml
10.96.100.80 必须是你集群 Service CIDR 内的一个空闲地址(kubeadm 的默认值为 10.96.0.0/12)。2
让 Ayakaleaf Pro 指向它
添加到
30-config.yaml:30-config.yaml (additions)
3
克隆项目
在 Account Settings 中创建一个 Git 身份验证令牌,然后运行:以
git 作为用户名,以该令牌作为密码。清单为何如此编写
- 使用固定的 ClusterIP 作为
GIT_BRIDGE_HOST。Ayakaleaf Pro 镜像中的 nginx 转发/git/时使用的解析器被设置为127.0.0.11,即 Docker 的内置 DNS。Kubernetes 在该地址上没有 DNS 服务器,因此诸如git-bridge之类的主机名会失败并返回502,同时/var/log/nginx/error.log中会出现 “git-bridge could not be resolved”。IP 地址则无需解析。 overleaf-internal。git-bridge 需要访问 Ayakaleaf Pro Pod 的端口3000(web API)和3100(历史记录)。单独的 ClusterIP Service 会将它们限制在集群内部;如果将它们添加到 NodePort Service,则会在每个节点上公开这些端口。enableServiceLinks: false。Servicegit-bridge会使 Kubernetes 向 Pod 添加GIT_BRIDGE_PORT=tcp://10.96.100.80:8000;git-bridge 会将GIT_BRIDGE_PORT读取为其监听端口,并因MalformedJsonException ... path $.port而停止。- 一个副本,并使用独立的卷。git-bridge 在磁盘上为每个已克隆的项目保存一个 git 仓库,并且不能同时运行两个实例。请备份它的卷。
在 Kubernetes 上的测试
在 Kubernetes 1.37 上,使用位于 HAProxy 之后的三个副本,并以 git-bridge 作为overleaf-0 的相邻服务,我们针对 Git 集成的端到端测试全部通过(19 个用例),包括将 git-bridge 移至端口 8001 以使 nginx 必须使用 GIT_BRIDGE_HOST 和 GIT_BRIDGE_PORT 的情况:账户设置中的 Git 令牌、编辑器中的克隆命令、克隆、推送和拉取、二进制文件和文件夹、重命名和删除、拒绝过时的推送、按角色访问(受邀编辑者和通过链接加入的编辑者可以推送,查看者和审阅者只能克隆,无访问权限的用户会被拒绝)、拒绝错误和已删除的令牌、git-bridge 的内部路由保持在 nginx 之后,以及已停用的账户。Git 身份验证令牌本身(生成、列出、每用户上限、删除、过期、git-bridge 向 web 请求的检查,以及已停用和已删除账户的令牌)在一个副本上的测试全部通过(16 个用例)。
Q&A
git clone 返回 502。
git clone 返回 502。
回答:请检查
GIT_BRIDGE_HOST:它必须是 git-bridge Service 的 IP 地址,而不是其名称,见上文。kubectl -n overleaf exec deploy/overleaf -- tail /var/log/nginx/error.log 会显示原因。
