Ubuntu+Apache2 搭建Gerrit 环境

一、前言

时隔多年,好久没有更新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

   强烈推荐搭建按照这篇博客进行配置,个人感觉这篇文章是CSDN 上写的比较好的,里面各种方法也都是我这边踩过的坑,遇到的问题,并且按照这篇文章进行解决的:

【Git】Ubuntu18.04搭建gerrit+gitweb+apache2服务器_ubuntu 搭建git gerrit服务器-CSDN博客

https://blog.csdn.net/u010440719/article/details/127704664

三、安装过程遇到的问题

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

  安装Gerrit 的方式很简单,直接去对应的网址上下载最新的Gerrit 版本安装即可,安装命令也很简单,一条命令即可:

java -jar gerrit-3.9.1.war init -d ~/review_site

  这里的-d 参数是指定gerrit 初始化安装的目录,执行后安装过程中会让你选择很多参数,大部分参数都不重要,因为你最终都可以在安装完成的gerrit.config 文件中重新修改,这里需要注意的是,Gerrit 的认证方式要改成HTTP,不要选择openid(默认是openid),原因接下来会讲到。

sudo  vim /home/gerrit/review_site/etc/gerrit.config

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反向代理_gerrit apache-CSDN博客

https://blog.csdn.net/m0_48465029/article/details/137328385

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

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

sudo /etc/init.d/apache2 restart

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

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

sudo vim /var/log/apache2/error.logsudo vim /var/log/apache2/other_vhosts_access.logsudo vim /var/log/apache2/access.log

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

这里可以参考这篇文章:

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

