Ubuntu Apache2 搭建Gerrit 环境

news2024/12/27 16:21:08

一、前言

时隔多年,好久没有更新CSDN 博客了,主要原因有如下两点:

1、平时工作繁忙,无暇更新。

2、工作内容涉及信息安全,一些工作经验积累不便更新到互联网上。

最近一直在折腾搭建Gerrit 环境,最开始是在Windows 环境下尝试搭建的,搭建不成功,遇到很多问题,并且网上Windows 环境下资料和文章较少,所以尝试在ubuntu 环境下搭建。

也折腾了挺长时间的,期间查阅了大量的CSDN 博文,终于调试ok,CSDN 上关于的搭建apache + unbuntu 搭建Gerrit 的博客挺多的,但大多比较零散,针对遇到的问题,讲解不够透彻,自己尝试了很多博客的方法终于搭建成功,很想总结分享给大家。

二、搭建环境说明

平台:VMware® Workstation 17 Pro

系统:elementary OS 5.0 Juno(Ubuntu 7.3.0-16ubuntu3))

Apache 版本号: Apache/2.4.29 (Ubuntu)

Gerrit 版本号:gerrit-3.1.3

三、安装过程遇到的问题

  具体的安装Apache 和Gerrit 的方法,网上这类文章很多,就不再这里赘述了,各位可以自己搜索相关文章,这里主要讨论安装过程中遇到的问题,避免大家走弯路。

1、Gerrit 的两种认证方式:

(1)OpenId:在安装完成Gerrit,登录Gerrit 之前需要有一个用户认证,默认就是open id,这种方式我们尝试了很久,各种注册Ubuntu 账号,仍然还是不行,最终不得已尝试第2种方式:Apache 反向代理

(2)Apcahe 反向代理:刚开始我也不懂什么叫做Apache 反向代理,只是一股脑的按照网上的各种教程配置,最终发现还是不行,踩了很多的坑。

  所谓Apache 的反向代理就是,Gerrit 会运行在一个IP地址的一个端口上,比如是192.168.170.129:8092,这个时候Gerrit 会监听192.168.170.129 地址上8092 端口上的访问请求,Apache 默认运运行的端口是80 和8080,它会监听这个端口上的访问请求;

  按理说我们配置运行完Gerrit 后直接访问192.168.170.129:8092 端口就好了,但是,因为我们使用的Apache 反向代理做为Gerrit 首次登录认证的一种的方式,那么我们就不能直接通过192.168.170.129:8092 端口去登录Gerrit 了,我们就必须使用Apache 去作为我们登录Gerrit 的一种认证方式,让Apache 去对登录的用户做一个认证。

  这个时候我们就需要用Apache 做反向代理,那么什么是反向代理呢,直白点就是,当你访问这个地址时,它会代理到另外一个地址。这里说的清除点就是,当你访问Apache 的8080 端口时,它会帮你代理代理到Gerrit 的8092 端口,这样的话,你访问192.168.170.129:8080 地址实际上就是访问的192.168.170.129:8092,这个就是Apache 的反向代理。

  那么回到开始的,Gerrit 的Apache 反向代理认证,因为我们做了用Apache 对Gerrit 做了反向代理,并且也通过Apache 对Gerrit 做认证,那么在通过Apache 的8080 端口访问Gerrit 时,Gerrit 就会要求,Apache 的代理请求中带上Gerrit 的认证信息,如果没有带Gerrit 就会拒绝访问,就会出现如下的Gerrit 报错:

就是这个报错,相信大家也深受这个报错的折磨,我有折腾了好久好久,按照网上的方法尝试了很多次都不行,这个其实就是Apache 反向代理配置的问题。

出现这个问题的原因主要有:

1、Apache 反向代理不生效:

相信大家刚开始的时候都会按照网上的方法

sudo apt-get install apache2
cd /etc/apache2
创建httpd.conf
sudo touch /etc/apache2/httpd.conf
sudo vim httpd.conf
文件写入以下内容:

