Gitlab搭建

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

Postfix支持Gitlab发信功能

1
yum -y install postfix

设置Postfix开机自启,并启动

1
2
systemctl enable postfix
systemctl start postfix

在Postfix安装期间,可能会出现配置屏幕。选择“Internet Site”并按Enter键。使用服务器的外部DNS作为“邮件名称”,然后按Enter键。如果出现其他屏幕,请继续按Enter键接受默认值。

gitlab-ce 是社区版,免费 gitlab-ee 是企业版,收费

1
2
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ce # 安装 GitLab

更改 https://gitlab.example.com 为您要访问GitLab实例的URL

如果提示连接超时,可以使用清华大学开源软件镜像站 进入该网站后,有详细的安装步骤,跟着安装即可。

这里介绍一下在CentOS中使用 清华大学开源软件镜像站安装

先还原yum源, 删掉Gitlab-ce源

1
2
ls -l /etc/yum.repos.d/ # 查看源配置项
mv /etc/yum.repos.d/gitlab_gitlab-ce.repo /etc/yum.repos.d/gitlab_gitlab-ce.repo.bak # 备份源配置项(也可以直接删除 rm)

新建/etc/yum.repos.d/gitlab-ce.repo,内容为

1
2
3
4
5
6
7
cat > /etc/yum.repos.d/gitlab-ce.repo <<'EOF'
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
EOF

再执行

1
2
3
4
yum makecache
yum -y install gitlab-ce          #自动安装最新版
yum -y install gitlab-ce-x.x.x    #安装指定版本
yum -y install gitlab-ce-12.0.4   #本次安装12.0.4,因为汉化包是12.0.4

启动命令

1
2
gitlab-ctl reconfigure # 首次启动也要用此命令。重新加载配置并启动
gitlab-ctl start # 启动

GitLab基本配置集中在/etc/gitlab/gitlab.rb文件, 每个参数的作用和配置请参考官网的配置说明. 需要注意的几个参数

1
2
3
4
external_url 'http://192.168.1.83' # clone时显示的地址,gitlab 的域名
# unicorn['listen'] = 'localhost'
# unicorn['port'] = 8080 #默认是8080端口
# nginx['listen_port'] = 80  # gitlab nginx 端口。默认端口为:80 

https://img.bwcxtech.com/img/20200928155736.png

https://img.bwcxtech.com/img/20200928155740.png

https://img.bwcxtech.com/img/20200928155745.png

1
2
gitlab-ctl stop # 先停止 GitLab 服务 
vi /etc/gitlab/gitlab.rb # 修改配置文件

进行任何改动后, 保存退出, 在命令行逐个输入以下命令使配置生效

启动数据库, 不然 reconfigure 报错

1
2
3
gitlab-ctl restart postgresql
gitlab-ctl reconfigure
gitlab-ctl start

当前版本信息

1
gitlab_version=$(cat /opt/gitlab/embedded/service/gitlab-rails/VERSION)

假设当前版本为v12.0.4,并确认汉化版本库是否包含该版本的汉化标签(-zh结尾)。

如果具有相同版本的汉化标签,则在本地 clone 仓库。

安装git,patch

1
yum -y install git patch

克隆汉化版本库(可能下载很慢,拼运气的)

1
git clone https://gitlab.com/xhang/gitlab.git

查看该汉化补丁的版本

1
cat gitlab/VERSION

如果已经克隆过,则进行更新

1
git fetch

然后比较汉化标签和原标签,导出 patch 用的 diff 文件。

导出12.0.4版本的汉化补丁

1
git diff v${gitlab_version} v${gitlab_version}-zh > ../${gitlab_version}-zh.diff

执行完毕后将生成当前版本的补丁文件,如 12.0.4-zh.diff

导入汉化补丁

停止 gitlab

1
gitlab-ctl stop
1
2
cd /root
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < 12.0.4-zh.diff

确定没有 .rej 文件,重启 GitLab 即可。

1
gitlab-ctl start 

执行重新配置命令

1
gitlab-ctl reconfigure

主要修改两个地方

