当前位置: 首页 > 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外观呈白色颗粒状或纤…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...