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

【Linux】在Ubuntu 16.04上安装Gerrit + PostgreSQL + Apache服务

Gerrit是一个基于Git版本控制系统的运行于Web浏览器上的Code Review工具,本文叙述如何在Ubuntu 16.04上安装Gerrit服务。(当然安装Gerrit的方法有很多,本文只是其中之一)

文章目录

  • 前提
  • 安装PostgreSQL数据库并创建用户
  • 下载、配置和运行Gerrit服务
  • 安装Apache进行反向代理
  • 配置登录账号密码
  • 重启服务,验证效果

前提

依照本文实践的前提如下:

  1. 一台具有公网IP地址的ECS服务器
  2. 服务器有访问公网资源的权限
  3. 服务器的操作系统为Ubuntu 16.04
  4. 操作者拥有对ECS服务器的网络控制权限
  5. 已经安装了Java运行环境(JRE)

安装PostgreSQL数据库并创建用户

apt install postgresql
# 创建pg用户名 pguser
sudo -u postgres createuser -RDIElPS <pguser>
# 创建pg数据库 pgdb
sudo -u postgres createdb -E UTF-8 -O <pguser> <pgdb>

下载、配置和运行Gerrit服务

下载页面地址 https://gerrit-releases.storage.googleapis.com/index.html ,目前最新版是 gerrit-2.16.5.war ,我们以它为例。

下载完成后开始运行如下命令进行配置:(注意修改/your/target/site_directory)

java -jar /your/path/to/gerrit-2.16.5.war -d /your/target/site_directory

在下面的交互式设置中,进行相应输入(其中的邮箱配置以阿里云邮为例):

