在windows本地机搭建gitlab
1. 解决方案
注:gitlab只有linux版本,并不存在windows版本,并且需要公网IP用于外网访问。
手头需要用到的设备包含:
1、笔记本A,用于编写代码,以及从外网连接gitlab的ssh服务。
2、台式机B,高性能本地计算机,用于充当部署服务器,但是没有公网IP。
3、云服务器C,低性能服务器,运算性能很差,但是拥有公网IP与域名。
4、虚拟机D,在台式机B上运行的docker虚拟机
因此,解决方案是基于docker与frp端口转发实现。即在台式机B上使用docker安装配置gitlab服务器,然后通过端口穿透转发到云服务器C的公网IP与端口上,再通过笔记本A在外网对其进行访问。
2. docker安装gitlab
2.1 下载Docker Desktop
docker需要在windows安装Docker Desktop,从官方网站下载软件安装包后,在台式机B上安装即可。
2.2 安装gitlab的docker
注:docker desktop不支持事后修改端口映射,因此应该尽量保证所有端口映射在docker创建时都配置正确,否则只能删除重新新建docker虚拟机再配置了。
在台式机B上打开文件浏览器,在地址栏输入cmd
后回车,打开cmd终端。
搜索并下载gitlab官方镜像(这一步需要用到一些魔法妙妙工具):
docker search gitlab/gitlab-ce
docker pull gitlab/gitlab-ce
然后在本地新建3个文件夹用于存放gitlab数据,分别是gitlab/data,gitlab/log和gitlab/config,之后新建docker服务器:
docker run -d \
--hostname localhost \
-p 8090:80 -p 10022:22 -p 443:443 \
--name gitlab \
--restart unless-stopped \
-v D:\docker\gitlab\config:/etc/gitlab \
-v D:\docker\gitlab\log:/var/log/gitlab \
-v D:\docker\gitlab\data:/var/data/gitlab \
gitlab/gitlab-ce:latest
-p xx:yy
表示把台式机B的xx接口对应到虚拟机D的yy接口,即访问其中任何一个接口,等价于访问另一个接口。
-v xx:yy
表示把台式机B的xx路径对应到虚拟机D的yy路径,即访问其中任何一个路径,等价于访问另一个路径,其中所有的文件修改都是同步的。
虚拟机D的80接口用于访问gitlab的控制后台网页,此时在台式机B上打开网址localhost:8090
就会进入gitlab的后台管理网页,但由于gitlab启动速度较慢,因此可能要在启动后等待一段时间才能成功访问对应网页,但一般不会超过5分钟。
443端口用于邮件发送,如果只是私人使用,那不开启邮件验证也是无所谓的,可选。
虚拟机D的22接口用于ssh访问,也就是正式通过git操作拉取和上传的端口,这里配置的台式机10022接口即为访问gitlab传输服务所需要访问的接口。
2.3 配置gitlab网页
在台式机B上打开网址localhost:8090
就会进入gitlab的后台管理网页,但由于gitlab启动速度较慢,因此可能要在启动后等待一段时间才能成功访问对应网页,但一般不会超过5分钟。
初次登陆用户为root,密码可以在gitlab/config/initial_root_password
中找到。
登录后点击左上角的用户头像(默认是白球),然后选择Perferences
,在左侧选择Perferences
,然后在右边往下翻,设置语言为简体中文。保存设置并刷新网页。
在左侧选择密码,修改root用户密码。
点击左下角的Admin area
,选择用户,即可创建自己平时使用的用户。创建时无法直接设置密码,但是创建完后可以直接编辑用户,然后设置密码,这样就不需要外发邮件验证了。
2.3 配置gitlab配置文件
进入gitlab/config/gitlab.rb
,用编辑器打开,修改配置内容。
找到external_url
并取消注释,配置为external_url 'http://你的域名'
,此处的域名为云服务器C的域名,前面必须加上http://
,否则docker会无限崩溃重启。
找到gitlab_rails
并取消注释,配置为gitlab_rails['gitlab_shell_ssh_port'] = 10022
10022设置为台式机B上对应虚拟机D的22端口的端口,但主要注意的是,实际使用时这个端口实际上是外网访问云服务器C时,云服务器C对应台式机B的10022端口的转发端口。但因为gitlab会自动生成根据台式机B确定的项目ssh地址,因此复制出来的地址是带有10022的,出于无需对链接手动修改的简便考虑,在云服务器C与台式机B之间的端口穿透使用相同的端口号,即10022对应10022。
完成修改配置后,用程序ui或者命令重启该docker,等待五分钟,如果能够成功进入8090端口的管理页面,代表成功。
3. frp端口转发
在台式机B与云服务器C上搭建frp端口穿透的服务端与客户端。
frp使用方式详见:架设游戏私服——内网穿透工具frp
此处使用时对TCP和UDP的443与10022都进行了同步转发。
因为我这里不需要考虑外网访问控制台的需求,所以没有对8090端口进行转发。
4. ssh密钥配置
首先在笔记本A环境下安装git,具体过程请搜索其它教程,完成本地版git的安装,与本地邮箱和用户名配置。
然后,在windows系统的搜索中搜索Git Bash,然后打开进入。
在Git Bash中输入:
ssh-keygen -t rsa -C "你的邮箱地址"
所有选项都直接回车即可,直到全部完成。
然后查看公钥内容:
cat ~/.ssh/id_rsa.pub
将打印出的以ssh-rsa开头的文本全部复制。
用你平时要用的用户在台式机B上登录gitlab后台网页,点击用户头像,然后选择编辑个人资料
,在SSH密钥
中添加你刚刚复制的密钥到你的账户。
5. 运行
用你的常用账户在台式机B的gitlab后台页面上创建项目,进入项目后点击代码
,然后复制SSH克隆地址。
保证frp的客户端与服务端已经正常启动,此时你应该可以在笔记本A上使用刚刚复制的SSH克隆地址运行git clone
命令以及一系列其它的git操作了。
踩了一整天坑之后,祝大家可以比我更加顺利吧【黑眼圈的疲惫眼神