docker部署gitlab私服

# 前置条件

安装 docker, 配置国内镜像源

# 部署命令(使用了一个汉化的版本)

1
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab docker.io/twang2218/gitlab-ce-zh

把你服务器的端口映射到容器内部的 443 或者 80

1
-v /home/gitlab/config:/etc/gitlab  

这里把容器的配置文件夹映射到服务器真实目录 /home/gitlab/config

1
-v /home/gitlab/logs:/var/log/gitlab

这里把容器的日志文件夹映射到服务器真实目录 /home/gitlab/logs

1
-v /home/gitlab/data:/var/opt/gitlab

这里把容器的存储文件夹映射到服务器真实目录 /home/gitlab/data

# 进入容器配置 gitlab

  • 1. 进入容器
1
docker exec -it gitlab /bin/bash
  • 2. 修改配置文件
1
vim /etc/gitlab/gitlab.rb
  • 3. 配置
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
#外部访问地址
external_url 'http://124.225.116.118:35236'
#gitlab时区
gitlab_rails['time_zone'] = 'UTC'

#gitlab邮件通知
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '2513178346@qq.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "2513178346@qq.com"
gitlab_rails['smtp_password'] = "你的"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_pool'] = true
#可选,配置ip限流、白名单
gitlab_rails['rack_attack_git_basic_auth'] = {
'enabled' => true,
'ip_whitelist' => ["127.0.0.1"],
'maxretry' => 100,
'findtime' => 60,
'bantime' => 3600
}

# 重启服务

1
2
3
gitlab-ctl stop
gitlab-ctl reconfigure
gitlab-ctl start

# 一些常见问题

1. 同一个 ip 短时间并发可能会触发限流

解决办法

方法一、暂时解决,进入容器执行命令删除 IP 黑名单

1
2
3
redis-cli -s /var/opt/gitlab/redis/redis.socket
keys *attack*
del "上一步查到的键值"

方法二、加 IP 白名单(如果有固定 ip 可以这么做)或增加并发阈值

1
2
3
4
5
6
7
8
9
10
#可选,配置ip限流、白名单
gitlab_rails['rack_attack_git_basic_auth'] = {
'enabled' => true,
#ip白名单
'ip_whitelist' => ["127.0.0.1"],
#并发阈值
'maxretry' => 100,
'findtime' => 60,
'bantime' => 3600
}