使用Docker部署Gitlab和Gerrit
标注:本文所有的密码使用【*******】代替 ,自己记得改!
一、服务器环境准备(我这里用台式机代替了)
硬件与软件要求:
具体部署在生成环境的内存和存储需要根据实际情况进行调整,以下配置仅作参考!
- OS: Ubuntu24.03LTS 桌面版
- 内存:64GB
- 存储空间:512GB系统盘 4T数据盘
- 环境部署:Gitlab+Gerrit的数据配置化放在数据盘
- 数据盘做好LVM化,将其挂载/data目录下。
- Docker环境
- Docker Engine >=20.10
- Docker Compose >=1.29.2
二、安装前准备
2.1安装Docker和Docker Compose
从Docker3.3.0开始,Docker compose服务是集成在docker中的,换句话说:只要安装了Docker(3.3.0+),Docker Compose就也已经被安装了。
shell
# 1.安装Docker
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
#step 2: 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
#Step 3: 写入软件源信息
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#Step 4: 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#3.配置 Docker 镜像加速(提升拉取镜像速度)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors":
[
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.m.daocloud.io",
"https://docker.itelyou.cf",
"https://noohub.ru",
"https://docker.fxxk.dedyn.io",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"https://registry.cn-hangzhou.aliyuncs.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo usermod -aG docker $USER
2.2 拉取gitlab gerrit 的Docker镜像
shell
sudo docker pull gitlab/gitlab-ee:14.9.5-ee.0
sudo docker pull gerritcodereview/gerrit:3.8.5
2.3 创建外部持久化所需的文件/文件夹
Gitlab环境:
- 版本:gitlab-ee:14.9.5-ce.0
- 数据存放位置:
- /data/docker-compose/gitlab/gitlab-data # 数据
- /data/docker-compose/gitlab/gitlab-logs # 日志
- /data/docker-compose/gitlab/gitlab-config # 配置文件
shell
sudo mkdir -p /data/docker-compose/gitlab/gitlab-data
sudo mkdir -p /data/docker-compose/gitlab/gitlab-logs
sudo mkdir -p /data/docker-compose/gitlab/gitlab-config
Gerrit环境:
- 版本:gerrit:3.8.5
- 数据存放位置:
- /data/docker-compose/gerrit/etc # 配置文件
- /data/docker-compose/gerrit/git # Git相关
- /data/docker-compose/gerrit/index # 数据
- /data/docker-compose/gerrit/cache # 缓存
shell
sudo mkdir -p /data/docker-compose/gerrit/etc
sudo mkdir -p /data/docker-compose/gerrit/git
sudo mkdir -p /data/docker-compose/gerrit/index
sudo mkdir -p /data/docker-compose/gerrit/cache
注明:本质上,Gitlab和Gerrit都可以使用外置的数据库,但是在实际应用中,Gitlab建议可以不使用外置数据库,而Gerrit建议使用。
- Gitlab内置完整的PostgreSQL数据库,依赖自身的扩展,所以如果没有高可用的需求的,使用内置的数据库已经足够,如果非要使用外置,他只支持PostgreSQL数据库。
- Gerrit专注于轻量级设计,代码审查。本身不自带数据库,他本身只是一个Java Web应用(他通过JDBC链接外置数据库(MySQL,PostgreSQL2等)),所以需要外置的数据库。
Mysql环境---隶属于Gerrit
- 版本mysql8.0+
- root密码:********
- gerrit用户密码:********
- gerrit数据库名称:gerrit_db
外部LDAP服务,这里使用AD ----隶属于Gerrit
- 这里的Gerrit的权限验证服务交给LDAP去管理(一般在企业中,就必须必要交给LDAP管的,这里你可以选择不做也行)
- 这里我做LDAP,如果你没有的话,自己下载一个LDAP工具(简单的,不用AD也行,做完这个部署测试就行)
三、服务配置及测试验证
Gitlab服务配置及测试验证:
- 创建Gitlab的Docker Compose文件
shell
#1.首先赋予gitlab目录权限,防止启动后出现权限问题
sudo chmod -R 755 /data/docker-compose/gitlab/
#2.然后创建 vim /data/docker-compose/gitlab/docker-compose-gitlab.yaml 文件,内容如下:
services:
gitlab:
# 使用指定版本的 GitLab EE
image: gitlab/gitlab-ee:14.9.5-ee.0
container_name: gitlab #容器名称
restart: always
hostname: 'gitlab.ztf.com' # 可自定义
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://172.253.200.36' # 修改为自己的服务器IP
gitlab_rails['gitlab_shell_ssh_port'] = 2211
ports:
- "8081:80"
- "443:443"
- "2211:22"
volumes:
- '/data/docker-compose/gitlab/gitlab-data:/var/opt/gitlab'
- '/data/docker-compose/gitlab/gitlab-logs:/var/log/gitlab'
- '/data/docker-compose/gitlab/gitlab-config:/etc/gitlab'
shm_size: '5G' # 提前分配内存大一些,避免内存不足问题
logging:
driver: json-file
options:
max-size: 4g
保存退出即可!
2.启动Gitlab服务并验证登录
shell
cd /data/docker-compose/gitlab/ #docker compose文件在该目录下,所以服务的启停操作必须在这个目录下操作。
# 启动Gitlab
sudo docker compose -f docker-compose-gitlab.yaml up -d
# 查看日志
sudo docker compose -f docker-compose-gitlab.yaml logs -f
你会看到大量日志,等待出现:
gitlab-ctl[xxxxx]: The GitLab Runner config file has been created 或者浏览器可以访问的提示。
⏳ 注意:首次启动可能需要 3~10 分钟,请耐心等待!
# 如果修改了配置,要在容器启动后,重新刷新配置
sudo docker exec -it gitlab gitlab-ctl reconfigure
用浏览器访问 http://172.253.200.36:8081 看到Gitlab页面就是成功标志,如下图。

3.验证登录Gitlab
shell
1.初始化管理员账号
docker exec -it gitlab /bin/bash
cd /opt/gitlab/bin/
gitlab-rails console -e production #进行初始化密码,等待片刻.....
出现irb(main):001:0> 后,依次输入下面的命令:
u=User.where(id:1).first
u.password='******'
u.password_confirmation='******'
u.save!
exit
出现true说明设置成功!
此时就可以用root/****** 来登录页面
Gerrit 服务配置及测试验证
1.在宿主机上部署Mysql服务
shell
# 具体部署mysql 8.0+版本方式如下:
sudo apt search mysql-server # 搜一下有没有mysql包
sudo apt install -y mysql-server
sudo systemctl status mysql
sudo systemctl enable mysql
# 登录,初次登录直接enter,无密码
sudo mysql -uroot -p
# 修改 root密码 使用 mysql_native_password 插件,并设置强密码。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '******';
# 创建Gerrit数据库
CREATE DATABASE gerrit_db CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
# 创建Gerrit用户并授予用户对该数据库的完全权限
CREATE USER 'gerrit'@'%' IDENTIFIED BY '******';
GRANT ALL PRIVILEGES ON gerrit_db.* TO 'gerrit'@'%';
FLUSH PRIVILEGES; # 刷新配置
exit # 退出mysql
2.创建Gerrit的Docker Compose 文件和配置文件(集成LDAP)
shell
# 1.首先赋予gerrit目录权限,防止启动后出现权限问题。
sudo chown -R 1000:1000 /data/docker-compose/gerrit/ # 1000:1000 是容器内 gerrit 用户的默认 UID:GID
chmod -R 755 /data/docker-compose/gerrit/
# 2.创建 vim /data/docker-compose/gerrit/docker-compose-gerrit.yaml 文件,内容如下:
services:
gerrit:
image: gerritcodereview/gerrit:3.8.5
container_name: gerrit
restart: unless-stopped
hostname: gerrit.ztf.com
ports:
- "29418:29418" # SSH 访问端口
- "8080:8080" # Web UI
volumes:
- /data/docker-compose/gerrit/etc:/var/gerrit/etc
- /data/docker-compose/gerrit/git:/var/gerrit/git
- /data/docker-compose/gerrit/index:/var/gerrit/index
- /data/docker-compose/gerrit/cache:/var/gerrit/cache
environment:
# ===外部 MySQL 配置 ===
- DATABASE_TYPE=mysql
- DATABASE_HOST=172.253.200.36 # 你的 MySQL 所在 IP(本机或远程)
- DATABASE_PORT=3306
- DATABASE_DATABASE=gerrit_db # 数据库名
- DATABASE_USER=gerrit # 数据库用户
- DATABASE_PASSWORD=****** # 数据库密码
# ===认证方式:使用外部的 AD(LDAP)===
- AUTH_TYPE=LDAP
- CANONICAL_WEB_URL=http://172.253.200.36:8080
# === Gerrit 内部管理员账户(用于首次登录)===
- GERRIT_USER_NAME=admin
- GERRIT_USER_EMAIL=admin@chw.com
- GERRIT_USER_PASSWORD=******
# ===外部 Active Directory (AD) 配置 ===
- LDAP_SERVER=ldap://ztf.com:389 # AD 服务器地址
- LDAP_BIND_DN=cn=ldap,cn=users,dc=ztf,dc=com # 绑定用户 DN地址
- LDAP_ACCOUNTBASE=dc=ztf,dc=com # 用户搜索基础 DN地址
- LDAP_GROUPBASE=dc=ztf,dc=com # 组搜索基础 DN地址
## 这里应该也有 LDAP_BIND_PASSWORD 密码的,这个密码我们写在 secure.config 文件里,往下看就知道了。
# ===JVM 调优(建议)===
- JAVA_OPTS=-Xmx2g -Dfile.encoding=UTF-8
# command: init # 注意:首次运行,请去掉注释,这是初始化的操作,初始化完成后,请注释掉它,然后重新启动即可。
3.创建配置文件
shell
# 创建gerrit的配置文件
sudo vim /data/docker-compose/gerrit/etc/gerrit.config #内容如下:
[gerrit]
basePath = git
canonicalWebUrl = http://172.253.200.36:8080
[index]
type = LUCENE
[auth]
type = ldap
userNameCaseInsensitive = true
gitBasicAuth = true
gitBasicAuthPolicy = LDAP
[ldap]
server = ldap://ztf.com:389
username = cn=ldap,cn=users,dc=ztf,dc=com
accountBase = dc=ztf,dc=com
accountFullName = displayName
accountEmailAddress = mail
groupBase = dc=ztf,dc=com
[sendemail]
smtpServer = localhost
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:8080/
[cache]
directory = cache
[container]
user = gerrit
[receive]
enableSignedPush = false
# 创建LDAP的密码文件,gerrit会自动读取这个文件里的密码
sudo vim /data/docker-compose/gerrit/etc/secure.config #内容如下:
[ldap]
password = ******* # 这是LDAP绑定用户的密码,LDAP管理员密码
4.启动Gerrit服务并验证
shell
cd /data/docker-compose/gerrit/ #docker compose文件在该目录下,所以服务的启停操作必须在这个目录下操作
# 启动Gerrit
sudo docker compose -f docker-compose-gerrit.yaml up -d
# 查看日志
sudo docker compose -f docker-compose-gerrit.yaml logs -f
# Gerrit首次启动需要初始化,当你看到没有任何报错的时候,等待日志出现容器退出代码,或者等待一两分钟。
#等到初始化完成后,停掉容器,注释掉docker compose文件里的 command: init 这一行。然后重新启动服务即可,具体命令如下:
# 等待初始化完成............
# 初始化完成后..........
sudo docker compose -f docker-compose-gerrit.yaml down # 停掉容器
# 注释掉 command: init 这一行...........
sudo docker compose -f docker-compose-gerrit.yaml up -d # 再次启动容器
docker ps #查看容器状态
# 最后打开浏览器,访问 http://172.253.200.36:8080 即可。 首页部分截图如下:

后续会对本文的Gitlab和Gerrit做个补充,包括
- Gitlab企业版激活
- Gitlab集成LDAP
- 使用Nginx反代Gitlab+Gerrit
- 关于Gerrit的一些常见问题
发出来后,会把链接放在下面👇