https://blog.csdn.net/zhaojigao/article/details/86641824

 添加依赖的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.comServerAdmin webmaster@localhostDocumentRoot /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:warnErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${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.confServerName localhost:8080ProxyRequests offProxyVia OffProxyPreserveHost On<Proxy *>Order deny,allowAllow from all</Proxy><Location "/login/">AuthType BasicAuthName "WP Gerrit Code Review"Require valid-userAuthBasicProvider fileAuthUserFile /home/gerrit/review_site/passwords#这个路径是gerrit账户密码管理,后续的步骤中会创建此文件。路径有写正确</Location>AllowEncodedSlashes OnProxyPass / 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 运行成功了。

(2)gerrit.config 配置的问题

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

[gerrit]basePath = gitcanonicalWebUrl = http://192.168.170.129:8092serverId = **********************************
[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-amd64
[database]type = mysqlhostname = localhostdatabase = reviewdbusername = gerrit
[index]type = lucene
[auth]type = HTTP
[receive]enableSignedPush = true
[sendemail]enable = truesmtpServer = smtp.qq.comsmtpServerPort = 465smtpEncryption = SSLsslVerify = truesmtpUser = *********@qq.comfrom = *********@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 stopsudo /home/gerrit/review_site/bin/gerrit.sh run

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

2、Gerrit SMTP 邮箱配置

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

  首先给大家说下为什么要配置SMTP 邮箱,这里是因为,gerrit 登录上如果想要提交代码或者新建项目都是必须要做验证登录用户的邮箱的,否则你是不能提交代码的。

  要验证用户邮箱,就需要你把Gerrit 的SMTP 邮箱配置ok,这样你的Gerrit 才可以发送验证邮件给你完成验证。

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

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

https://blog.csdn.net/sevenjoin/article/details/118189159

需要注意的是:

1、建议大家把密码写在这个文件中:/home/gerrit/review_site/etc/secure.config

2、主要注意这里的enable、smtpServer、smtpServerPort、smtpUser 等等字段的顺序必须按照,否则在Gerrit 上点击Send 验证邮件的时候会各种奇奇怪怪的错。

 这里大家直接Copy 我的配置即可:

[sendemail]enable = truesmtpServer = smtp.qq.comsmtpServerPort = 465smtpEncryption = SSLsslVerify = truesmtpUser = *******@qq.comfrom = *******@qq.com

3、Gerrit 新建项目

  这里也是一条命令即可,这条命令是新建一个Test 的项目

ssh -p 29418 gerrit@192.168.170.129 gerrit create-project --owner gerrit --empty-commit "Test"

未完待续。。

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

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

相关文章

基于Transformer的自监督学习在NLP中的前沿应用

1. 引言 自然语言处理&#xff08;NLP&#xff09;领域正经历一场由自监督学习&#xff08;Self-Supervised Learning, SSL&#xff09;和Transformer架构共同驱动的革命。自监督学习通过巧妙地利用未标注数据&#xff0c;大大减少了对人工标注的依赖&#xff0c;而Transforme…

基于IM948(Low-cost IMU+蓝牙)模块的高精度PDR(Pedestrian Dead Reckoning)定位系统 — 可以供模块和配套代码

一、背景与意义 行人PDR定位系统中的PDR&#xff08;Pedestrian Dead Reckoning&#xff0c;即行人航位推算&#xff09;背景意义在于其提供了一种在GPS信号不可用或不可靠的环境下&#xff0c;对行人进行精确定位和导航的解决方案。以下是关于PDR背景意义的详细描述&#xff1…

Shopee、Lazada测评,是找服务商呢?还是建议自己养号补单呢?

目前大部分Shopee、Lazada的卖家由于运营成本的增加&#xff0c;都会找服务商测评来打造权重&#xff0c;但是找服务商有很多不靠谱&#xff0c;建议还是自行精养一批号&#xff0c;账号在手里比较安全可控&#xff0c;随时随地可以送测&#xff0c;精准搜索关键词货比三家下单…

【日记】希望文竹长得越来越好吧(856 字)

正文 为什么昨天给老师提早说了今天上课…… 今天都要忙死了。不论上午下午都手忙脚乱。上午之前的存量客户来开新账户&#xff0c;流程卡在客户经理尽调那里。恰好那个客户经理还是部门主管&#xff0c;我们没一个人敢催。向副行长汇报情况&#xff0c;又跟客户说。客户跟他们…

【Android】android studio简单实现图书馆借阅管理系统

希望文章能给到你启发和灵感&#xff5e; 点赞收藏关注 支持一下吧&#xff5e; 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、整体设计2.1 数据库逻辑处理&#xff1a;2.2 登录/注册模块2.3 功能界面初始化&#xff1a;2.4 图书管理模块2.5 图书租借服务2.6 读…

Java25年还有更多的工作岗位适合二本学生就业吗?

Java作为一种广泛使用的编程语言。尽管技术领域不断发展和变化&#xff0c;Java依然在许多行业中占据重要地位。以下是一些原因&#xff0c;刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区…

基于Java的软件测试管理系统【附源码】

毕业&#xff08;设计&#xff09;论文 题 目&#xff1a; 软件测试管理系统 学 号&#xff1a; 姓 名&#xff1a; 院 部&#xff1a; 专 业&#xff1a; 班 级&#xff1a; 指导教师&#xff1a; 职 称&#xff1a; 完成日期&#xff1a; 年 月 日 摘要 随着信息技术的不断…

[leetcode]insert-into-a-binary-search-tree

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {if (root nullptr) {return new TreeNode(val);}TreeNode* pos root;while (pos ! nullptr) {if (val < pos->val) {if (pos->left nullptr…

如何从0构建一款类jest工具

Jest工作原理 Jest 是一个流行的 JavaScript 测试框架&#xff0c;特别适用于 React 项目&#xff0c;但它也可以用来测试任何 JavaScript 代码。Jest 能够执行用 JavaScript 编写的测试文件的原因在于其设计和内部工作原理。下面是 Jest 的工作原理及其内部机制的详细解释&…

NetSuite Account Merge 科目合并功能分析

最近项目中&#xff0c;客户有提到过能否将不用的Account与新建的Account进行合并&#xff0c;即我们所说的Merge功能&#xff5e;可以&#xff0c;但是该功能有使用的限制&#xff0c;比如最直接的一点需要注意&#xff0c;不同类型的Account是不可以使用Merge功能的&#xff…

汽车软件开发者的必修课:ASPICE 4.0主要特点、优势及与之前版本的变化之处

ASPICE&#xff08;汽车SPICE&#xff09;4.0是专为汽车行业量身定制的过程评估模型&#xff0c;旨在确保软件和系统开发过程的质量和可靠性。它是更广泛的 ISO/IEC 330xx 系列标准的一部分&#xff0c;源自通用 SPICE&#xff08;软件流程改进和能力确定&#xff09;框架。 AS…

批归一化(Batch Normalization)和层归一化(Layer Normalization)的作用

在深度学习领域&#xff0c;归一化技术被广泛用于加速神经网络的训练速度并提高其稳定性。本文将介绍两种常见的归一化方法&#xff1a;批归一化&#xff08;Batch Normalization, BN&#xff09;和层归一化&#xff08;Layer Normalization, LN&#xff09;&#xff0c;并通过…

ATA-7025高压放大器的优势如何

高压放大器是一类在电子领域中具有重要作用的设备&#xff0c;其主要功能是将输入信号的电压放大到更高的水平。在许多应用中&#xff0c;高压放大器展现出独特的优势&#xff0c;下面将介绍高压放大器的优势以及它们在不同领域的应用。 高压放大器的优势 1.信号驱动能力强 高压…

ATA-3040C功率放大器的基本要求包括什么

功率放大器是电子设备中常用的一个组件&#xff0c;用于将输入信号增强到足够大的电平&#xff0c;以驱动负载而不失真。要设计一个高效和性能优越的功率放大器&#xff0c;需要考虑多个基本要求和设计考虑因素。下面安泰电子将介绍功率放大器的基本要求&#xff0c;以及如何满…

中兴光猫破解telnet配置命令汇总

中兴光猫telnet配置命令汇总 | LogDicthttps://www.logdict.com/archives/zhong-xing-guang-mao-telnetpei-zhi-ming-ling-hui-zong

【王道数据结构笔记】单链表的基本操作之指定结点的后插操作(代码分析)

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:数据结构 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 【王道数据结构笔记】单链表的基本操作之指定结点的后插操作(代码分析) 引言一 代码二 分析总结…

【LeetCode:2741. 特别的排列 + 递归 + 记忆化搜索 + 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

解决GPU 显存未能完全释放

一、 现象 算法同学反馈显存未能完全释放。 二、解决方法 一条命令搞定 注意&#xff1a;执行时注意不要误杀其他的python进程&#xff0c;需要确认好。 我的这条命令是将所有python进程都杀死了 ps -elf | grep python | awk {print $4} | xargs kill -s 9

使用AI技术实现语言练习

使用人工智能技术实现语言场景练习&#xff0c;可以有效地提高学习者的语言能力&#xff0c;包括口语、听力、阅读和写作。以下是一些常见的应用场景。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 口语练习 虚拟对话伙伴: 利用…

FullCalendar日历组件集成实战(16)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…