同福

使用gitlab/gitlab-ce:12.1.3-ce.0镜像安装GitLab服务

介绍

介绍

前面福哥带着大家学会了使用k8s集群部署整套web服务(包括PHP环境和MySQL数据库等等)的方法。今天我们来学学Git的使用,Git是一款版本控制软件,用来管理项目文件的版本,是每一个研发人员每天都要使用的软件。

那么什么是版本控制呢?版本控制就是把你编写的程序文件的每个阶段都记录下来再打上一个编号,如果你在编写程序的时候发现走到了死胡同里出不来了,可以通过退回到历史的某一个时间点的版本重新来过!简单来说版本控制就是后悔药,当你发现“我错了”的时候可以选择“重来”!

GitLab是一款实现Git功能的管理软件,大部分团队都会选择使用GitLab来作为Git服务器端,今天我们就来学习GitLab软件的安装使用~

注意:涉及到在多个服务器上操作的情况,那些需要执行命令行命令的操作,福哥会附上操作截图,大家可以根据截图的主机名称判断是在哪个服务器操作的;那些需要在浏览器上面进行的操作,福哥会附上操作截图,大家可以根据浏览器上的IP地址判断是在哪个服务器操作的!!!

Git和GitLab

Git和GitLab有什么区别?

Git是一个开源公共软件,它支持最基础最基本最核心的版本控制功能,它是免费的!

GitLab是一个基于Git封装的、有用户界面的、功能丰富的版本控制管理软件,它除了可以提供Git的所有功能之外还增加很多CI/CD(持续集成)、用户管理等等的功能,它不是免费的!

GitLab本身不是免费的,但是我们可以用它的社区版本GitLab CE来体验它的功能~

环境

镜像版本
gitlab/gitlab-ce:12.1.3-ce.0
操作系统CentOS 7 x86_64 2009
服务器TFCentOS7x64、TFCentOS7x64Node1
IP192.168.168.68、192.168.168.69
端口1080、1022

安装

Dockerfile

镜像

福哥选择的是gitlab/gitlab-ce:12.1.3-ce.0这个基础镜像。

现在Docker Hub不能用了,福哥也不能给大家发链接了,唉~

拉取镜像gitlab/gitlab-ce:12.1.3-ce.0并且添加到registry.tongfu.net:5000私有仓库里面。

docker pull gitlab/gitlab-ce:12.1.3-ce.0
docker tag gitlab/gitlab-ce:12.1.3-ce.0 registry.tongfu.net:5000/gitlab/gitlab-ce:12.1.3-ce.0
docker rmi gitlab/gitlab-ce:12.1.3-ce.0
docker images | grep 'gitlab/gitlab-ce'

555fe5d6bee23a9d54fdc8586b4f2c22.png

启动容器

因为端口80被nginx占用了,所以福哥选择的是1080这个端口!

因为端口22是SSH端口,所以福哥选择了1022这个端口!

docker run -tid \
--name tfgitlab \
-h tfgitlab \
--net tfnet \
-p 1080:80 \
-p 1022:22 \
registry.tongfu.net:5000/gitlab/gitlab-ce:12.1.3-ce.0

2ca631d0f5bcf7fb5c798a2372a2fd8d.png

安装git客户端

这个git客户端直接通过yum安装就可以了。注意两台服务器都要操作哦~

yum -y install git
git --version

7a2179b83424c7f097bd25de719169f9.png7dfbf61cada0b4778f06a828e1abea98.png

使用

初始化

打开浏览器输入网址http://192.168.168.68:1080/,可以看到第一步就是让我们设置一个超级管理员密码!

7478312a45285a2be73948987c2b774d.png

如果看到是“502 Whoops, GitLab is taking too much time to respond.”错误就再等一会儿!

用root登录到gitlab。

f38c2d02f206b17cc2a7c91e5fa09b9d.png

登录后进入后台首页,可以看到四个操作Create a project(创建项目)、Create a group(创建分组)、Add people(添加用户)和Configure Gitlab(配置系统)。

11afffbfbdcb898e1d17ab826ff611e8.png

我们先进入Settings里面把语言改成中文的!

de8f71c1e43457fb3cf352dcefde73d0.png333d981b177d8bcc267625fefc1e3b12.png1d86597eee483328143f32aa2fa1422c.png

改完之后点击左上角的“GitLab”菜单回到首页,发现原来只是部分内容变成了中文啊!就这样吧~

6f523da3cbcf7423970279ddcf32888a.png

SSH授权

默认情况下我们操作gitlab里面的项目代码是需要账号和密码的。为了省去没完没了地输入密码,我们可以配置一个SSH授权,这样再操作gitlab的项目就不要输入密码了。注意两台服务器都要操作哦~

在服务器上输入如下命令创建一个公钥。

ssh-keygen -o -t ed25519 -b 4096

3f180b0fa5a95a0a59e6de477de0a12f.png

8a403ccac3afb58635018c22059ec978.png

把公钥内容复制出来。

cat /root/.ssh/id_ed25519.pub

在用户 > 设置 > SSH密钥里,把刚刚的id_ed25519.pub的内容粘贴到密钥输入框里。

f9dee11b5c7c945a8cc1b0f985c160bc.png点击“添加密钥”完成SSH授权!

42c9e7e26db1c9a599ac0262dd2a8cee.png

把TFCentOS7x64Node1也加进来吧~

53f7e99cf358e49c8867cf7b29eeec99.png

设置时区

刚刚添加SSH授权的时候,发现添加时间居然是下午1点多,怎么可能?仔细一想,应该是默认UTC时区的问题。那么我们把时区改一下吧~

切入到tfgitlab容器里面,打开/etc/gitlab/gitlab.rb配置文件。

