搭建自己的代码托管平台gitlab

Github作为一个免费好用的代码托管平台,在一定程度上对开源社区的发展也起到了非常积极的作用。

熟练的使用git和github已经成为了每个程序员必备的技能。git可以使我们更好的管理和维护自己的代码,可以使团队成员之间以更高效的方式进行工作,github作为一个免费好用的代码托管平台,在一定程度上对开源社区的发展也起到了非常积极的作用。

​ 然而,出于各种原因,比如,github对中国用户及其不友好的网速、团队私有的项目不想放在第三方服务器上抑或是无法访问公网的内网环境,搭建自己的私有代码平台也成了一部分开发人员的选择。针对这种需求,目前也有像gitWeb、gerrit、gitlab之类的解决方案,这几种解决方案各有优劣,这里为大家介绍的是其中的佼佼者gitlab,也是我们公司内部正在使用的一个代码管理平台,功能十分完善,页面也和github十分相似,如果对github使用的熟悉,对这个也不会感到陌生。

购买服务器

为了方便在互联网环境下使用,这里我们选择了腾讯云轻量服务器来搭建gitlab服务器。

为什么使用腾讯云轻量服务器,首先是因为其性价比非常的高,对于新用户,1核2G的配置只需要99元一年,简直是主机界的一股清流,其次,对使用者也很友好,提供了各种各样的包含docker在内的各种预置镜像,能很快上手使用。

首先,我们需要购买一台腾讯云轻量服务器,点击这里打开购买页面,选择需要的配置、以及地域和时长,镜像选择Docker CE 19.03.9,点击立即购买,等支付完毕后,我们就拥有了自己的第一个云服务器。

新用户购买页面

为了方便使用,还需要注册一个域名,然后通过域名来访问我们的gitlab服务器。目前由于大陆的政策原因,使用域名指向香港的服务器需要ICP备案(腾讯云会协助进行备案),备案时间通常在十天左右。如果等不及的话,可以购买轻量云的香港节点进行使用,使用香港节点不需要进行备案。购买香港服务器以及购买域名和设置解析等内容请参考这里。我已经注册好了一个域名lixf.ink,并将gitlab.lixf.ink指向了服务器的IP。

购买成功后,进入到控制台,在轻量应用服务器页面,就可以看到我们有了一台运行中的轻量服务器

轻量服务器

第一次使用需要重置一下密码,这一步点击上图进入到概要界面,就可以看到相应的选项。重置密码以后要记住自己所设置的密码。由于篇幅限制,这里不再细说。

点击上图中的【登录】按钮,会弹出下图这样的一个黑色对话框,我们后面的命令将直接在这个对话框里输入,无需再安装第三方的客户端。

自带web终端

安装gitlab

现在我们已经有了自己的轻量服务器,而且由于在购买的时候,我们选择了Docker CE作为镜像,因此,此时的服务器里,已经有了一个完整的docker环境,下面我们就可以直接以容器的方式快速安装gitlab服务器。

首先,需要为gitlab的数据创建一个目录,用来存储gitlab在运行过程中产生的数据。

1
sudo mkdir -p /data/gitlab  #/data/gitlab可以修改成合适的目录

然后,通过运行下面命令,就可以启动gitlab了。注意要把gitlab.lixf.ink换成自己的域名。

1
2
3
4
5
6
7
8
9
sudo docker run --detach 
  --hostname gitlab.lixf.ink 
  --publish 443:443 --publish 80:80 --publish 23:22 
  --name gitlab 
  --restart always 
  --volume /data/gitlab/config:/etc/gitlab 
  --volume /data/gitlab/logs:/var/log/gitlab 
  --volume /data/gitlab/data:/var/opt/gitlab 
  gitlab/gitlab-ce:latest

第一次启动时,由于gitlab内部需要初始化一些数据,因此需要等待几分钟才能安装完毕,此时可以输入下面命令查看安装过程中的日志

1
sudo docker logs -f gitlab

或者也可以通过watch命令来监控gitlab是否启动成功

1
sudo watch docker ps

当看到下图中的healthy时,说明gitlab已经成功运行了

安装正常

此时,用浏览器访问 gitlab.lixf.ink,就可以访问到我们自己的gitlab了。

gitlab登录页面

重置管理员密码

从上图中看到gitlab已经正确安装了,此时由于我们还不知道gitlab管理员账号和密码,需要回到黑窗口页面(终端),接着设置管理员的密码。

如果首页上显示了设置管理员密码的输入框,我们在这个界面上直接设置管理员密码,无需下面的过程。

输入下面命令进入到gitlab容器内部的终端

1
sudo docker exec -it gitlab /bin/bash

然后用下面命令进入 到gitlab的rails控制台

1
gitlab-rails console #这一步比较慢,大概在1分钟左右,请耐心等待

当打开控制台后依次输入下面命令来重置管理员账号和密码。

user=User.find_by_username 'root'
user.password="88888888"   #这里请换成一个复杂的密码
user.save!

设置过程如下图所示

重置密码

密码设置成功以后,就可以返回到gitlab登录页面登录了。下面是登录成功的页面。

gitlab首页

创建并上传第一个项目