*** Gerrit Code Review 2.16.5
*** 
Create '/your/target/site_directory' [Y/n]? Y
*** Git Repositories
*** 
Location of Git repositories [git]: [Enter]
*** SQL Database
*** 
Database server type [h2]: postgresql
Server hostname [localhost]: [Enter]
Server port [(postgresql default)]: [Enter]
Database name [reviewdb]: <pgdb>
Database username [root]: <pguser>
<pguser>'s password : <pgpwd>confirm password : <pgpwd>
*** Index
*** 
Type [lucene/?]: [Enter]
*** User Authentication
*** 
Authentication method [openid/?]: http
Get username from custom HTTP header [y/N]? [Enter]
SSO logout URL : [Enter]
Enable signed push support [y/N]? [Enter]
*** Review Labels
*** 
Install Verified label [y/N]? [Enter]
*** Email Delivery
*** 
SMTP server hostname [localhost]: smtp.mxhichinacom
SMTP server port [(default)]: 25
SMTP encryption [none/?]: 
SMTP username [root]: 你的阿里云邮邮件地址
email@email.com's password : 你的邮件密码confirm password : 重复你的邮件密码
*** Container Process
*** 
Run as [root]: [Enter]
Java runtime [/usr/lib/jvm/jdk1.8.0_201/jre]: [Enter]
Copy gerrit-2.16.5.war to /your/target/site_directory/bin/gerrit.war [Y/n]? [Enter]
Copying gerrit-2.16.5.war to /your/target/site_directory/bin/gerrit.war
*** SSH Daemon
*** 
Listen on address [*]: 
Listen on port [29418]: 
Generating SSH host key ... rsa... ed25519... ecdsa 256... ecdsa 384... ecdsa 521... done
*** HTTP Daemon
*** 
Behind reverse proxy [y/N]? y
Proxy uses SSL (https://) [y/N]? [Enter]
Subdirectory on proxy server [/]: [Enter]
Listen on address [*]: [Enter]
Listen on port [8081]: [Enter]
Canonical URL [http://<your.ip:port>/]: 
*** Cache
*** 
*** Plugins
*** 
Installing plugins.
Install plugin codemirror-editor version v2.16.5 [y/N]? [Enter]
Install plugin commit-message-length-validator version v2.16.5 [y/N]? [Enter]
Install plugin download-commands version v2.16.5 [y/N]? [Enter]
Install plugin hooks version v2.16.5 [y/N]? [Enter]
Install plugin replication version v2.16.5 [y/N]? [Enter]
Install plugin reviewnotes version v2.16.5 [y/N]? [Enter]
Install plugin singleusergroup version v2.16.5 [y/N]? [Enter]
Initializing plugins.
No plugins found with init steps.

进行完以上初始化步骤之后,还可以进一步在/your/target/site_directory/etc/gerrit.config中修改配置。例如,我们在邮件配置中加入一条from属性:

[sendemail]smtpServer = smtp.mxhichinacomsmtpServerPort = 25smtpUser = email@email.comfrom = CodeReview<email@email.com>

这样Gerrit服务就配置完成了,我们重启Gerrit:

/your/target/site_directory/bin/gerrit.sh restart

安装Apache进行反向代理

安装Apache:

apt install apache2

编辑Apache配置/etc/apache2/sites-enabled/000-default.conf,注意和你刚刚对Gerrit服务做的配置保持一致(例如8081端口、/your/target/site_directory/etc/passwords密码文件路径):

<VirtualHost *:80>ServerName <你的主机名>ProxyRequests OffProxyVia OffProxyPreserveHost On<Proxy *>Order deny,allowAllow from all</Proxy><Location /login/>AuthType BasicAuthName "Welcome to Gerrit Code Review Site"Require valid-userAuthUserFile /your/target/site_directory/etc/passwords</Location>AllowEncodedSlashes OnProxyPass / http://127.0.0.1:8081/
</VirtualHost>

配置登录账号密码

由于在上一步配置了密码文件路径,用于鉴权,我们需要在文件中添加账号信息。

touch /your/target/site_directory/etc/passwords
/usr/bin/htpasswd -b review_site/etc/passwords <你的Gerrit用户名> <密码>

重启服务,验证效果

service apache2 restart
/your/target/site_directory/bin/gerrit.sh restart

打开网页地址 http://<你的主机名>:80/,观察效果:
在这里插入图片描述

相关文章:

【Linux】在Ubuntu 16.04上安装Gerrit + PostgreSQL + Apache服务

Gerrit是一个基于Git版本控制系统的运行于Web浏览器上的Code Review工具&#xff0c;本文叙述如何在Ubuntu 16.04上安装Gerrit服务。&#xff08;当然安装Gerrit的方法有很多&#xff0c;本文只是其中之一&#xff09; 文章目录 前提安装PostgreSQL数据库并创建用户下载、配置和…...

数据倾斜那些事儿

目录 一、什么是数据倾斜&#xff1f; 二、预判与预防 三、躲闪策略 四、硬刚策略 一、什么是数据倾斜&#xff1f; 之前在大厂当了好几年的sqlboy&#xff0c;数据倾斜这个“小烦人精”确实经常在工作中出没。用简单的话来说&#xff0c;数据倾斜就像是“贫富差距”在数据…...

python考试成绩管理与分析:从列表到方差

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、考试成绩的输入与列表管理 二、成绩的总分与平均成绩计算 三、成绩方差的计算 四、成…...

Excel某列中有不连续的数据,怎么提取数据到新的列?

这里演示使用高级筛选的例子&#xff1a; 1.设置筛选条件 在D2单元格输入公式&#xff1a;COUNTA(A4)>0 这里有两个注意事项&#xff1a; *. 公式是设置在D2单元格&#xff0c;D1单元格保持为空&#xff0c; **. 为什么公式中选A4单元格&#xff0c;A列的第一个数据在A3…...

翻译《The Old New Thing》- What does it mean when a display change is temporary?

What does it mean when a display change is temporary? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080104-00/?p23923 Raymond Chen 2008年01月04日 什么叫临时性的显示设置变更&#xff1f; 当您调用ChangeDisplaySettings函数时…...

【C语言】char,short char,long char分别是多少字节,多少位,多少bit

一&#xff0c;char&#xff0c;short char&#xff0c;long char分别是多少字节 在 C 语言中&#xff0c;char、short、int、long 这些数据类型的大小是平台相关的&#xff0c;它们的大小取决于编译器和操作系统的实现。然而&#xff0c;它们的大小通常遵循以下规则&#xff…...

新V 系首批订单交付!苏州金龙助新疆游骏文旅集团打造旅运新标杆

热播剧集《我的阿勒泰》收官不久&#xff0c;6月新疆旅游旺季将至。 2024年5月下旬&#xff0c;苏州金龙海格客车新V系首批30辆正式交付新疆客户&#xff01; 作为苏州金龙海格客车新V系首批用户&#xff0c;新疆游骏文旅集团董事长王红强表示&#xff1a;“海格新V系从外观、…...

【Django】从零开始学Django【2】

五. CBV视图 Django植入了视图类这一功能&#xff0c;该功能封装了视图开发常用的代码&#xff0c;无须编写大量代码即可快速完成数据视图的开发&#xff0c;这种以类的形式实现响应与请求处理称为CBV(Class Base Views)。 1. 数据显示视图 数据显示视图是将后台的数据展示…...

【leetcode--383赎金信(使用Counter一行代码结束战斗)】

magazine中的字母组成一封赎金信&#xff0c;一个字母只能被用一次&#xff0c;看是否能完成制定赎金信 灵神思路&#xff1a;使用python内置Counter def canConstruct(self, ransomNote: str, magazine: str) -> bool:return Counter(ransomNote) < Counter(magazine) …...

pdf打开方式怎么设置默认?分享这几种设置方法

pdf打开方式怎么设置默认&#xff1f;你是否曾遇到过打开PDF文档时&#xff0c;默认的打开程序并非你所需要的&#xff0c;从而影响了工作效率&#xff1f;别担心&#xff0c;本文将为你详细解读如何设置PDF的默认打开方式&#xff0c;让你的工作更加高效便捷。 首先&#xff0…...

杂谈|RestFul和http的区别

前言 今天和我一组的小伙伴&#xff0c;在对接一个接口时&#xff0c;客户将DELETED请求设置了body参数&#xff0c;导致一个功能反复搞了半天&#xff0c;今天就来说下这两者的区别 1.HTTP概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是一种用于从WWW&…...

Nginx的Sub模块

Nginx 是一款高性能的 Web 服务器和反向代理服务器,其灵活的模块化设计使其成为许多开发者和运维人员的首选。其中,Sub 模块作为 Nginx 的一部分,提供了强大的字符串替换和正则匹配功能,本文将深入探讨 Sub 模块的用途、示例以及使用中需要注意的事项。 1. Sub 模块的用途…...

使用大模型做应用的一些问题

使用了一段时间的大模型应用&#xff0c;遇到一些问题&#xff0c;分享给大家。 使用大模型的基本情况 使用了下面三种大模型&#xff1a; 百度 ERNIE-3 kimi 大模型 chatGPT3.5 使用的大模型应用架构&#xff1a; langchainlangchain RAGlangchain Agentvector 数据…...

2024 前端面试每日1小时

三日 1. 如何理解Vue的模板编译原理 Vue的模板编译实际就是将模板字符串通过解析、优化和代码生成等步骤转换为渲染函数的过程。这个过程中&#xff0c;AST扮演了非常重要的角色&#xff0c;它用树形结构描述了模板的内容和结构&#xff0c;是编译过程的核心数据结构&#xff…...

2024.05.22学习记录

1、面经复习&#xff1a; Vue组件通讯、vuex、js严格模式、options请求、vue3 Setup 语法糖、React hook 2、代码随想录刷题&#xff1a;动态规划 3、rosebush组件库 完成Alert和Alert测试 Menu组件初步开发...

Redis与数据库同步指南:订阅Binlog实现数据一致性

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是29岁的小米,一名积极活泼、热爱分享技术的开发者。今天,我们来聊聊分布式系统中的一个重要话题——分布式一致性,特别是数据库和R…...

Spring MVC+mybatis 项目入门:旅游网(二) dispatcher与controller与Spring MVC

个人博客&#xff1a;Spring MVCmybatis 项目入门:旅游网&#xff08;二&#xff09;dispatcher与controller与Spring MVC | iwtss blog 先看这个&#xff01; 这是18年的文章&#xff0c;回收站里恢复的&#xff0c;现阶段看基本是没有参考意义的&#xff0c;技术老旧脱离时代…...

深入了解数据库与Java数据类型映射

在数据库开发和Java编程中&#xff0c;理解不同数据类型之间的映射关系对于开发高效且可靠的应用程序至关重要。数据库和Java都有各自的一套数据类型系统&#xff0c;能够正确地映射这些数据类型有助于避免数据丢失、性能问题以及其他潜在的错误。本文将详细探讨常见的数据库数…...

深刻解析 volatile 关键字和线程本地存储ThreadLocal

1.volatile关键字在Java多线程编程中的重要性 在多线程编程中&#xff0c;volatile关键字扮演着至关重要的角色&#xff0c;它确保了变量在多个线程间的可见性&#xff0c;并且能防止指令重排序&#xff0c;从而达到线程安全的目的。 1.1 保证多线程环境下变量的可见性 在Ja…...

羧甲基纤维素钠(CMC-Na)市场规模不断增长 我国生产企业众多

羧甲基纤维素钠&#xff08;CMC-Na&#xff09;市场规模不断增长 我国生产企业众多 羧甲基纤维素钠&#xff08;CMC-Na&#xff09;又称CMC-钠&#xff0c;化学式为[C6H7O2&#xff08;OH&#xff09;2OCH2COONa]n&#xff0c;是一种离子型纤维素醚。CMC-Na外观呈白色颗粒状或纤…...

Unity AssetBundle全生命周期管理实战:打包、上传、加载与卸载闭环指南

1. 这不是“打包完就完事”的流程&#xff0c;而是一条必须闭环的资源生命线在Unity项目做到中后期&#xff0c;你大概率会遇到这几个扎心时刻&#xff1a;打包后安装包体积突然暴涨300MB&#xff0c;美术说“就加了5张贴图”&#xff0c;程序查了一天发现是某张HDR天空盒被错误…...

Unity Dropdown字体高度适配全解:从结构原理到三套实操方案

1. 为什么改Dropdown字体高度会让人抓狂——从UI失衡说起在Unity项目做到中后期&#xff0c;UI团队突然甩来一张截图&#xff1a;“这个下拉菜单文字挤在一起&#xff0c;用户反馈看不清、点不准&#xff0c;上线前必须调”。你点开Hierarchy&#xff0c;选中Dropdown组件&…...

从Linux内核list.h到用户态:侵入式单向链表的设计与实现

1. 项目概述&#xff1a;从内核到应用&#xff0c;list.h的降维打击如果你在Linux内核源码里泡过&#xff0c;或者看过一些高性能的开源项目&#xff0c;一定对list.h这个文件不陌生。它位于内核源码的include/linux/目录下&#xff0c;是一个用C语言实现的、精巧绝伦的通用双向…...

服务器CPU架构对决:Chiplet与Monolithic技术解析与选型指南

1. 市场格局的悄然变迁&#xff1a;从“牙膏厂”到“撕裂者”的冲击如果你最近几年一直在关注数据中心和服务器市场&#xff0c;一个非常明显的趋势是&#xff0c;曾经由英特尔至强处理器几乎垄断的“铁王座”&#xff0c;正在被AMD的EPYC&#xff08;霄龙&#xff09;处理器一…...

写给前端的 CANN-AscendSiPBoost:昇腾信号处理加速库到底是啥?

写给前端的 CANN-AscendSiPBoost&#xff1a;昇腾信号处理加速库到底是啥&#xff1f; 之前有兄弟做音频处理&#xff0c;问我&#xff1a;“哥&#xff0c;昇腾上有没有信号处理的加速库&#xff1f;FFT、滤波这些。” 好问题。今天一次说清楚。 AscendSiPBoost 是啥&#xff…...

终极指南:3分钟掌握英雄联盟智能助手League Akari的完整使用技巧 [特殊字符]

终极指南&#xff1a;3分钟掌握英雄联盟智能助手League Akari的完整使用技巧 &#x1f680; 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想…...

5分钟快速上手:Parsec VDD虚拟显示器终极指南,解锁Windows显示新境界

5分钟快速上手&#xff1a;Parsec VDD虚拟显示器终极指南&#xff0c;解锁Windows显示新境界 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 你是否遇到过这样的困扰&#xff1f;…...

LRCGET:如何一键批量下载本地音乐歌词的终极指南

LRCGET&#xff1a;如何一键批量下载本地音乐歌词的终极指南 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否厌倦了为每一首本地音乐手动寻找歌词…...

wechatferry 高级技巧:如何实现AI驱动的智能对话机器人

wechatferry 高级技巧&#xff1a;如何实现AI驱动的智能对话机器人 【免费下载链接】wechatferry - 项目地址: https://gitcode.com/gh_mirrors/wec/wechatferry WechatFerry 是一款功能强大的微信机器人底层框架&#xff0c;通过 Node 生态下的第三方客户端实现&#x…...

地理数据可视化:地图绑定与空间分析

地理数据可视化&#xff1a;地图绑定与空间分析 前言 大家好&#xff0c;我是前端老炮儿。今天咱们来聊聊地理数据可视化&#xff01; 地理数据可视化是数据可视化领域的一个重要分支&#xff0c;它可以帮助我们直观地展示和分析空间数据。无论是地图展示、区域分析还是位置追踪…...