vi /etc/gitlab/gitlab.rb

搜索“gitlab_rails['time_zone']”项目,把“UTC”改成“Asia/Shanghai”并去掉前面的“#”。

gitlab_rails['time_zone'] = 'Asia/Shanghai'

cc97117523c153588fefc19e7ad6202c.png

重新配置gitlab服务。

gitlab-ctl reconfigure

重新启动gitlab服务 。

gitlab-ctl restart

等待gitlab起来之后,再回到SSH授权的界面查看一下时间,这次对了~

3dcdba98e71bc369f2d3b159ada65e13.png

创建项目

点击左上角GitLab图标回到首页,点击“Create a project”进入创建项目界面。项目名称“tfphp”,勾选“Initialize repository with a README”选项。

f0253503b19c3318cb91bfc02fce4bf9.png

点击“Create project”按钮创建项目。

7bb1c877633f310b841fc32d74b112a1.png

代码管理

克隆项目代码

创建/tongfu.net/data/git目录并切进去。注意两台服务器都要操作哦~

mkdir /tongfu.net/data/git
cd /tongfu.net/data/git

02411c045827b189637c79eb72a511ff.png

21898cdc3d4053083f3bccb6ead78b1a.png

在tfphp项目首页,点击“克隆”按钮,点击“使用 SSH 克隆”下面的输入框右边的复制按钮复制克隆地址。

bcf637f629297762e4113937da35e3fd.png

正常情况下把tfgitlab改成192.168.168.68,就可以克隆tfphp下面的代码了。

git clone git@192.168.168.68:root/tfphp.git

因为福哥使用的是1022这个端口作为tfgitlab的服务端口,所以克隆命令稍微有点不一样。

git clone ssh://git@192.168.168.68:1022/root/tfphp.git

93eedd3f205bf68be661f421c4222c51.png

切到tfphp项目里面可以看到只有一个文件。

cd tfphp/
ls

e82e2382c3cb72e44394ebb24b5a5459.png

复制文件

现在可以把tfphp服务用到的文件全部复制过来了!

rsync -av /tongfu.net/data/docker/data/tfphp/ ./

89afb29e0988518c6243ea14e0898987.png

添加文件

通过git add命令把这些文件都添加进项目里来。

git add config/
git add html/
git add res/

383b078432dfc83e2c051edadd1f7671.png

使用git status命令查看一共有多少文件被添加进来了。

git status

9df1b7e9237a1c7d19d3d4638075beb8.png

提交代码

现在使用git commit命令将改动提交,必须填写改动说明。

git commit -m "the first version"

d055b8aab12f13fd0e6716546fc3e8b4.png

推送代码

现在使用git push命令将改动推到gitlab上去。

git push

e17cb745d74f630f4268e98ab7763637.png

查看项目

现在回到gitlab上面,看看我们刚刚通过git客户端提交的改动是不是已经存到gitlab上面了!

458b1f1180239e5574a8d5cadc2906f8.png

没有问题,刚刚提交的文件已经在tfphp项目里了!

再次克隆项目代码

现在gitlab里的tfphp项目的代码是最新的了,它和TFCentOS7x64Node1上面的代码是一样的,但是TFCentOS7x64上面的代码还是docker-compose环境的旧版本的。

福哥现在去TFCentOS7x64上面把最新的tfphp项目的代码克隆下来,然后再复制到docker-compose环境里的tfphp服务的数据目录下。

git clone ssh://git@192.168.168.68:1022/root/tfphp.git

c4b0f5eb4a46aa979fd6601a68544d38.png

cd tfphp/
ls
rsync -av --exclude=.git ./ /tongfu.net/data/docker/data/tfphp/

b8115535056f4264482064e057aa8007.png

优化

内存占用

这个gitlab官方推荐的最小配置是双核+4G内存,这个也太难了!虽说内存便宜了。其实gitlab有非常强大的CI/CD(持续集成)能力,只不过我们只是想用它的最基本的git管理功能。为了减少它的内存占用过高的问题,只能去给gitlab减配了!

查看内存使用情况,现在可用内存是800M多,快用光了~

ae9ab489c78733300cf5dfd5086a770d.png

切入gitlab容器里面,打开/etc/gitlab/gitlab.rb配置文件。

vi /etc/gitlab/gitlab.rb

把配置文件/etc/gitlab/gitlab.rb里面的如下项目修改一下!注意项目前面有“#”的要把“#”去掉!

postgresql['shared_buffers'] = "64MB"                  # 256 to 64
postgresql['max_worker_processes'] = 1                 # 8 to 1
nginx['worker_processes'] = 1                          # 4 to 1
unicorn['worker_processes'] = 1                        # 2 to 1
sidekiq['concurrency'] = 1                             # 25 to 1
unicorn['worker_memory_limit_min'] = "120 * 1 << 20"   # 400 to 120
unicorn['worker_memory_limit_max'] = "180 * 1 << 20"   # 650 to 180
prometheus_monitoring['enable'] = false                # true to false

重新配置gitlab。

gitlab-ctl reconfigure

重新启动gitlab。

gitlab-ctl restart

等待页面可以访问之后,再次查看内存占用情况,现在空闲内存1.6G,相比较减配之前的gitlab节省了大约800M左右,就这样吧!

d838b9b07e4b700b5b22c8c3d148ca69.png

总结

今天福哥带着大家学习了GitLab软件的安装使用,大家可以使用GitLab管理自己的项目文件了。

后面福哥会单独讲解如何使用Git来管理我们的项目文件我们的程序代码,包括分支的使用、标签的使用、合并代码、拉取代码、推送代码等等Git的操作,敬请期待~~