背景
在做个人项目开发的时候,经常会遇到多地编写互相同步版本的情况,时间久了版本会出现混乱情况。gitlab是一个基于git的代码仓库管理的开源项目,个人也能够非常简便地搭建自己的私有代码管理仓库,用于个人项目的版本管理。在国内可以使用的版本的gitlab有 社区版gitlab-ce、gitlab-ee以及极狐版gitlab-jh。gitlab-ce是向全球提供的免费社区版本;gitlab-ee是企业版,提供比社区版更多的功能和服务;gitlab-jh是国内极狐提供的版本,其是以gitlab-ce和gitlab-ee为上游,在合入上游版本的基础上做一些面向中国用户的定制化功能,jh版本有基础款和专业版,基础版是免费使用的,其基准是gitlab-ce,专业版面向企业以订阅的形式收费。
本人在搭建自己的私人仓库时,选用了gitlab-jh版本。主要原因是当前的jh版本官方提供了比较详细的中文文档支持,对于搭建上手、后续维护来说更加容易上手,且其也是基于gitlab-ce的版本,有社区及企业维护,稳定性相对可靠(个人见解),再加上版本获取相对来说比较方便,极狐官网镜像源就能够获取到版本。
在搭建gitlab仓库时,有一些经验以及安装方式的选择在这里分享下
目标
1.gitlab搭建完成,能够在局域网内访问仓库、能够用git远程仓库
2.安装方式选择:gitlab-jh共有3中安装方式:官方Linux安装包(Omnibus Gitlab)、Helm chart(在K8S上安装)、docker版,本人也对不同的安装方式做了一些对比选择,在这里分享。
过程
Linux安装包版本安装
Linux安装包版本需要安装一些依赖包,比如curl、policycoreutils-python、openssh以及perl等。如果需要邮件推送还需要安装postfix。
具体的安装过程可参考极狐官网GitLab下载安装_GitLab最新中文官网免费版下载-极狐GitLab。本人的用于安装gitlab的环境是RedHatEnterprise7版本,关键过程如下:
1.安装和配置所需的依赖
在终端输入以下命令安装相关依赖:
sudo yum install -y curl policycoreutils-python openssh-server perl
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld
安装发送电子邮件通知软件postfix,这个是一个可选项,如果不需要在一些场景收到邮件就不需要安装,个人建议还是安装下,我收到过一些关于注册成功、新位置登录等关键动作的邮件,这些信息有助于我们了解当前gitlab的关键动作,对于一些安全性问题可以及时关注。安装的具体命令如下
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
我们也可以在安装完Gitlab后配置SMTP服务器来使用其他的发送电子邮件解决方案,如果本机上已经装有其他的电子邮件方案,可以在安装完后通过SMTP 配置 | 极狐GitLab该文档引导配置。
2.下载并安装极狐Gitlab
执行以下命令配置极狐Gitlab软件镜像源(如果想安装其他版本的gitlab可以下载对应版本的镜像源,阿里云和清华镜像源都有对应的软件包镜像)。
curl -fsSL https://get.gitlab.cn | /bin/bash
这条指令要注意的是,如果目标机和我一样是RHEL7版本的Linux系统,镜像源的list需要手动修改下,不然会报镜像源找不到的错误:
#1、修改yum配置文件
[wanchao@localhost ~]$ vim /etc/yum.repos.d/gitlab-jh.repo
#2、将全文中所有的“$releasever”字符串替换成“7”,因为我的系统centos7版本
#进入命令行模式
:%s/$releasever/7/g
#保存并退出
:wq
需要配置的原因是:RHEL7版本会将
r
e
l
e
a
s
e
v
e
r
这个环境变量识别为
"
7
s
e
r
v
e
r
"
,而镜像源地址中实际
releasever这个环境变量识别为"7server",而镜像源地址中实际
releasever这个环境变量识别为"7server",而镜像源地址中实际releasever的值是"7",所以会导致镜像源路径无法找到,手动替换下即可可参考我的另一篇博文RedHatEnterprise7配置阿里镜像-CSDN博客。
接下来就是正式的安装过程了,安装之前,如果是部署在公网IP下的那就需要配置正确的DNS域名服务器,可以通过域名直接访问我们自己配置的gitlab,如果是内网或者使用内网穿透技术来搭建的那指定URL为localhost即可。
有自己域名的安装指令:
sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-jh
内网的安装指令:
sudo EXTERNAL_URL="http://192.168.1.23" yum install -y gitlab-jh
或者,EXTERNAL_URL为目标机的IP地址。如果是内网穿透可以定义为"http://localhost:80",自动寻址目标机局域网IP。
执行以上命令后,需要等待一会时间,然后就安装完成啦:
3.登录极狐Gitlab
使用第二步的EXTERNAL_URL中配置的地址访问Gitlab,默认用户为root,安装中可以指定root用户的初始密码,如果未配置的话就使用系统随机生成的,随机密码一般生成在/etc/gitlab/initial_root_password文件中,可用cat命令查看密码。
用极狐官方提供的Docker镜像安装
极狐官方还提供了完整Gitlab完整环境的docker镜像,docker镜像版本的安装相比安装包版本要更为简单。
Giglab官方提供了3种安装Gitlab Docker的方法:
- Docker Engine安装
- Docker Compose安装
- Docker swarm安装
具体的安装方法可参考极狐GitLab Docker 镜像 | 极狐GitLab。我这边用Docker Engine的安装方式尝试安装了Gitlab Docker。具体步骤入下。
1.配置环境变量
export GITLAB_HOME=/srv/gitlab
将GITLAB_HOME环境变量加入到shell的配置中,这样可以应用在之后打开的终端中。可以在~/.bash_profile中增加GITLAB_HOME环境变量。
2.使用Docker Engine安装
使用以下命令安装Gitlab Docker
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
registry.gitlab.cn/omnibus/gitlab-jh:latest
其中,hostname像上述安装包安装中的EXTERNAL_URL一样,可配置为服务器局域网IP地址。
经过以上的命令,会自动下载并启动Gitlab容器,所有的Gitlab数据会存在GITLAB_HOME中,并且配置了系统重启自动启动Gitlab Docker。
这条命令执行后需要等待较长的时间安装和启动Gitlab,如果同构Web访问出现502报错,请稍等一段时间。可以通过安装日志查看进度:
sudo docker logs -f gitlab
root用户的初始密码查询命令如下:
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
以上就是Docker Engine方式安装Gitlab Docker。实际步骤只有1步。
安装方式选择
本人尝试安装了Linux安装包和Docker方式的Gitlab,是裸机运行还是容器运行也进行了一番对比选择。
经过亲测,在容器中运行和在裸机中运行,从CPU占用、内存占用以及关键动作运行耗时上,相差并不明显。docker运行只是比裸机运行多了docker进程,但是内存和CPU消耗相对来说不多。
那既然性能上相差不多,我们直接安装docker版本是不是就可以,即方便安装维护,可用性还好,服务挂了重启docker就可以。但是docker版本还是存在一些问题。
比如官方就提到,docker版本的稳定性上相对裸机运行会略低,因为其运行在容器上,除了gitlab本身的稳定性,还依赖于容器的稳定性,官方在docker安装方法中也列举了一些docker容器存在的已知问题:极狐GitLab Docker 镜像 | 极狐GitLab。
docker版还存在的另一个问题是不能在k8s环境中部署,否则会出现单点故障。因为Gitlab Docker包含了所有运行所需的环境,一个docker容器也是使用和管理一个git数据库,出现故障后也无法配置备份机制。当然这并不是说Gitlab本身不支持k8s环境,gitlab还可以支持Helm Chart方式部署,这种方式就是部署在k8s上的,他把gitlab的核心组件分为多个子chart,每个chart独立部署,这就保障了高可用性,每个子chart出现故障都可以独立备份重启。
那问题又来了,我为什么没有去尝试部署Helm Chart呢?因为Helm Chart吃资源。目前手上只有一台服务器,内存16G,16核CPU,用Omni方式安装就吃掉了10G的内存(当然这个可以通过配置降,实在是太吃内存了),Helm Chart的配置要求更加庞大,实在没敢去配;而且对于个人私有仓库而言,单点的Gitlab仓库足够用了,暂时不去折腾,等后续再购入更多的服务器,或者买云服务后再尝试Helm Chart方式,到时候也再贴下我的部署经验。
总结
本文主要介绍了两种私有Gitlab的部署方式已经部署方式选择,希望对大家搭建私有仓库有所帮助。
标签:gitlab,私有,Gitlab,仓库,版本,Docker,安装,docker From: https://blog.csdn.net/silentsea323/article/details/139566922