GitLab LFS 外网访问
文章目录
介绍
GitLab 提供外网访问,只需要将 HTTP 端口进行端口转发即可。
问题
使用 Git LFS 时无法拉取更新,会卡住。
使用 Charles 抓包后发现是在下载 LFS 对象时卡住,下载时使用的 URL 是 GitLab 中配置的地址,而不是端口转发后的地址。
地址是从 example/lfstest.git/info/lfs/objects/batch
这个请求返回的结果中有 LFS 对象的完整地址,而这个地址使用的是 GitLab 内部配置的服务器地址。
有人使用 Gitea 遇到相同的内外网同时访问问题,内外网 IP 不同导致 LFS 下载文件失败:
环境
- macOS 10.14.6
- Windows 7
- Git 2.28.0
- Git LFS 2.11.0
测试
新建只有一个 LFS 文件的工程测试,只需要 LFS 追踪一个图片文件,将图片文件与 .gitattributes
提交就可以创建好一个完整的测试工程。
|
|
网址替换
尝试使用 git 配置,发现 Git LFS 下载文件并不会使用这个配置
url.<url>.insteadOf
git config --global url."http://git.example1.com:8025".insteadOf "http://git.example2.com"
VPN
首先尝试使用 VPN,在外网使用 VPN 就像在内网一样,可以非常方便地访问所有内网资源。
简单研究了下不同的 VPN 协议优缺点后,尝试在路由器上直接开启了 L2TP VPN,手机测试没问题,但是使用电信远程电脑测试时,发现无法连接,猜测是电信运营商不允许使用 VPN。
反向代理
尝试使用 caddy server 配置反向代理,这样克隆仓库与访问网站都不用修改地址,与内网使用完全一致。
caddy reverse-proxy --from http://git.example2.com --to http://git.example1.com:8025
右键点击 helper.bat,在弹出的菜单中选择“以管理员身份运行”,不要关闭弹出的窗口,保持后台运行即可。 接下来就可以正常使用 http://git.example2.com/ 访问 GitLab,并且使用 Fork、Sourcetree、TortoiseGit 拉取更新了。
- How to Edit the Hosts File on macOS (Mac OS X)
- Command Line — Caddy Documentation
- Reverse proxy quick-start — Caddy Documentation
测试
必须使用手机联网模拟外网访问,测试成功后才能说方案可行。
|
|
经过上述步骤修改 hosts、刷新 DNS 缓存、开启反向代理服务器后,测试克隆 LFS 仓库:
|
|
应用
下面介绍如何在 Windows 上快速使用:
将以下内容保存为 hosts
|
|
将以下内容保存为 helper.bat
|
|
下载 CaddyServer 并将其与上面两个文件放在同一目录下。Caddy Server 只有单一的一个可执行文件,非常便携好用。
右键点击 helper.bat
,在弹出的菜单中选择“以管理员身份运行”,不要关闭弹出的窗口,保持后台运行即可。
接下来就可以正常使用 http://git.example2.com/ 访问 GitLab,并且使用 Fork、Sourcetree、TortoiseGit 拉取更新了。