Gitlab搭建

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

安装Postfix

Postfix支持Gitlab发信功能

1
2
yum -y install postfix
apt install postfix

设置Postfix开机自启,并启动

1
2
systemctl enable postfix
systemctl start postfix

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# centos
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
sudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ce
# ubuntu
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash
sudo EXTERNAL_URL="http://gitlab.example.com" apt install gitlab-ce
# centos极狐
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash
sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-jh
# ubuntu极狐
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash
sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-jh

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

如果提示连接超时,可以使用清华大学开源软件镜像站

首先信任 GitLab 的 GPG 公钥:

1
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
1
2
3
cat > /etc/yum.repos.d/gitlab-ce.repo <<'EOF'
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu focal main
EOF

安装 gitlab-ce:

1
2
sudo apt-get update
sudo apt-get install gitlab-ce

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

访问GitLab 实例的 URL

1
external_url 'http://192.168.1.83'

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

备份存储路径

1
2
3
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab/backups"
gitlab_rails['backup_gitaly_backup_path'] = "/data/gitlab/gitaly-backup"

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

数据存储目录

1
2
3
4
5
git_data_dirs({
  "default" => {
    "path" => "/data/git-data"
   }
})

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

启动命令

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

进行配置改动后输入以下命令使配置生效

1
2
gitlab-ctl reconfigure
gitlab-ctl start
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

由于升级不能跨越大版本号,因此只能升级到当前大版本号到最高版本,方可升级到下一个大版本号。

官方升级步骤

12.0.4->12.0.12->12.10.14->13.0.14->13.3.x

设置 Gitlab 的备份目录

1
vi /etc/gitlab/gitlab.rb
1
2
3
4
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab/backups"
gitlab_rails['backup_archive_permissions'] = 0644
gitlab_rails['backup_keep_time'] = 604800
1
2
mkdir -p /data/gitlab/backups
chown -R git.git /data/gitlab/backups

重载 Gitlab 配置文件

1
gitlab-ctl reconfigure

停止部分 Gitlab 服务

1
2
3
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx

手动备份 Gitlab(可有可无,自行决定需不需要)

1
gitlab-rake gitlab:backup:create

查询版本

1
yum search gitlab --showduplicates

安装升级包

1
yum -y install gitlab-ce-12.0.12-ce.0.el7.x86_64

重新配置 Gitlab

1
gitlab-ctl reconfigure

重启 Gitlab

1
gitlab-ctl restart

继续升级,直至想要升级的版本,升级前记得停止部分服务

1
2
3
4
5
yum -y install gitlab-ce-12.10.14-ce.0.el7.x86_64
...
yum -y install gitlab-ce-13.0.14-ce.0.el7.x86_64
...
yum -y install gitlab-ce-13.3.2-ce.0.el7.x86_64

在新版的 Gitlab 中官方默认已经支持中文版本了,所以不再需要打补丁包了。

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

If you disable version check, this information isn’t collected. To enable or disable it:

  1. On the top bar, select Menu > {admin} Admin.
  2. In the left sidebar, select Settings > Metrics and profiling, and expand Usage statistics.
  3. Enable or disable Version check.
  4. Select Save changes.

Settings -> Preferences -> Localization -> Language

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

主要修改两个地方

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中默认启用用户头像是自动随机生成的,由于Gravatar被墙,加载很长时间头像也无法显示,影响加载速度。

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

管理中心-通用-账户和限制

取消勾选 启用 Gravatar

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

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

将plain_url的地址改为以下其一

1
2
https://sdn.geekzu.org/avatar/%{hash}?s=%{size}&d=identicon
https://gravatar.loli.net/avatar/%{hash}?s=%{size}&d=identicon

然后执行

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

配置备份

1
2
3
gitlab-ctl backup-etc
# cron
15 04 * * 2-6 gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /data/gitlab/backups/

存储库备份

1
2
3
gitlab-backup create
# cron
0 2 * * * gitlab-backup create CRON=1

参考链接:

Backup

Back up and restore GitLab

备份

备份和恢复极狐GitLab