当前位置: 首页 > news >正文

Anolis OS 8.8服务器采用docker容器方式搭建gerrit3.8.1服务

采用docker容器方式搭建gerrit3.8.1服务

  • 一、选择管理帐户密码的方式
  • 二、部署gerrit服务
    • 1. 采用docker compose部署单服务的方式部分gerrit
      • (1) docker-compose.yaml文件内容
      • (2) 在docker-compose.yaml文件所在目录调用下面命令先进行初始化操作
    • 2. 在宿主机上部署httpd服务用于管理密码
      • (1) 安装运行httpd服务
      • (2) 配置gerrit相关配置文件
    • 3. 启动gerrit服务
    • 4. 配置和gitlab交互的密钥
    • 5. 配置docker容器dns解析
  • 三、使用gerrit服务
    • 1. 在Gerrit创建一个空项目并同步GitLab数据
    • 2. 配置Grerrit与gitlab的同步
    • 3. 配置gerrit用户权限及拉取代码等相关操作

   当前使用的gerrit服务还是2020年9月份搭建的,借着使用的gitlab升级的东风,顺便把gerrit也做一下升级,本以为过程会比较顺利,实际却是一波三折,下面记录一下相关过程,便于后续参考。

一、选择管理帐户密码的方式

   在Docker Hub中gerrit的官方地址查看了相关说明文档,其推荐使用docker compose的方式运行服务,对应的docker-compose.yml文件样例如下:

version: '3'services:gerrit:image: gerritcodereview/gerritports:- "29418:29418"- "80:8080"depends_on:- ldapvolumes:- /external/gerrit/etc:/var/gerrit/etc- /external/gerrit/git:/var/gerrit/git- /external/gerrit/db:/var/gerrit/db- /external/gerrit/index:/var/gerrit/index- /external/gerrit/cache:/var/gerrit/cacheenvironment:- CANONICAL_WEB_URL=http://localhost# command: initldap:image: osixia/openldapports:- "389:389"- "636:636"environment:- LDAP_ADMIN_PASSWORD=secretvolumes:- /external/gerrit/ldap/var:/var/lib/ldap- /external/gerrit/ldap/etc:/etc/ldap/slapd.dldap-admin:image: osixia/phpldapadminports:- "6443:443"environment:- PHPLDAPADMIN_LDAP_HOSTS=ldap

推荐采用OpenLDAP来管理用户的帐户密码,尝试着按照推荐的方式搭建了服务,在第一步“配置Gerrit的管理员账号”访问形如“https:xxx.xxx.xxx.xxx:6443”地址时页面一直报“重定向次数过多”的错误,定位尝试许久,未能解决问题。于是尝试直接使用官方展示的单gerrit服务容器方案,对应的docker-compose.yml文件样例如下:

version: '1'services:gerrit:image: gerritcodereview/gerrit:3.8.1ports:- "29418:29418"- "80:8080"volumes:- /data/gerrit/etc:/var/gerrit/etc- /data/gerrit/git:/var/gerrit/git- /data/gerrit/db:/var/gerrit/db- /data/gerrit/index:/var/gerrit/index- /data/gerrit/cache:/var/gerrit/cacheenvironment:- CANONICAL_WEB_URL=http://gerrit.example.comcommand: init

通过配置的域名可以访问“http://gerrit.example.com”,出现了登录页面,要求使用OpenID登录或者使用OpenLDAP生成的帐户密码访问,尝试了相应方式,未能成功,考虑到前面搭建的gerrit服务采用的就是在http请求那里进行登录验证的方式,也就不折腾了,直接走已经验证过的路,分别参考了代码审查服务gerrit搭建+httpd反向代理、前面自己写的“CentOS 7 搭建gerrit服务总结”以及看起来像是官方的说明文档,确定了整体思路,接下来就是具体实施了。
   看起来像是官方说明的链接地址访问需要翻墙,这里直接将相关信息罗列如下,有需要可参考:

HTTP Basic Authentication
When using HTTP authentication, Gerrit assumes that the servlet container or the frontend web server has performed all user authentication prior to handing the request off to Gerrit.As a result of this assumption, Gerrit can assume that any and all requests have already been authenticated. The "Sign In" and "Sign Out" links are therefore not displayed in the web UI.To enable this form of authentication:git config --file $site_path/etc/gerrit.config auth.type HTTPgit config --file $site_path/etc/gerrit.config --unset auth.httpHeadergit config --file $site_path/etc/gerrit.config auth.emailFormat '{0}@example.com'
The auth.type must always be HTTP, indicating the user identity will be obtained from the HTTP authorization data.The auth.httpHeader must always be unset. If set to any value (including Authorization) then Gerrit won’t correctly honor the standard Authorization HTTP header.The auth.emailFormat field ('optional') sets the preferred email address during first login. Gerrit will replace {0} with the username, as obtained from the Authorization header. A format such as shown in the example would be typical, to add the domain name of the organization.If Apache HTTPd is being used as the primary web server and the Apache server will be handling user authentication, a configuration such as the following is recommended to ensure Apache performs the authentication at the proper time:<Location "/login/">AuthType BasicAuthName "Gerrit Code Review"Require valid-user...</Location>

二、部署gerrit服务

1. 采用docker compose部署单服务的方式部分gerrit

(1) docker-compose.yaml文件内容

实际采用的docker-compose.yaml文件样例如下:

version: '1'services:gerrit:image: gerritcodereview/gerrit:3.8.1restart: alwaysports:- "29418:29418"- "8080:8080"volumes:- /data/gerrit/etc:/var/gerrit/etc- /data/gerrit/git:/var/gerrit/git- /data/gerrit/db:/var/gerrit/db- /data/gerrit/index:/var/gerrit/index- /data/gerrit/cache:/var/gerrit/cacheenvironment:- CANONICAL_WEB_URL=http://gerrit.example.comcommand: init

新建文件内容可采用下面命令的形式简化操作:

cat > /root/docker/gerrit/docker-compose.yml << EOF
version: '1'services:gerrit:image: gerritcodereview/gerrit:3.8.1restart: always...省略了文件内容,实际使用时按真实的来...command: init
EOF

(2) 在docker-compose.yaml文件所在目录调用下面命令先进行初始化操作

docker compose up gerrit

2. 在宿主机上部署httpd服务用于管理密码

(1) 安装运行httpd服务

考虑到运行的gerrit服务容器中内部没有httpd服务,因此在宿主机上安装httpd服务并启动,同时也设置为自启动,在root帐户下需要执行的相关命令如下:

yum -y install httpd
systemctl start httpd
systemctl enable httpd

(2) 配置gerrit相关配置文件

创建存放帐户密码的空文件:

touch /etc/httpd/conf.d/passwd

生成用于gerrit跳转的httpd配置文件

cat > /etc/httpd/conf.d/gerrit.conf << EOF
<VirtualHost gerrit.example.com:80>ServerName gerrit.example.comProxyRequests OffProxyVia OffProxyPreserveHost OnAllowEncodedSlashes On<Proxy *>Order deny,allowAllow from all</Proxy><Location /login/>AuthType BasicAuthName "Gerrit Code Review"Require valid-userAuthBasicProvider fileAuthUserFile /etc/httpd/conf.d/passwd</Location>ProxyPass / http://127.0.0.1:8080/ 
</VirtualHost>
EOF

增加用户(使用"-c"参数会创建文件,只是新增用户不需要该操作):

htpasswd -cb /etc/httpd/passwd admin 123456
htpasswd -b /etc/httpd/conf.d/passwd admin YourPassword
htpasswd -b /etc/httpd/conf.d/passwd zhangs YourPassword

更新配置文件gerrit.config(gerrit服务容器中对应地址为“/var/gerrit/etc/gerrit.config”,更新操作可直接在宿主机上相应文件操作即可)
样例如下:

