简单的开头
Gitlab 是一个基于Web的开源版本控制系统和代码管理系统,在企业中作为常见的代码版本管理工具。
我自己部署一个Gitlab 在家中的服务器上, 那么如何非家庭网络中访问呢? 答案是内网穿透!
Gitlab 部署
Gitlab 提供多种方便的部署方式, 具体的方法可以查阅这里,Download and install GitLab | GitLab
我自己使用Docker 进行部署,下面是我的 docker-compose.yml
文件可以参考下,
1 | # docker-compose.yml |
因我是部署在树莓派上, 使用的架构是 arm64
,但是Gitlab官方镜像中并没有arm64
.这里使用的是我自己构建的镜像.
构建镜像dockerfile 可以看这里 GitHub - gsdukbh/docker-gitlab-ee-arm64: build gitlab-ee for arm64 images
关于gitlab 部署的更多问题,可以参阅我的其他文章.
配置 Cloudflare Tunnel
Cloudflare Tunnel
是Cloudflare 推出的内网穿透的工具,可将任意内网子域或路径映射到外网域名,实现内网服务外网访问。
利用Cloudflare Tunnel 可以完美配置网络穿透,并且无需任何费用.
安装 Cloudflare Tunnel
使用命令行安装.
1 | sudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb |
推荐使用 软件包管理器进行安装 官方 Linux 软件包 在自己的软件源中添加 pkg.cloudflare.com
这样方便后续的更新.
登录 Cloudflare Tunnel
1 |
|
输出, 点击连接通过网页登录认证.
连接到Cloudflare
创建一个连接通道.
1
cloudflared tunnel create gitlab
cloudflared 会创建一个唯一id的连接通道, 比如 6ff42ae2-765d-4adf-8112-31c55c1551ef
然后我们使用这个来连接.
配置本地连接网络.
1
2
3
4
5
6
7
8
9
10vim ~/.cloudflared/config.yml
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
ingress:
- hostname: gitlab.yourdomain.com
service: http://localhost:80
- hostname: gitlab-ssh.yourdomain.com
service: ssh://localhost:22
- service: http_status:404检查下配置是否正常.
1
2
3
cloudflared tunnel ingress validate运行Tunnel
1
2# 这个会直接运行在终端, 停止会让内网穿透失败
cloudflared tunnel run
5. 创建一个systemd 服务来长期运行 tunnel
1 | #创建文件 |
配置DNS
先将自己域名添加到cloudflare, 然后在 网站-> DNS
添加DNS 记录. 选择 CNAME
然后填入
1 | ##名称 |
gitlab-ssh 域名重复上.
等待几分钟 ,这个时候就可以访问 Gitlab了
配置 SSH
使用 cloudflare tunnel
连接ssh 有些麻烦,必须在使用的电脑上安装cloudflared
才可以使用.
安装 cloudflared
在 用户目录 .ssh/config
配置
1 | Host gitlab-ssh.yourdomain.com |
到此, Gitlab 就完全在 cloudflare
的代理后面了,