如何使用Gitlab搭建属于自己的代码管理平台

大家好,我是Mandy。今天分享的主题内容是如何使用GitLab搭建属于自己的代码管理平台。

为什么会单独分享这篇文章呢,相信在很多的开发同学任职的公司中,都用到了gitlab来做代码管理平台,同时结合GitLab的一些自动化功能,实现devops的功能。

GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它使用Ruby语言写成。后来,一些部分用Go语言重写。截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者。GitLab被IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O'ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等组织使用。

GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。同时官方也提供了免费版本,可以支持独立安装,也可以支持直接使用官方搭建的web服务。

与GitLab同类的产品也很多,例如国外微软旗下的GitHub,国内的Gitee都属于同类的代码管理平台,同时这些平台也结合了一些企业开发相关的功能。例如项目任务管理、项目自动化构建发布等等功能。

使用GitHub的同学应该知道,GitHub属于国外的网站在访问上经常遇到无法访问或者访问较慢的情况,并且个人是没法直接创建私有仓库,你只能通过创建公开仓库,对于有私有仓库的需求就需要付费使用并且费用还不算低。

对于Gitee来说,属于国内的网站避免了访问的问题,但Gitee是开发部分免费功能,其他的功能是需要收费使用。

基于上述的一些原因,企业也选择GitLab来搭建代码管理平台,同时里面的一些自动化功能也是完全不亚于GitHub、Gitee。对于个人开发者使用GitLab,不仅能够管理自己的代码,同时也能学到GitLab与其他的系统实现一些自动化功能,这将是一个不错的选择。

如何搭建

接下来,我将全面的演示如何在Linux上搭建GitLab。整体来说是非常的简单,整篇文章都是采用Docker来搭建,毕竟现在Docker的使用不管是个人还是企业都是非常主流的技术栈。

这里要特别的说明一下,强烈建议你选择一个高配置的服务器来搭建GitLab,在我个人的测试过程中发现GitLab是非常消耗内存,基本搭建好GitLab就会占用4G的内存,如果你只是在本地搭建用作学习,应该是完全没问题的,毕竟个人的电脑应该没有低于4G内存大小的计算机。

检索官方镜像并拉取到本地

通过docker search xxx可以查找Docker官方镜像中,关于GitLab的镜像,你会看到如下很多的镜像。有的是一些插件,有的是基于官方镜像构建的镜像。这里还是强烈推荐直接使用官方提供的GitLab镜像。