1
vi /etc/gitlab/gitlab.rb
1
2
3
4
5
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_display_name'] = 'Gitlab'
gitlab_rails['gitlab_email_reply_to'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_subject_suffix'] = ''

https://img.bwcxtech.com/img/20200928155842.png

1
2
3
4
5
6
7
8
9
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qiye.aliyun.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "gitlab@example.com"
gitlab_rails['smtp_password'] = "123456"
gitlab_rails['smtp_domain'] = "qiye.aliyun.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

https://img.bwcxtech.com/img/20200928155832.png

修改完后重新加载配置

1
gitlab-ctl reconfigure

通过命令行测试邮件是否发送成功

1
2
3
gitlab-rails console

irb(main):003:0> Notify.test_email('1624717079@qq.com', 'Message Subject', 'Message Body').deliver_now

通过gitlab搭建的git仓库,由于Gravatar被墙了,导致Gravatar头像无法显示。总觉得怪怪的。

社区版gitlab解决办法:

1
vi /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

将plain_url改为

1
2
3
#plain_url:      # default: http://www.gravatar.com/avatar/%{hash}?s=%{size}&d=identicon
plain_url:     https://sdn.geekzu.org/avatar/%{hash}?s=%{size}&d=identicon
plain_url:     https://gravatar.loli.net/avatar/%{hash}?s=%{size}&d=identicon

然后执行

1
2
gitlab-ctl restart
gitlab-rake cache:clear RAILS_ENV=production

1、先cd到根目录,执行git config --global credential.helper store命令

1
# git config --global credential.helper store

2、执行之后会在.gitconfig文件中多加红色字体项

1
2
3
4
5
[user]
	email = 1624717079@qq.com
	name = bwcx
[credential]
	helper = store

3、之后cd到项目目录,执行git pull命令,会提示输入账号密码。输完这一次以后就不再需要,并且会在根目录生成一个.git-credentials文件

1
2
# git pull
# cat .git-credentials

4、之后pull/push代码都不再需要输入账号密码了~

如果这个时候,还是提示需要输入账号,那就要进项目的根目录,.git 目录的 config里 找到

1
2
[remote "origin"]
	url = http://192.168.1.83/tms/jenkins-test.git

修改这里的url

1
2
3
4
5
gitlab-ctl stop # 停止
rpm -e gitlab-ce # 卸载
ps aux | grep gitlab # 查看守护进程
kill -9 18777 # 杀掉守护进程
find / -name gitlab | xargs rm -rf # 删除所有包含gitlab的文件

基于docker-compser

1
2
3
4
mkdir -p /data/gitlab/
cd docker/gitlab/
mkdir -p /data/gitlab/{config,logs,data}
export GITLAB_HOME=/data/gitlab

GitLab容器使用主机卷来存储持久数据

本地位置容器中的位置用途
/data/gitlab/data/var/opt/gitlab存储应用程序数据
/data/gitlab/logs/var/log/gitlab存储日志
/data/gitlab/config/etc/gitlab存储GitLab配置文件
1
vim docker-compose.yml

docker-compose.yml内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
version: '2.3'
services:
  gitlab-ce:
    image: 'gitlab/gitlab-ce:latest'
    container_name: gitlab-ce
    restart: always
    # hostname: 'gitlab.example.com'
    hostname: '192.168.1.10'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.1.10'
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        # 需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。
        # 比如下面的电子邮件的配置:
        # gitlab_rails['smtp_enable'] = true
        # gitlab_rails['smtp_address'] = "smtp.qiye.aliyun.com"
        # gitlab_rails['smtp_port'] = 465
        # gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
        # gitlab_rails['smtp_password'] = "password"
        # gitlab_rails['smtp_authentication'] = "login"
        # gitlab_rails['smtp_enable_starttls_auto'] = true
        # gitlab_rails['smtp_tls'] = true
        # gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'
        # ssh端口不修改会冲突
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        # root账号的密码,注意不能小于八位
        gitlab_rails['initial_root_password'] = "root@123"        
      # Add any other gitlab.rb configuration here, each on its own line
    ports:
      - '80:80'
      - '443:443'
      - '2222:22'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
1
docker-compose up -d

docker-compose方式并没有进行服务拆分,可以直接docker启动

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
docker run -d \
  -p 443:443 -p 80:80 -p 2222:22 \
  --hostname 192.168.1.10 \
  --name gitlab \
  --restart always \
  -e TZ=Asia/Shanghai \
  -e GITLAB_ROOT_PASSWORD=root@123 \
  -v $GITLAB_HOME/config:/etc/gitlab \
  -v $GITLAB_HOME/logs:/var/log/gitlab \
  -v $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

如果没有指定root密码,看这里

https://img.bwcxtech.com/img/20210629103233.png

1
docker exec -it gitlab cat /etc/gitlab/initial_root_password