[gerrit]basePath = gitcanonicalWebUrl = http://gerrit.example.comserverId = f08520dc-9ea5-48b2-b49f-66d4fd2aad80
[container]javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"user = gerritjavaHome = /usr/lib/jvm/java-11-openjdk-11.0.19.0.7-4.el9.alma.x86_64javaOptions = -Djava.security.egd=file:/dev/./urandomjavaOptions = --add-opens java.base/java.net=ALL-UNNAMEDjavaOptions = --add-opens java.base/java.lang.invoke=ALL-UNNAMED
[index]type = lucene
[auth]type = HTTP
[receive]enableSignedPush = true
[sendemail]enable = truesmtpServer = smtp.mxhichina.comsmtpServerPort = 465smtpEncryption = SSLsmtpUser = gerrit@example.comsslVerify = falsefrom = CodeReview<gerrit@example.com>
[sshd]listenAddress = *:29418
[httpd]listenUrl = http://*:8080/
[cache]directory = cache

更新发送邮箱密码
调整容器中文件“/var/gerrit/etc/secure.config”中sendemail部分的smtpPass配置,可修改发送邮箱的密码。样例如下:

[auth]registerEmailPrivateKey = albUUgKWNFRcCMVhsLkVg87lQddBcmcMkm4=
[sendemail]smtpPass = your@passwordhere

配置完毕之后执行下面命令重启httpd服务:

systemctl restart httpd

3. 启动gerrit服务

将docker-compose.yaml文件中的“command: init”注释掉,更新文件中的version值为“2”,文件内容样例如下:

version: '2'services:gerrit:image: gerritcodereview/gerrit:3.8.1restart: alwaysports:- "29418:29418"- "8080:8080"volumes:- /data/gerrit/etc:/var/gerrit/etc- /data/gerrit/git:/var/gerrit/git- /data/gerrit/db:/var/gerrit/db- /data/gerrit/index:/var/gerrit/index- /data/gerrit/cache:/var/gerrit/cacheenvironment:- CANONICAL_WEB_URL=http://gerrit.example.com# command: init

再调用下面命令启动gerrit服务:

docker compose up -d

4. 配置和gitlab交互的密钥

在容器中目录“/var/gerrit/etc/”下已经生成好了密钥对,可选择“ssh_host_ed25519_key.pub”配置到对应的gitlab帐户上,便于后续拉取代码。
使用下面命令进容器:

sudo docker exec -it -u root gerrit-gerrit-1 bash

在容器里面执行下面命令将ssh key放到指定位置:

cp /var/gerrit/etc/ssh_host_ed25519_key /var/gerrit/.ssh/id_ed25519

修改所有者信息:

chown gerrit:gerrit /var/gerrit/.ssh/id_ed25519

5. 配置docker容器dns解析

如果需要用到指定的域名解析,可在宿主机上进行配置,修改daemon.json文件(保持其他内容不变,更新dns信息配置),查看内容命令如下:

cat /etc/docker/daemon.json
{"dns": ["172.18.0.52", "172.18.0.70", "183.XX.XX.XX"]
}

更新完配置后,调用下面命令重启docker:

systemctl daemon-reload
systemctl restart docker

要验证域名解析是否生效,可在容器中执行类似下面的命令验证:

ping gitlab.example.com

三、使用gerrit服务

1. 在Gerrit创建一个空项目并同步GitLab数据

假设在gitlab上有一个项目testrepo,则进到gerrit网页在仓库那里相应创建一个testrepo项目。
使用下面命令进容器:

sudo docker exec -it -u gerrit gerrit-gerrit-1 bash

进入到目录“/var/gerrit/git”下,执行下面命令删除自动创建的目录:

cd /var/gerrit/git
rm -rf testrepo.git/

使用下面命令克隆gitlab代码:
git clone --bare git@gitlab.example.com:test/testrepo.git ./testrepo.git

2. 配置Grerrit与gitlab的同步

可在下面网址查看看插件状态:
http://gerrit.example.com/admin/plugins
使用下面命令生成replication.config文件(对应容器目录为“/var/gerrit/etc/”):