shell 复制代码
# 查找gitlab镜像
docker search gitlab
[root@VM-4-9-centos ~]# docker search gitlab
NAME                                     DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
bitnami/gitlab-runner                                                                     35
bitnami/gitlab-runner-helper                                                              3
alpinelinux/gitlab-runner-helper         Helper image container gitlab-runner-helper ...   4
rapidfort/gitlab-ce                                                                       12
okteto/gitlab                                                                             2
alpinelinux/gitlab-runner                Alpine Linux gitlab-runner (supports more ar...   5
drud/gitlab-ce                                                                            18
accurics/gitlab-connector                                                                 0
domjudge/gitlabci                                                                         0
wodby/gitlab                             Alpine-based GitLab CE container image           0
ustclug/gitlab                           Dockrized GitLab used by LUG@USTC                0
alpinelinux/gitlab                       Alpine Linux based Gitlab image                  8
itisfoundation/gitlab-runner-docker                                                       0
pnnlmiscscripts/gitlab-runner-operator                                                    0
jitesoft/gitlab-ci-runner                  Image inheriting from the gitlab runner. I...   0
vulhub/gitlab                                                                             0
alpinelinux/gitlab-shell                 Alpine Linux based gitlab-shell image, provi...   1
wodby/gitlab-nginx                       Nginx for GitLab CE container image              0
corpusops/gitlabtools                    https://github.com/corpusops/docker-gitlabto...   0
vulhub/gitlab-cve-2016-9086              gitlab cve-2016-9086                             0                    [OK]
drud/gitlab-backups                                                                       0
gromacs/gitlab-runner                                                                     0
wodby/gitlab-runner                                                                       0
avenga/gitlab-job                                                                         0
osuosl/gitlab-runner-helper                                                               0

接下来拉取官方镜像到本地,直接拉取最新的镜像。

shell 复制代码
docker pull gitlab/gitlab-ce:latest

拉取好镜像之后,可以查看本地是否拉取到镜像。这里使用docker images查看本地的镜像有哪些,下面就可以看到gitlab/gitlab-ce的镜像地址,表示我们已经成功拉取到本地。

shel 复制代码
[root@VM-4-9-centos ~]# docker images
REPOSITORY              TAG       IMAGE ID       CREATED         SIZE
gitlab/gitlab-ce        latest    df5003a3217c   2 days ago      2.86GB
zmister/mrdoc           v6        f4973a0fcd4b   3 months ago    1.34GB
postgres                15.2      bf700010ce28   6 months ago    379MB
openspug/spug-service   latest    db1e45c81bec   7 months ago    593MB
surveyking/surveyking   latest    7445aa54d4c4   12 months ago   157MB
mariadb                 10.8.2    51adad759c74   21 months ago   414MB

启动镜像容器

拉取到镜像之后,就可以基于镜像在本地启动一个GitLab容器。这里要说明一点,你再创建容器时,一定要做磁盘挂载和端口映射。不过磁盘挂载很可能容器删除导致数据丢失,端口映射是为了通过宿主机的访问达到访问容器内部的GitLab服务,否则是没法直接访问容器内的服务。

shel 复制代码
# 启动容器
docker run \
 -itd  \
 -p 9981:80 \
 -p 9922:22 \
 -v /opt/gitlab/etc:/etc/gitlab  \
 -v /opt/gitlab/log:/var/log/gitlab \
 -v /opt/gitlab/opt:/var/opt/gitlab \
 --restart always \
 --privileged=true \
 --name gitlab \
 gitlab/gitlab-ce

上述命令主要的作用是:

1、 run:启动容器命令,这是Docker自带的命令,创建容器时必须使用该命令才能创建容器。

2、-itd:-i参数是以交互模式运行容器,通常与 -t 同时使用命令解释;-t参数是为容器重新分配一个伪输入终端,通常与 -i 同时使用;-d参数是后台运行容器,并返回容器id。

3、-p:是做端口映射,第一个-p是为了将容器内的web端口映射宿主机的端口,这样就能通过宿主机的端口直接访问到容器内的端口,也就是说后面通过浏览器访问GitLab就需要该端口;第二个-p是为了将容器内22端口映射至宿主机9922端口,这是访问ssh的端口,例如后面使用命令git push代码到GitLab会用到该协议。

4、-v:该参数为了将宿主机的目录和容器内的目录做一个映射,容器内的文件和宿主机实现同步,防止数据丢失,哪怕是后续你容器被删掉,宿主机的文件保持存在,数据就不会丢失。

5、--restart:保持容器自动启动。比如你关闭了Docker服务,容器也会随着退出,再次启动Docker服务时,容器会自动启动,不需要你手动去启动容器。

6、--privileged:该参数是为了让容器内获取到宿主机的root权限。

7、--name:该参数是为了给容器取一个名称,记住这个名称要不能重复。例如你本地有一个名字叫做A的容器,就不能取同样名称的容器。

8、gitlab/gitlab-ce:该参数是表示容器从哪一个镜像中创建,前面我们拉取了官方镜像到本地仓库,因此会自动从本地的镜像中去创建。如果你没拉取镜像到本地,此时会自动去Docker官方镜像仓库中拉取到本地。

此时,我们的GitLab容器已经创建完毕,但要访问容器,还需要你修改一些其他的配置。这里推荐直接在容器中去修改配置,如果直接在宿主机修改,可能出现同步到容器中存在延迟,导致访问出现问题。

修改配置

在修改配置之前,你需要明确如下几点:

1、访问方式:如果你是想通过域名的方式访问,你需要解析一个域名,如果不需要直接使用配置成宿主机的IP地址。我这里假设域名是a.baidu.com

2、ssh方式:ssh适用于代码同步,这里也需要配置成域名或者IP的方式。

she 复制代码
#第一步是进入到容器内部,gitlab可以写成你容器的id
docker exec -it gitlab /bin/bash
 
#修改gitlab.rb的配置文件
vi /etc/gitlab/gitlab.rb
 
#gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://192.168.1.194'
或者是
external_url 'a.baidu.com'

#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.1.194'

#ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922

修改好之后,在容器中重启gitlab-ctl reconfigure配置,并且使用gitlab-ctl restart来重启GitLab服务。此时就可以直接使用IP的方式访问GitLab,如果你配置的是域名,还需要在Linux系统中使用域名配置,做端口代理访问到GitLab服务。假设你用的是NGINX做web服务,你需要做如下的配置。

shell 复制代码
server{
	listen 80;
	server_name a.baidu.com;
	location / {
		proxy_pass http://127.0.0.1:9981;
	}
}

配置好域名之后,重启NGINX服务nginx -s reload就可以通过域名的方式访问。

注意事项

在网上有的文章会提到如下的配置操作:

shell 复制代码
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

gitlab:
  host: 192.168.1.194
  port: 9980
  https: false

但实际测试下来,并非一定要做这一步操作。在你上面修改好配置之后,执行``gitlab-ctl reconfigure命令重启后,上面的gitlab.yml`文件会自动帮你同步配置。

账号修改

当你能访问搭建好的GitLab服务,并且能够访问,但一开始会让你进行登录注册,GitLab默认的超级管理员账号是root,此时是需要你修改默认的密码。

shell 复制代码
# 进入容器内部
docker exec -it gitlab /bin/bash
 
# 进入控制台
gitlab-rails console -e production
 
# 查询id为1的用户,id为1的用户是超级管理员
user = User.where(id:1).first
# 修改密码为gitlab001
user.password='gitlab001'
# 保存
user.save!
# 退出
exit

此时你使用root账号,并且密码是gitlab001就可以正常访问了。

自此GitL按服务就算搭建完成,你就可以直接使用了。更多的功能,你也可以直接进行摸索使用。

相关链接

一、GitHub拥有28kstar,Go开源的多文件存储神器

二、强烈推荐使用的Markdown编辑器工具

三、又遇到一款神仙级别的PDD绘图工具

四、使用Go开源的一款性能监控软件

相关推荐
BUTCHER517 小时前
GitLab SSH 密钥配置
运维·ssh·gitlab
明月心95219 小时前
GitLab使用
gitlab
明月心9522 天前
gitlab pull requets
gitlab
BUTCHER52 天前
GitLab基本设置
gitlab
张小凡vip2 天前
Kubernetes---gitlab的ci/cd发布基于k8s的项目示例参考
ci/cd·kubernetes·gitlab
cuijiecheng20183 天前
GitLab创建项目
gitlab
_运维那些事儿5 天前
GitLabCI/CD语法
linux·服务器·git·ci/cd·gitlab·运维开发·devops
_运维那些事儿5 天前
GitLab&Jenkins
运维·ci/cd·gitlab·jenkins·devops
Jeacean6 天前
gitlab 仓库所有分支开启分支保护脚本
gitlab
nhfc996 天前
Gitlab备份且提交Windows服务器数据
服务器·windows·gitlab