Gitlab搭建

摘要

安装并配置必要的依赖关系

安装Postfix

Postfix支持Gitlab发信功能

1
yum -y install postfix

设置Postfix开机自启,并启动

1
2
systemctl enable postfix
systemctl start postfix

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

添加 GitLab 镜像仓库并安装

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
8
9
cat > /etc/yum.repos.d/gitlab-ce.repo <<EOF
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
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

配置并启动 GitLab

启动命令

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

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

卸载GitLab

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的文件

邮件配置

主要修改两个地方

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

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'] = "xinxibu@yuanfusc.com"
gitlab_rails['smtp_password'] = "yuanfu@1211"
gitlab_rails['smtp_domain'] = "qiye.aliyun.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

修改完后重新加载配置

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

linux git pull/push时提示输入账号密码之免除设置

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

基于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配置文件

创建docker-compose.yml文件

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密码,看这里

image-20210628144404489

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