如何搭建私有 gitlab

安装 gitlab

# 创建数据目录
sudo mkdir -p /srv/gitlab/config /srv/gitlab/logs /srv/gitlab/data

# 验证
tree /srv

# 安装 gitlab
sudo docker run --detach \
  --restart always \
  --hostname gitlab.example.com \
  # 注意修改 22 为 30022 后,利用 git 协议下载需指定其端口才可以下载,例如 git clone ssh://git@xxx.gitlab.com:port/.../xxx.git
  # 可配置 ssh config 指定端口,减少操作
  # 而 http 协议可正常下载(其实是因为 nginx 转了一层,否则也是得修改的)
  --publish 30443:443 --publish 30080:80 --publish 30022:22 \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  --name gitlab \
  gitlab/gitlab-ce

# 验证
docker ps
netstat -tunlp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

最后打开浏览器来验证。

邮件服务

多家对比后选择了腾讯企业邮箱 (opens new window),依次进入 邮箱 => 邮箱设置 => 收发信设置 => 开启IMAP/SMTP服务,再回到 邮箱设置 => 邮箱绑定 => 安全登录 获取授权码即可(至于配置域名,邮件配置可另行谷歌)。

1. 修改配置

找到 Email Settings 在后面追加对应的 SMTP 配置。

sudo vim /srv/gitlab/config/gitlab.rb

# 开启 SMTP 功能
gitlab_rails['smtp_enable']=true
gitlab_rails['smtp_address']="smtp.exmail.qq.com"
gitlab_rails['smtp_port']=465
gitlab_rails['smtp_user_name']="name@domain.com" # 邮件发送人
gitlab_rails['gitlab_email_from']="name@domain.com" # 与 smtp_user_name 一致
gitlab_rails['smtp_password']="password" # 获取的授权码
gitlab_rails['smtp_domain']="exmail.qq.com"
gitlab_rails['smtp_authentication']="login"
gitlab_rails['smtp_enable_starttls_auto']=true
gitlab_rails['smtp_tls']=true
1
2
3
4
5
6
7
8
9
10
11
12
13

2. 验证服务

# 以命令形式重新加载配置,也可进入容器后手动执行
docker exec gitlab gitlab-ctl reconfigure

# 进入 gitlab 容器
docker exec -it gitlab bash

# 开启 gitlab-rails
gitlab-rails console

# 测试邮件发送,可换为自己的邮箱
Notify.test_email('someone@example.com', 'Message Subject', 'Message Body').deliver_now
1
2
3
4
5
6
7
8
9
10
11

等待邮件发送到自己的邮箱后即可。

hostname

hostname 会影响仓库下载、用户注册邀请等问题。

在安装 gitlab 时为其设置 hostnamegitlab.example.com,此处还需要修改为你对应的域名或 ip 地址。

sudo vim /srv/gitlab/config/gitlab.rb

# 配置 external_url
external_url 'http://gitlab.example.com'
1
2
3
4

备份与恢复

由于开始就将数据卷挂载到 /srv/gitlab 下,所以备份的数据也会在该目录的 /srv/gitlab/data/backups 中。

# 进入容器
docker exec -it gitlab bash

# 备份指令
gitlab-rake gitlab:backup:create
1
2
3
4
5

更好的形式是定期备份:

crontab -e

# 周末凌晨4点备份
0 4 * * 0 gitlab-rake gitlab:backup:create &> /dev/null
1
2
3
4

根据备份恢复数据:

# 停止服务
gitlab-ctl stop unicorn # 应用服务器
gitlab-ctl stop sidekiq # 后台异步任务队列
gitlab-ctl status # 验证

# 指定数据
gitlab-rake gitlab:backup:restore BACKUP=1607523472_2020_12_09_13.2.1
1
2
3
4
5
6
7
最后更新时间: 1 年前