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

三、安装过程遇到的问题

  具体的安装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.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??

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.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 运行成功了。

至此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 就可以登录上了

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

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

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

gerrit服务器邮箱设置(三)

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

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

未完待续。。

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

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

相关文章

win11安装VMware虚拟机,启动系统后蓝屏,安装虚拟机卡在虚拟网卡界面的解决办法

机缘和遇到的问题 由于最近618换了台新笔记本电脑&#xff0c;然后系统自带的操作系统是windows 11 家庭版本&#xff0c;由于工作需要用到window10的环境&#xff0c;不得不安装一个虚拟机来解决问题&#xff0c;然后就把这次安装VMware虚拟机遇到的坑给大家分享一下&#xf…

研二自学嵌入式开发,就业导向,学习路线该如何规划?

研二才来问这个问题&#xff0c;有点晚&#xff0c;离你开始找工作还有大概8&#xff5e;9个月&#xff0c;你应该用应试思维来应对找工作这个事&#xff0c;尤其当前这个经济形势下。 刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入…

基于Openmv的追小球的云台

介绍 在这篇文章&#xff0c;我会先介绍需要用到且需要注意的函数&#xff0c;之后再给出整体代码 在追小球的云台中&#xff0c;比较重要的部分就是云台&#xff08;实质上就是舵机&#xff09;的控制以及对识别的色块位置进行处理得到相应信息后控制云台进行运动 1、舵机模…

asp.net core反向代理

新建项目 新建空白的asp.net core web项目 安装Yarp.ReverseProxy包版本为2.2.0-preview.1.24266.1 编写代码 namespace YarpStu01;public class Program {public static void Main(string[] args){var builder WebApplication.CreateBuilder(args);builder.Services.AddRev…

JavaWeb——MySQL:DQL

3. DQL:查询 查询是使用最多、最频繁的操作&#xff0c;因为前面的修改以及删除&#xff0c;一般会交给数据库专业的人员&#xff0c;对于非数据库专业人员来说&#xff0c;老板一般会放心的让你对数据库只进行查询操作&#xff1b; 3.2 条件查询&#xff08;where&#xff09…

浏览器自带的IndexDB的简单使用示例--小型学生管理系统

浏览器自带的IndexDB的简单使用示例--小型学生管理系统 文章说明代码效果展示 文章说明 本文主要为了简单学习IndexDB数据库的使用&#xff0c;写了一个简单的增删改查功能 代码 App.vue&#xff08;界面的源码&#xff09; <template><div style"padding: 30px&…

2024年通信技术与计算机科学国际学术会议(ICCTCS 2024)

2024年通信技术与计算机科学国际学术会议&#xff08;ICCTCS 2024&#xff09; 2024 International Academic Conference on Communication Technology and Computer Science&#xff08;ICCTCS 2024&#xff09; 会议简介&#xff1a; 2024年通信技术与计算机科学国际学术会议…

Leetcode.1735 生成乘积数组的方案数

题目链接 Leetcode.1735 生成乘积数组的方案数 rating : 2500 题目描述 给你一个二维整数数组 q u e r i e s queries queries &#xff0c;其中 q u e r i e s [ i ] [ n i , k i ] queries[i] [n_i, k_i] queries[i][ni​,ki​] 。第 i i i 个查询 q u e r i e s [ i …

JAVA SDK 整合 AI 大语言模型

目前主流模型厂商的 SDK 并没有很好的支持 JAVA 环境&#xff0c;主流还是使用的 Python &#xff0c;如果希望将 AI 功能集成到业务中来&#xff0c;则需要找找有没有一些现成的开源项目&#xff0c;但是这种项目一般需要谨慎使用&#xff0c;以防有偷取 app_key 等风险问题 前…

如何在Linux下使用git(几步把你教会)

目录 一、注册github账号 二、新建项目 1.点击右上角自己的头像&#xff0c;然后点击Your repositories。 2.点击New。 3.配置新项目信息。 4.点击Create repository即可成功创建。 三、安装git 四、配置git 五、初始化git仓库 1.先进入想要使用git的目录。 2.初始化…

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性&#xff0c;并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容&#xff0c;并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和…

多孔散热器简介

今天给大家分享关于多孔散热器的一些构造、散热情况。 更多资讯&#xff0c;请关注B站【莱歌数字】&#xff0c;有视频教程~~ 常见的散热器通常由不渗透水、空气和其他液体的无孔材料制成。固体铝和铜是行业标准。 但散热器也可以作为半多孔材料或多孔涂层。研究和应用表明&…

防静电监控系统全方位防静电监测,保障产品质量

在当今高度精密的电子制造领域&#xff0c;产品质量的保障至关重要。哪怕是微小的静电干扰&#xff0c;都可能导致电子元件损坏、性能下降&#xff0c;从而影响整个产品的质量和可靠性。为了应对这一挑战&#xff0c;某电子工厂车间引入了先进的防静电监控系统&#xff0c;实现…

11g rac db安装软件时找不到 节点的问题处理

问题 在安装11.2.0.4db软件时数据库软件无法识别集群的两个主机 处理方法 [oracleracdg1-1 database]$ cd /u01/app/oraInventory/ [oracleracdg1-1 oraInventory]$ ls ContentsXML logs oraInst.loc orainstRoot.sh oui [oracleracdg1-1 oraInventory]$ cd ContentsXML/…

Qt | QSS自定义部件的外观

01、简介 一、自定义部件外观基础 1、有 3 种方法可实现自定义界面外观:重新实现 paintEvent()函数,使用 QStyle 类的绘制函数,子类化 QStyle,本小节仅介绍方法 1 和 2 的使用方式,方法 3 见下一节。 2、方法一:Qt 通过 QWidget::paintEvent()函数实现界面外观的绘制,…

Linux运行jar包:Invalid or corrupt jarfile

你们好&#xff0c;我是金金金。 场景 maven打包springboot项目得到一个jar包&#xff0c;我通过xshell上传到虚拟机环境里面&#xff0c;试图运行它&#xff0c;结果Invalid or corrupt jarfile&#xff1a;jar 文件无效或损坏 排查 jdk版本是否一致&#xff1f;结果&#xf…

参数页面设计

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 参数页面设计 {public partial class Form1 : Form{List<PMs> PMs new List<PMs>();public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){for (int …

深入解析 Python dataclass:类属性与类方法解释

文章目录 dataclass实例属性和类属性自动设置属性 实例方法静态方法&#xff08;staticmethod&#xff09;和 类方法&#xff08;classmethod&#xff09;静态方法类方法 dataclass dataclass 是 Python 3.7 引入的一个装饰器&#xff0c;用于简化类的定义。 使用 dataclass …

Django教程(001):安装及快速上手

1.1 Django安装 pip install django安装之后 c:\python39-python.exe-Scripts-pip.exe-django-admin.exe【安装django之后&#xff0c;工具&#xff0c;创建django项目】-Lib-内置模块-site-packages-flask-django(安装django之后&#xff0c;【django框架源码】)如下图&…

思考题:相交的几何图形

给定不超过 26 个几何图形&#xff0c;每个图形都有一个唯一大写字母作为其编号。 每个图形在平面中的具体位置已知&#xff0c;请你判断&#xff0c;对于每个图形&#xff0c;有多少个其他图形与其存在交点。 在判断交点时&#xff0c;只考虑边与边相交的情况&#xff0c;如…