点击导航栏中间的+号按钮,依次选择【New Project】-> 【Create blank project】,进入到创建项目页面,然后填写相应的信息,点击Create project,即可创建新项目。

创建新项目

创建成功后会自动跳转到项目主页

项目主页

然后就可以上传代码了。新创建的项目的首页已经提示我们该怎么初始化并上传我们的代码。我们只需要跟着操作就可以了。

第一步,先配置本地git的用户和邮箱

1
2
git config --global user.name "Administrator" #换成自己的用户名
git config --global user.email "admin@example.com" #换成自己的邮箱

第二步,拉取仓库,添加文件并提交代码

1
2
3
4
5
6
7
git clone http://gitlab.lixf.ink/root/hellogitlab.git
cd hellogitlab
git switch -c master
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

下面是在我电脑上的运行结果

提交代码

代码提交成功以后,再次刷新项目主页,就可以看到我们提交的代码了

项目主页2

我这里直接使用了管理员用户创建并上传项目,实际使用过程中,最好单独创建一个普通用户来进行相应的操作。

配置HTTPS

相信有小伙伴看出来了,我们上面使用的是HTTP协议,HTTP协议是一种不安全的协议,因此,这里我们配置成HTTPS,让我们的代码仓库更安全。

gitlab内部集成了letsencrypt,因此,这里只需要启用letsencrypt,并进行一些必要的配置

用vim打开/data/gitlab/config/gitlab.rb,修改以下内容

  1. 在32行左右,将external_url前面的#删掉,并在单引号中填写gitlab服务器的https地址,例如https://gitlab.lixf.ink
  2. 在2235行左右,修改下面几项
    letsencrypt['enable'] = true #删除前面的#号,并将值修改为true
    letsencrypt['contact_emails'] = ['foo@email.com']  #删除前面的#号,修改为自己的邮箱
    letsencrypt['auto_renew'] = true #删除前面的#号

然后,执行下面命令重启gitlab容器

sudo docker restart gitlab

等容器重启之后,gitlab就会通过letsencrypt自动签发免费的HTTPS证书,等证书签发成功(大概3分钟左右),就可以通过https://gitlab.lixf.ink访问我们的代码仓库了。此时,地址栏旁边也会显示一把的小锁,代表这是一个安全的网址。

https

配置SSH为22端口

前面在启动Docker容器的时候,指定了 -p 23:22参数,将gitlab容器的22端口映射到了宿主机的端口上。这个是因为宿主机的22端口已经被sshd服务给占用了,如果不将22端口映射到别的端口上,gitlab容器将无法启动。但是这么做,又会造成我们无法正常的通过ssh协议来提交和拉取代码,这会给习惯用ssh协议的小伙伴带来不必要的麻烦。

为了解决这个问题,我们需要修改sshd服务的端口。由于篇幅限制,这里不具体讲怎么修改sshd端口,详情请参考linux禁止root用户远程登录,并修改ssh端口这篇博客来进行修改。由于sshd是我们通过终端(包括轻量云自带的这个黑窗口)连接服务器所依赖的一个服务,修改了其端口以后,将会造成轻量云自带的终端无法正常连接到服务器,因此,修改了sshd端口之后,后面就只能用终端软件来连接服务器进行操作。另外要注意,修改了端口之后,把修改后的端口添加到轻量云的防火墙中。

如果使用的是window10系统,可以使用自带的power shell或者cmd来连接腾讯云服务器。

打开powershell窗口,输入下面命令然后根据提示输入密码连接到服务器

1
ssh -p 24 root@1.1.1.1  # 将24端口换成sshd服务修改后的端口,将1.1.1.1换成轻量云的ip

连接到服务器以后,需要把原来的容器删除掉,然后重新执行一次启动的命令

1
2
3
4
5
6
7
8
9
10
11
sudo docker rm -f gitlab

sudo docker run --detach 
  --hostname gitlab.lixf.ink 
  --publish 443:443 --publish 80:80 --publish 22:22 
  --name gitlab 
  --restart always 
  --volume /data/gitlab/config:/etc/gitlab 
  --volume /data/gitlab/logs:/var/log/gitlab 
  --volume /data/gitlab/data:/var/opt/gitlab 
  gitlab/gitlab-ce:latest

因为我们在启动gitlab的时候,我们的配置文件和数据目录等都挂载了宿主机的/data/gitlab目录上,因此,即使我们删除并重新启动了一个新的容器,我们前面的配置和上传的项目依然有效。

至此,一个支持HTTPS和SSH协议的gitlab搭建完成了。

小结

本教程借助了腾讯云轻量服务器和gitlab提供的docker镜像快速搭建了一个可用的gitlab代码仓库,并且通过进一步的配置,使搭建的gitlab正确的支持了HTTPS协议以及SSH协议。在搭建的过程中,由于腾讯轻量云自带了Docker环境,使我们免去了自行搭建Docker环境的步骤。而且,轻量云自带的Docker环境已经将docker的镜像源设置为了腾讯云自带的Docker镜像源,拉取gitlab镜像的速度也是非常快,也节省了等待拉取镜像的时间。

本文来自开发者投稿,不代表腾讯云立场,转载请注明出处:https://computeinit.com/archives/4009

发表评论

登录后才能评论
交流群