cd /var/gerrit/etc/
cat > replication.config << EOF
[remote "testrepo"]
projects = testrepo
url = git@gitlab.example.com:test/testrepo.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
push = +refs/changes/*:refs/changes/*
threads = 3
EOF

更新完replication.config文件后,在宿主机上docker-compose.yaml目录下使用下面的命令重启容器:

docker compose restart

3. 配置gerrit用户权限及拉取代码等相关操作

用户权限的配置等相关使用请直接参考gerrit使用小结,在此就不赘述了。

参考链接:
docker-gerrit github网页

相关文章:

Anolis OS 8.8服务器采用docker容器方式搭建gerrit3.8.1服务

采用docker容器方式搭建gerrit3.8.1服务 一、选择管理帐户密码的方式二、部署gerrit服务1. 采用docker compose部署单服务的方式部分gerrit(1) docker-compose.yaml文件内容(2) 在docker-compose.yaml文件所在目录调用下面命令先进行初始化操作 2. 在宿主机上部署httpd服务用于…...

PyTorch 中的多 GPU 训练和梯度累积作为替代方案

动动发财的小手&#xff0c;点个赞吧&#xff01; 在本文[1]中&#xff0c;我们将首先了解数据并行&#xff08;DP&#xff09;和分布式数据并行&#xff08;DDP&#xff09;算法之间的差异&#xff0c;然后我们将解释什么是梯度累积&#xff08;GA&#xff09;&#xff0c;最后…...

Appium+python自动化(三十五)- 命令启动appium之 appium服务命令行参数(超详解)

简介 前边介绍的都是通过按钮点击启动按钮来启动appium服务&#xff0c;有的小伙伴或者童鞋们乍一听可能不信&#xff0c;或者会问如何通过命令行启动appium服务呢&#xff1f;且听一一道来。 一睹为快 其实相当的简单&#xff0c;不看不知道&#xff0c;一看吓一跳&#xf…...

vmware的window中安装GNS3

1.向vmware中的windows虚拟机传送文件 点击虚拟机-安装VMwaretools 安装在虚拟机上面 此图标代表已经成功&#xff0c;将文件复制到虚拟机上里面 2.安装 安装gns3&#xff0c;需要先安装winpcap&#xff08;检查网卡&#xff09;和wireshark&#xff08;对winpcap上数据进行抓…...

FPGA XDMA 中断模式实现 PCIE3.0 AD7606采集 提供2套工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案AD7606数据采集和缓存XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程1--BRAM缓存6、vivado工程2--DDR4缓存7、上板调试验证8、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&am…...

某某大学某学院后台Phar反序列化GetShell

觉得这个洞还算有点意思&#xff0c;可以记录一下 首先在另一个二级学院进行目录扫描时发现源码www.rar&#xff0c;并且通过一些页面测试推测这两个二级学院应该是使用了同一套CMS 分析源码&#xff0c;发现使用的是ThinkPHP 5.1.34 LTS框架 通过APP、Public得到后台访问路径…...

【ChatGPT辅助学Rust | 基础系列 | 基础语法】变量,数据类型,运算符,控制流

文章目录 简介&#xff1a;一&#xff0c;变量1&#xff0c;变量的定义2&#xff0c;变量的可变性3&#xff0c;变量的隐藏 二、数据类型1&#xff0c;标量类型2&#xff0c;复合类型 三&#xff0c;运算符1&#xff0c;算术运算符2&#xff0c;比较运算符3&#xff0c;逻辑运算…...

使用云服务器和Frp(快速反向代理)框架快速部署实现内网穿透

目录 一. 背景1.1 内网穿透1.2 Frp介绍1.3 Frp配置流程 二. 云服务器配置2.1 配置安全组2.2 编写frps.ini 三. 内网主机配置3.1 编辑frpc.ini文件3.2 启动服务并配置开机自启动 四. 参考文献 一. 背景 现在有一台ubuntu云服务器&#xff0c;我想通过内网穿透将一台内网的主机当…...

Mac 上使用 Tesseract OCR 识别图片文本

Tesseract OCR 引擎&#xff1a;Tesseract是一个开源的OCR引擎&#xff0c;你需要先安装它。可以从Tesseract官方网站&#xff08;https://github.com/tesseract-ocr/tesseract&#xff09;下载适用于你的操作系统的安装程序或源代码&#xff0c;并按照官方文档进行安装。 Tes…...

《MapboxGL 基础知识点》- 放大/缩小/定位/级别

中心点 getCenter&#xff1a;获取中心点 const {lng, lat} map.getCenter(); setCenter&#xff1a;设置中心点 // lng, lat map.setCenter([134, 28]); 缩放级别 getZoom&#xff1a;获取当前缩放级别 map.getZoom(); setZoom&#xff1a;设置缩放级别 map.setZoom(5…...

VScode的简单使用

一、VScode的安装 Visual Studio Code简称VS Code&#xff0c;是一款跨平台的、免费且开源的现代轻量级代码编辑器&#xff0c;支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性&#xff0c;也拥有对git的开箱…...

# Unity 如何获取Texture 的内存大小

Unity 如何获取Texture 的内存大小 在Unity中&#xff0c;要获取Texture的内存文件大小&#xff0c;可以使用UnityEditor.TextureUtil类中的一些函数。这些函数提供了获取存储内存大小和运行时内存大小的方法。由于UnityEditor.TextureUtil是一个内部类&#xff0c;我们需要使…...

dolphinscheduler switch+传参无坑版

dolphinscheduler 的前后传参有较多的坑&#xff0c;即便是3.0.5版本仍然有一些bug 下面是目前能无坑在3.0.5版本上使用的操作 前置任务 在界面上设置变量和参数名称 跟官方网站不一样&#xff0c;注意最后一行一定使用echo ${setValue(key$query)}的方式&#xff0c;注意引…...

VINS-fusion安装

VINS-fusion中用的opencv3&#xff0c;如果安装的opencv4要做一系列替换 VINS-Mono在opencv4环境下的安装问题和解决方法 https://zhuanlan.zhihu.com/p/548140724 Vins-Fusion安装记录 https://zhuanlan.zhihu.com/p/432167383 CV_FONT_HERSHEY_SIMPLEX -> cv::FONT_HER…...

智慧消防:如何基于视频与智能分析技术搭建可视化风险预警平台?

一、背景分析 消防安全是一个重要的话题&#xff0c;涉及到每个人的生活和安全。每年都会发生大量的火灾&#xff0c;给人们带来极大的危害&#xff0c;摧毁了大量的财产&#xff0c;甚至造成了可怕的人员伤亡。而消防安全监督管理部门人员有限&#xff0c;消防安全监管缺乏有…...

selenium定位元素的方法

Selenium可以驱动浏览器完成各种操作&#xff0c;比如模拟点击等。要想操作一个元素&#xff0c;首先应该识别这个元素。人有各种的特征&#xff08;属性&#xff09;&#xff0c;我们可以通过其特征找到人&#xff0c;如通过身份证号、姓名、家庭住址。同理&#xff0c;一个元…...

RISC-V特权级别

特权级别 RISC-V共有6个特权级别&#xff1a; 机器模式&#xff08;M模式&#xff09; M模式全称为Machine mode&#xff08;机器模式&#xff09;运行在这个模式下的程序为最高权限&#xff0c;它属于RISC-V里的最高权限模式&#xff0c;它具有访问所有资源的权限&#xff…...

RISC-V 指令集介绍

1. 背景介绍 指令集从本质上可以分为复杂指令集&#xff08;Complex Instruction Set Computer&#xff0c;CISC&#xff09;和精简指令集&#xff08;Reduced Instruction Set Computer&#xff0c;RISC&#xff09;两种。复杂指令集的特点是能够在一条指令内完成很多事情。 指…...

操作系统5

设备管理 I/O设备 什么是&#xff1f;--- 将数据Input/Output&#xff08;输入/输出&#xff09;计算机的外部设备。 分类&#xff1a; 按使用特性&#xff1a;人机交互类外设、存储设备、网络通信设备&#xff1b; 按传输速度&#xff1a;低速、中速、高速设备&#xff1…...

K8S系列文章之 Docker常用命令

一、镜像基础命令&#xff1a; $ docker info # 查看docker信息 $ docker system df # 查看镜像/容器/数据卷所占的空间。 $ ip addr #查看容器内部网络地址。 $ docker images # 查看镜像 $ docker search 镜像名称 # 搜索镜像 --limit :只列出N个镜像&#xff0c;默认为25个…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...