使用Docker部署Gitlab和Gerrit (一)

使用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服务配置及测试验证:

  1. 创建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的一些常见问题

发出来后,会把链接放在下面👇

相关推荐
有风听风有雨看雨20 小时前
【Critical】docker unauthorized 2375
docker·容器·eureka
Trank-Lw1 天前
Docker Devcontainer 管理命令
运维·docker·容器
科技观察1 天前
告别镜像拉取困境:毫秒镜像以“正规军”姿态重塑国内Docker加速生态
运维·docker·容器
热爱生活的五柒1 天前
docker里面的文件没有写入权限,也无法使用sudo。docker镜像里某个文件夹没有创建文件夹权限。如何解决?
运维·docker·容器
愈努力俞幸运1 天前
windows 安装 docker
windows·docker·容器
2301_767902641 天前
第 5 章 docker网络
网络·docker·php
huizhixue-IT1 天前
收藏-Kubernetes怎么从私有仓库拉取镜像?(K8S系列)
云原生·容器·kubernetes
DB!!!1 天前
【Dockerv1】高频十大面试题&&基础知识&&常用指令
docker·容器
守护砂之国泰裤辣1 天前
React项目Docker部署的简单配置
运维·docker·容器
@Ma1 天前
使用 Docker 部署 PostgreSQL + pgvector 完整步骤(映射端口 5433),适用于memu项目数据库支持!
docker·postgresql·容器