通过httpd.conf 去配置Apache 反向代理,但是不知道时我的原因,还是本身这种方法就不对,这个文件中配置一直就不生效,所以折腾了很久,改了很多参数,一点用都没有。

后来,参考这篇文章才找到配置生效的地方:/etc/apache2/sites-available/my-default.conf

这里就不在赘述了,可以直接参考下面的这篇文章,已经讲的很清楚了。

Linux中配置Gerrit的apache2反向代理

Linux中配置Gerrit的apache2反向代理_gerrit apache-CSDN博客

然后直接在新建的这个/etc/apache2/sites-available/my-default.conf 文件中配置Apache 反向代理就好了。

  配置完直接重启Apache 服务就好了,推荐大家用下面的命令:

sudo /etc/init.d/apache2 restart

  重启过程中可能会有一些报错导致Apache 运行不起来,这是个好消息,至少说明你配置的地方是对,说明你方向是对的。

  报错原因大家可以直接查看Apache 的日志文件。

sudo vim /var/log/apache2/error.log

sudo vim /var/log/apache2/other_vhosts_access.log

sudo vim /var/log/apache2/access.log

主要看error.log 就可以了,我这边遇到的第一个问题就是没有添加Apache 代理的依赖库文件:

这里可以参考这篇文章:

AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??

AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??-CSDN博客

 添加依赖的so 库文件,按照这个文章的描述操作就可以了。

主要是添加这三个依赖文件,然后按照命令操作下就可以了:

gerrit1@pc:/etc/apache2$ grep -rn slotmem_shm_module  ./
./mods-available/slotmem_shm.load:1:LoadModule slotmem_shm_module /usr/lib/apache2/modules/mod_slotmem_shm.so
gerrit1@pc:/etc/apache2$ 
gerrit1@pc:/etc/apache2$ sudo ln -s /etc/apache2/mods-available/slotmem_shm.load /etc/apache2/mods-enabled/slotmem_shm.load
gerrit1@pc:/etc/apache2$ 
gerrit1@pc:/etc/apache2$ sudo /etc/init.d/apache2 restart
 * Restarting web server apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
   ...done.
gerrit1@pc:/etc/apache2$

这里解决了反向代理基本上就没问题了,然后就是解决各种报错就好了,Apache 各种报错原因及解决办法网上有很多的文章。

因为使用的是Apache 的反向代理,那么这里首先就好看下Apache 监听的是哪些端口:

这里可以用这个命令查看:

wangpeng@linux:~$ sudo netstat -tulnp | grep apache
[sudo] wangpeng 的密码:       
tcp6       0      0 :::8080                 :::*                    LISTEN      916/apache2         
tcp6       0      0 :::80                   :::*                    LISTEN      916/apache2         
wangpeng@linux:~$

可以看到Apache 主要监听的8080 和80 端口,这里我也尝试给Apache 添加一个新的端口,通过这个端口去做Gerrit 反向代理,但是发现不太行,添加不上去,于是就放弃了,还是使用Apache 原本监听的8080 和80 端口,因为Apache 默认就监听的这两端口,也不用自己新加了,直接用就好了,我选用的是8080 端口,80 默认是系统保留的端口,所以尽量选用大一点的端口号,一般不会被系统占用。

那么接下来就是配置上面说的新建的这个/etc/apache2/sites-available/my-default.conf 文件,添加一个新的虚拟主机,这里大家可以直接参考我的配置:

<VirtualHost *:8080>
	# The ServerName directive sets the request scheme, hostname and port that
	# the server uses to identify itself. This is used when creating
	# redirection URLs. In the context of virtual hosts, the ServerName
	# specifies what hostname must appear in the request's Host: header to
	# match this virtual host. For the default virtual host (this file) this
	# value is not decisive as it is used as a last resort host regardless.
	# However, you must set it for any further virtual host explicitly.
	#ServerName www.example.com

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html

	# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
	# error, crit, alert, emerg.
	# It is also possible to configure the loglevel for particular
	# modules, e.g.
	#LogLevel info ssl:warn

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	# For most configuration files from conf-available/, which are
	# enabled or disabled at a global level, it is possible to
	# include a line for only one particular virtual host. For example the
	# following line enables the CGI configuration for this host only
	# after it has been globally disabled with "a2disconf".
	#Include conf-available/serve-cgi-bin.conf

    ServerName localhost:8080

    ProxyRequests off
    ProxyVia Off
    ProxyPreserveHost On

    <Proxy *>
          Order deny,allow
          Allow from all
    </Proxy>

    <Location "/login/">
        AuthType Basic
        AuthName "WP Gerrit Code Review"
        Require valid-user
        AuthBasicProvider file
        AuthUserFile /home/gerrit/review_site/passwords
        #这个路径是gerrit账户密码管理,后续的步骤中会创建此文件。路径有写正确
    </Location>

    AllowEncodedSlashes On

    ProxyPass / http://192.168.170.129:8092/
    ProxyPassReverse / http://192.168.170.129:8092/
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

这里也有坑,需要注意这里的端口号<VirtualHost *:8080>,也要改成8080

这里配置好了之后基本上代理就没啥问题了。

上面说到配置代码的目的是为了让Apache 对Gerrit 做认证,就这里的

AuthBasicProvider file
AuthUserFile /home/gerrit/review_site/passwords

这里要新建两个用户,并配置密码,用户和密码的密文存在AuthUserFile /home/gerrit/review_site/passwords 文件中,配置密码的方式大家可以在网上查找,最终配置生效后大家可以看下/home/gerrit/review_site/passwords 文件中的密码信息。

配置完成后重启Apache 服务让配置生效,大家也可以使用命令查看Apache 服务器的运行情况:

sudo systemctl status apache2.service

只有变成绿色的才代表Apache 运行成功了。

至此Apache 的反向代理就弄好了,接下来就是配置/home/gerrit/review_site/etc/gerrit.config 文件,我的配置如下:

[gerrit]
	basePath = git
	canonicalWebUrl = http://192.168.170.129:8092
	serverId = **********************************
