Gitlab本地部署(2)Git LFS从外网访问的问题和解决
本文最后更新于:2023年10月14日 中午
前言
上一篇自部署的Gitlab已经能够在内网环境内访问了,在校园环境内我们通常是在机房的服务器上运行程序,因此从机房服务器到实验室内的Gitlab宿主机这条路需要打通:
graph LR
机房服务器 --> 个人路由器 --> Gitlab宿主机
如果你的个人路由器无法被机房服务器访问,那么这篇文章的完整过程可能无法复现,但是可以作为借鉴。
本篇主要解决的问题是git lfs在通过路由器端口转发后无法正常被宿主机解析,导致lfs请求的地址是无法从外部访问的内网地址,最终卡在downloading界面没有反应。
省流版:在clone命令中加入可访问内网地址的跳板机作为http代理,通过内网地址进行lfs的仓库克隆。
问题
上一篇提到我们在内网中留下了3个端口,分别是SSH端口、HTTP端口和HTTPS端口,
在内网中无论是通过ssh访问还是http访问都没有出现问题,特别是lfs追踪的大文件,都可以以理想速度进行下载。但是在大局域网(下称:外网)中,git clone
或者git lfs clone
都无法正常下载lfs追踪的大文件,表现为卡在下载环节,这时候仓库其他内容已经下载完成,只等lfs下载
通过SSH clone也没有办法下载lfs文件
类似的问题在lfs官方的issue中有人曾经提到过,在Gitea中也遇到了:issue
在回复中作者表示不会解决这个问题,应该由Gitea来解决,Gitlab也一样。
问题如上面描述的一样,在LFS中处理大文件链接所解析得到的ip地址是Gitlab部署时配置的内网地址,即使在外网访问,LFS也不会修改这个地址,那解决方案很清晰明了。
解决方案
代理之Clash
需要:一个能够提供http代理的内网代理工具,常见的如Clash
如果你的内网中有Clash并放出了代理端口(默认的是7890),在配置好路由器的端口转发后,就可以将Clash的http代理端口通过路由器端口转发到校园网范围内,这个代理端口能够被机房服务器访问,命令如下:
1 |
|
代理之群晖
需要:内网群晖开启Proxy Server放出http代理
这是我最新发现的一个用法,群晖的官方套件中有Proxy Server可以放出http代理
用法和上面的一样,多一步可能是,在这里可能需要配置下来源IP保证安全
两个方案其实一样都是通过http代理,直接clone内网ip地址的仓库,只需要第一次使用配置代理,后续自动都使用代理pull和push
坏处是每次新克隆还得找代理的命令。
对于Git clone 设置代理
1 |
|