[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 = gerrit
	javaHome = /usr/lib/jvm/java-11-openjdk-amd64
[database]
    type = mysql
    hostname = localhost
    database = reviewdb
    username = gerrit
[index]
	type = lucene
[auth]
	type = HTTP
[receive]
	enableSignedPush = true
[sendemail]
    enable = true
    smtpServer = smtp.qq.com
    smtpServerPort = 465
    smtpEncryption = SSL
    sslVerify = true
    smtpUser = *********@qq.com
    from = *********@qq.com
[sshd]
	listenAddress = *:29418
[httpd]
	listenUrl = proxy-http://192.168.170.129:8092/
[cache]
	directory = cache

这个文件没有啥配置的,按照网上的抄就行了,需要主要的是这里配置的是Gerrit 的网址和端口,需要和Apache 代理的网址和端口一致,并且这里的Gerrit 的端口不要和Apache 的端口8080 配成一样的,我这里配置的8092

这里配置完了之后,重启Gerrit 服务就可以生效了:

sudo /home/gerrit/review_site/bin/gerrit.sh stop

sudo /home/gerrit/review_site/bin/gerrit.sh run

如果一切顺利的话,到这里Gerrit 就可以登录上了

接下来就是配置Gerrit 的SMTP 邮箱服务了,因为Gerrit 必须要认证邮箱,才可以push 代码,SMTP 配置也是在/home/gerrit/review_site/etc/gerrit.config 文件中,这里大家直接Copy 我的配置即可:

[sendemail]
    enable = true
    smtpServer = smtp.qq.com
    smtpServerPort = 465
    smtpEncryption = SSL
    sslVerify = true
    smtpUser = *******@qq.com
    from = *******@qq.com

这里大家可以参考这篇文章:

gerrit服务器邮箱设置(三)

gerrit服务器邮箱设置(三)_gerrit邮箱配置-CSDN博客

需要注意的是,建议大家把密码写在这个文件中:/home/gerrit/review_site/etc/secure.config

未完待续。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1859599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红酒邂逅时尚,品味生活的双重魅力,引领潮流新风尚

在繁华的都市中&#xff0c;红酒与时尚如同一对孪生姐妹&#xff0c;共同诠释着品味生活的双重魅力。红酒&#xff0c;那深邃的色泽中蕴藏着千年的历史与文化&#xff1b;时尚&#xff0c;那流转的光影中凝聚着时代的潮流与个性。当两者相遇&#xff0c;便碰撞出了特别的火花&a…

BEVDistill

摘要 将激光雷达检测器纳入多视图 3D 物体检测&#xff0c;在 BEV 空间中统一图像和激光雷达特征&#xff0c;让图像BEV特征自适应学习点云BEV特征。 背景 LiDAR 点可捕获精确的 3D 空间信息&#xff0c;为基于相机的目标检测提供自然指导。鉴于此&#xff0c;最近的相关工作…

Handling `nil` Values in `NSDictionary` in Objective-C

Handling nil Values in NSDictionary in Objective-C When working with Objective-C, particularly when dealing with data returned from a server, it’s crucial (至关重要的) to handle nil values appropriately (适当地) to prevent unexpected crashes. Here, we ex…

ModbusRTU协议报文解析

ModbusRTU协议报文解析 报文格式&#xff1a; 设备地址/从站地址&#xff1a; 1个字节 指定目标设备地址&#xff08;从站地址&#xff09; 功能码&#xff1a;1个字节 功能码在modbus协议用于表示信息帧的功能&#xff0c;例如读取线圈状态、读取寄存器等。 数据&#xff…

SSRF漏洞原理与案例分析

一、什么是SSRF漏洞 SSRF (Server-Side Request Forgery&#xff1a;服务器端请求伪造)是一种由攻击者构造请求&#xff0c;由服务端发起请求的安全漏洞。一般情况下&#xff0c;SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的&#xff0c;所以服务端能请…

论文速递 | Management Science 4月文章合集(下)

编者按 在本系列文章中&#xff0c;我们梳理了运筹学顶刊Management Science在2024年4月份发布有关OR/OM以及相关应用的13篇文章的基本信息&#xff0c;旨在帮助读者快速洞察领域新动态。本文为第二部分&#xff08;2/2&#xff09;。 推荐文章1 ● 题目&#xff1a;Social Le…

HarmonyOS应用开发——Hello World

下载 HUAWEI DevEco Studio: https://developer.harmonyos.com/cn/develop/deveco-studio/#download 同意&#xff0c;进入配置页面&#xff1a; 配置下载源以及本地存放路径&#xff0c;包括nodejs和ohpm: 配置鸿蒙SDK路径&#xff1a; 接受协议&#xff1a; 确认无误后&#…

面试-细聊synchronized

1.线程安全问题的主要诱因&#xff1a; 存在多条共享数据(临界资源) 存在多条线程共同操作这些共享数据 解决问题的根本方法&#xff1a; 同一时刻有且仅有一个线程在操作共享数据&#xff0c;其他线程必须等到该线程处理完数据后在对共享数据进行操作。 2.synchroized锁 分…

边缘计算为企业解决数据问题,提升业务效率和竞争力-天拓四方

企业在当前数字化时代面临着一系列具体的问题和挑战&#xff0c;这些问题往往与数据处理、实时响应、安全性以及运营成本等方面密切相关。边缘计算作为一种新兴的计算模型&#xff0c;能够有效地帮助企业解决这些问题&#xff0c;提升业务效率和竞争力。 首先&#xff0c;企业…

清华、北大与微软推出Glyph-ByT5-v2,精准生成文字海报,支持10种语言,效果炸裂

前言 在 AI 领域&#xff0c;文生图技术已经取得了令人惊叹的进展&#xff0c;但如何将文字精准地融入图像&#xff0c;并支持多种语言&#xff0c;一直是研究人员面临的挑战。为了解决这一难题&#xff0c;清华大学、北京大学和微软亚洲研究院的研究人员合作推出了 Glyph-ByT…

网络安全等级保护测评

网络安全等级保护 《GB17859 计算机信息系统安全保护等级划分准则》 规定计算机信息系统安全保护等级共分五级 《中华人民共和国网络安全法》 “国家实行网络安全等级保护制度。 等级测评 测评机构依据国家网络安全等级保护制度规定&#xff0c;按照有关 管理规范和…

泰迪智能科技与成都文理学院人工智能与大数据学院开展校企合作交流

近日&#xff0c;在推动高等教育与产业深度融合的背景下&#xff0c;成都文理学院人工智能与大数据学院携手广东泰迪智能科技股份有限公司开展“专业建设交流会”。人工智能与大数据学院院长胡念青、院长助理陈坚、骨干教师刘超超、孙沛、赵杰、文运、胡斌、邹杰出席本次交流会…

二级web基础操作题练习

---------要求--------- 利用HTML和CSS实现如图所示页面&#xff1a; ---------代码示例--------- 分析&#xff1a;该页面包含一个标题、一个副标题、“姓名信息”的表格&#xff0c;并且有一段文字提示用户仔细填写&#xff0c;使用内联CSS来控制HTML页面的视觉外观&…

TiDB 资源管控的对撞测试以及最佳实践架构

作者&#xff1a; GreenGuan 原文来源&#xff1a; https://tidb.net/blog/bc405c21 引言 TiDB 是一个存算分离的架构&#xff0c;资源管控对这种分离的架构来说实现确实有非常大的难度&#xff0c;TiDB 从 7.1 版本开始引入资源管控的概念&#xff0c;在社区也有不少伙伴测…

SpringUtils.getBean 空指针异常问题

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 今天在新的jeecg-boot里加入下面的代码 /*** 部门经理处理类** author nbacheng* date 2023-08-06*/ AllArgsConstructor Component("DepManagerHandler") DependsOn({"Sp…

el-form重置后input无法输入问题

新增用户遇到的问题&#xff1a; 如果你没有为 formData 设置默认值&#xff0c;而只是将其初始化为空对象 {}&#xff0c;则在打开dialog时&#xff0c;正常输入&#xff0c; formdata会变成如下 但是&#xff0c;打开后&#xff0c;直接使用 resetFields 或直接清空表单&…

封装vuetify3中v-time-picker组件,并解决使用时分秒类型只能在修改秒之后v-model才会同步更新的问题

目前时间组件还属于实验室组件&#xff0c;要使用需要单独引入&#xff0c;具体使用方式查看官网 创建公共时间选择器组件 common-time-pickers.vue 子组件页面 <template><div><v-dialog v-model"props.timeItem.isShow" activator"parent&q…

vxe-list做列表虚拟滚动时,底部间距的优化

已知vxe-list在数据超出一定行时会自动启用纵向虚拟滚动配置&#xff0c;默认效果如图&#xff1a; 但是在滚动中我们发现有时列表底部间距不一致&#xff0c;而且会出现在感官上底部空白过多的情况&#xff1a; 这时候我们想让列表恰好显示完全应该怎么做呢&#xff0c;查看官…

DLS平台:GPT-5预计于2025年底至2026年初发布,将实现“博士水平”智能

摘要 OpenAI首席技术官Mira Murati近日透露&#xff0c;GPT-5可能推迟到2025年底或2026年初发布。这一消息打破了市场对GPT-5在2023年底或2024年夏季发布的预期。尽管推迟&#xff0c;但GPT-5将实现显著的性能飞跃&#xff0c;在特定任务中达到“博士水平”的智能。这标志着人…

.NET开源的实时应用监控系统 - WatchDog

项目介绍 WatchDog是一个开源&#xff08;MIT License&#xff09;、免费、针对ASP.Net Core Web应用程序和API的实时应用监控系统。开发者可以实时记录和查看他们的应用程序中的消息、事件、HTTP请求和响应&#xff0c;以及运行时捕获的异常。 项目工作原理 它利用SignalR进…