搭建安卓源碼服務(wù)器,repo+gerrit+git環(huán)境,代碼審核

安裝ubuntu-14.04.5-server-amd64

我司使用的是Dell服務(wù)器,做好啟動U盤,使用工具rufus-usb。
Dell服務(wù)器的界面與普通PC不同,不過基本原理是一樣的,BIOS設(shè)置為UEFI。
開機(jī)時按F11,進(jìn)入BootManager,選擇啟動項,其中有啟動U盤的啟動項,確認(rèn)后即可開始安裝。
為方便使用,安裝的語言選擇為中文。
分區(qū)使用了整個磁盤,將原來的系統(tǒng)刪除。

安裝gitolite服務(wù)器

Gitolite介紹

Gittolite是基于git搭建一個中央代碼服務(wù)器,有以下特點:

  • 支持多個用戶,多個倉庫
  • 支持多個層次的權(quán)限控制,支持到倉庫的branch和tag的權(quán)限訪問
  • ssh安全訪問協(xié)議
  • 不需要http服務(wù)器等其他依賴,更少的資源占用
  • 簡單、靈活的管理

Gitolite安裝成功后會創(chuàng)建一個名為gitolite-admin的特殊倉庫,這個倉庫里面管理著Gitolite的配置文件,在這些配置文件中可以添加刪除用戶、倉庫,也可以定義一些權(quán)限控制規(guī)則。

認(rèn)證與授權(quán)

Gitolite不做認(rèn)證(authentication),只做授權(quán)(authorisation)。

  • 認(rèn)證(authentication)。由ssh服務(wù)來認(rèn)證訪問賬號的合法性。
  • 授權(quán)(authorisation)。授予某個賬號的訪問權(quán)限。

Gitolite安裝和啟動

Gitolite是管理Git的倉庫,所以必須要安裝Git。

安裝Gitolite

  1. 切換到git用戶賬號:su – git
  2. 安裝SSH,一般來說服務(wù)器上都已經(jīng)安裝SSH了
  3. 獲取Gitolite代碼,git clone git://github.com/sitaramc/gitolite
  4. 創(chuàng)建Gitolite安裝目錄。mkdir -p ~/bin
  5. 開始安裝。gitolite/install -to ~/bin
  6. 添加管理員公鑰。這個管理員公鑰就是對應(yīng)著擁有管理代碼倉庫的權(quán)限,非常重要。把自己的公鑰admin.pub上傳到服務(wù)器,添加到Gitolite中。gitolite setup -pk admin.pub

管理Gitolite

管理Gitolite也很簡單,它是通過一個Git倉庫來管理的。安裝好Gitolite后,會默認(rèn)生成一個gitolite-admin的倉庫。管理員可以把這個倉庫clone到本地:

git clone git@host:gitolite-admin
git clone git@host:gitolite-admin
這個倉庫有兩個目錄:
keydir,存放用戶認(rèn)證的公鑰文件目錄
conf,存放Gitolite配置的文件的目錄
gitolite.conf,gitolite配置文件

用戶

添加用戶本質(zhì)是把該用戶的公鑰文件添加到gitolite-admin倉庫中。比如想添加一個用戶foo:
把foo的公鑰文件重命名為foo.pub
把foo.pub文件放到gitolite-admin/keydir目錄中,并提交到遠(yuǎn)程倉庫
刪除用戶也類似,只不過把該用戶的的公鑰文件移出gitolite-admin倉庫。
有時候一個用戶有多個公鑰文件。這種情況下,就需要把這些同名的公鑰文件放到keydir不同的子目錄下。比如foo用戶的多個公鑰文件如下放置:

keydir/home/foo.pub
keydir/laptop/foo.pub
keydir/desktop/foo.pub

只要這些公鑰都是命名為foo.pub,在不同的目錄下不沖突。

倉庫

添加倉庫
添加一個倉庫很簡單,編輯gitolite-admin倉庫里面的gitolite-admin/conf/gitolite.conf即可。我們可以看下初始的gitolite.conf文件內(nèi)容:

repo gitolite-admin
    RW+     =   admin

repo testing
    RW+     =   @all

repo gitolite-admin
    RW+     =   admin
 
repo testing
    RW+     =   @all

repo name,就是定義一個名為name的倉庫??梢钥吹紾itolite里面有兩個默認(rèn)的倉庫,gitolite-admin和testing。

下面的RW+ = admin則便是這個倉庫的權(quán)限控制規(guī)則,可以看到這個倉庫只允許admin可讀可寫可管理。

我們可以用以下代碼添加一個新的bar倉庫:

repo bar
    RW+     =   foo

repo bar
    RW+     =   foo

我們在gitolite.conf文件中添加一個foo的倉庫,實際存放在服務(wù)器上的倉庫目錄名是foo.git。這個新倉庫只允許foo用戶可讀可寫可管理。

你可以把兩個具有一樣的訪問權(quán)限的倉庫定義成一行,如下:

repo a b c
    RW+     =   foo
    R       =   admin

repo a b c
    RW+     =   foo
    R       =   admin

這樣,a、b、c就是3個具有相同的訪問權(quán)限的倉庫了,foo用戶可以讀可寫可管理,admin用戶只能可讀。

刪除、重名倉庫

刪除倉庫稍微麻煩一點:

  1. 從gitolite.conf刪除倉庫的定義
  2. 登陸到服務(wù)器,刪除服務(wù)器上對應(yīng)的倉庫
    重命名倉庫也是如此,修改gitolite.conf文件,然后修改服務(wù)器上對應(yīng)倉庫的名字。

導(dǎo)入現(xiàn)有倉庫

直接把一個倉庫放入Gitolite倉庫目錄是不行的,它有幾個要求:

  • 倉庫必須是bare倉庫
  • 倉庫目錄名必須以.git結(jié)尾
  • 倉庫里面所有的文件和目錄的歸屬(ownded)和可寫于Gitolite用戶賬號。
  • 運(yùn)行g(shù)itolite setup

用戶組和倉庫組

你可以把用戶或者倉庫定義成一個組,對這個組賦予某種屬性,就是對組內(nèi)所有的成員都賦予同樣的屬性。這對批量的處理某些問題很有幫助。
組名以@開頭,如下定義一個3個成員的組:

@developers = dilbert alice wally

也可以累積分別定義,效果跟上面一樣:


@developers = dilbert
@developers = alice
@developers = wally

你也可以把一個組放到另外一個組里面:
@developers     =   dilbert alice
@interns        =   ashok
@staff          =   @interns @developers
@developers     =   wally

注意,后來添加到develpoers組的wally并不在staff組里面。

如下是個使用組定義倉庫和它用戶的例子:

@developers     =   dilbert alice wally//三個用戶
@foss-repos     =   git gitolite//兩個倉庫

repo @foss-repos
    RW+         =   @developer

@developers     =   dilbert alice wally
@foss-repos     =   git gitolite
 
repo @foss-repos
    RW+         =   @developer

特殊組

@all表示所有的倉庫或者所有的用戶。

訪問權(quán)限

緊跟著一個倉庫后面的就是這個倉庫的訪問權(quán)限規(guī)則,有以下幾種權(quán)限:
R,表示可讀權(quán)限
RW,表示fast-forward push分支,創(chuàng)建新分支和tag權(quán)限。不能回轉(zhuǎn)、刪除分支
RW+,可以做任何事情
'-'表示拒絕訪問
以下面的配置為例子:

repo foo bar

    RW+                     =   alice @teamleads
    -   master              =   dilbert @devteam
    -   refs/tags/v[0-9]    =   dilbert @devteam
    RW+ dev/                =   dilbert @devteam
    RW                      =   dilbert @devteam
    R                       =   @managers
  • alice 和teamleads組可以做任何事情
  • dilbert @devteam權(quán)限
    • 可以對/dev分支做任何事情,不能寫,刪除master
    • 可以fast-forward push分支,創(chuàng)建新分支和tag權(quán)限
    • 除了以v開頭tag,可以創(chuàng)建其他tags
  • managers只能讀倉庫

你還可以創(chuàng)建一個倉庫組,在同一個倉庫組里面的倉庫具有相同的權(quán)限,如下:

repo @myrepos
    RW+     =   alice

@myrepos    =   foo
@myrepos    =   bar
@myrepos    =   zzq

這樣,有3個倉庫foo、bar、zzq都在myrepos同一個倉庫組里面,具有相同的訪問權(quán)限。

gitolite.conf

gitolite.conf有兩個重要的作用:定義倉庫名和定義倉庫的訪問權(quán)限。

基本語法
所有的東西都是用空格分隔
可以使用#表示注釋
用戶名和倉庫名都是以字母開頭,可以包含.、_、-。用戶名還可以是電子郵件地址
組名類似用戶名,但不能是電子郵件地址
倉庫名可以包含/,用來表示目錄結(jié)構(gòu)

include其他配置

Gitolite允許你把配置放在另外的.conf文件里,然后在gitolite.conf把這些配置文件include進(jìn)來就可以了。比如include “foo.conf”,就把foo.conf文件里面的配置包括進(jìn)來了。

gitolite配置參考鏈接

完成和驗證

到打印出如下結(jié)果gitolite安裝完成。

初始化空的 Git 倉庫于 /home/gitolite/repositories/gitolite-admin.git/
初始化空的 Git 倉庫于 /home/gitolite/repositories/testing.git

這是創(chuàng)建了兩個倉庫,一個是管理倉庫gitolite-admin.git,另一個是測試使用的testings.git.
現(xiàn)在要做的是要從gitolite服務(wù)器中把gitolite-admin.git拉取下來進(jìn)行project和權(quán)限的管理

遇到的問題及其說明

創(chuàng)建新用戶并同時創(chuàng)建主目錄--useradd -m xxxname
設(shè)置密碼--passwd xxxname,然后再輸入密碼

gitolite 不在 sudoers 文件中。此事將被報告

sudo命令可以讓你以root身份執(zhí)行命令,來完成一些我們這個帳號完成不了的任務(wù)。
其實并非所有用戶都能夠執(zhí)行sudo,因為有權(quán)限的用戶都在/etc/sudoers中呢。
我們可以通過編輯器來打開/etc/sudoers,或者直接使用命令visudo來搞定這件事情。
打開sudoers后,像如下那樣加上自己的帳號保存后就可以了。

# User privilege specification
root    ALL=(ALL:ALL) ALL
gitolite ALL=(ALL:ALL) ALL

sudoers的權(quán)限是0440,即只有root才能讀。在你用root或sudo后強(qiáng)行保存(wq!)即可.
測試通過后開始下面的安裝

repo環(huán)境配置

概要

repo是Android為了方便管理多個git庫而開發(fā)的Python腳本。repo的出現(xiàn),并非為了取代git,而是為了讓Android開發(fā)者更為有效的利用git。
Android源碼包含數(shù)百個git庫,僅僅是下載這么多git庫就是一項繁重的任務(wù),所以在下載源碼時,Android就引入了repo。 Android官方推薦下載repo的方法是通過Linux curl命令,下載完后,為repo腳本添加可執(zhí)行權(quán)限:

$ git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo  > ~/bin/repo
$ chmod a+x ~/bin/repo
$ cp repo/repo .    //在~bin目錄下
再將~/bin添加到環(huán)境變量,這樣就可以使用repo命令了

工作原理

repo需要關(guān)注當(dāng)前git庫的數(shù)量、名稱、路徑等,有了這些基本信息,才能對這些git庫進(jìn)行操作。通過集中維護(hù)所有g(shù)it庫的清單,repo可以方便的從清單中獲取git庫的信息。 這份清單會隨著版本演進(jìn)升級而產(chǎn)生變化,同時也有一些本地的修改定制需求,所以,repo是通過一個git庫來管理項目的清單文件的,這個git庫名字叫manifest。

當(dāng)打開repo這個可執(zhí)行的python腳本后,發(fā)現(xiàn)代碼量并不大(不超過1000行),難道僅這一個腳本就完成了AOSP數(shù)百個git庫的管理嗎?并非如此。 repo是一系列腳本的集合,這些腳本也是通過git庫來維護(hù)的,這個git庫名字叫repo

在客戶端使用repo初始化一個項目時,就會從遠(yuǎn)程把manifests和repo這兩個git庫拷貝到本地,但這對于Android開發(fā)人員來說,又是近乎無形的(一般通過文件管理器,是無法看到這兩個git庫的)。 repo將自動化的管理信息都隱藏根目錄的.repo子目錄中。

項目清單庫(.repo/manifests)

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote  name="origin" fetch=".." review="https://android-review.googlesource.com/" />
<default revision="master" remote="origin"/>
<project path="repo-test1" name="platform/repo-test1"/>
<project path="repo-test2" name="platform/repo-test2"/>
</manifest>

注意project的path和name后面不要有/

  • <remote>:描述了遠(yuǎn)程倉庫的基本信息。name描述的是一個遠(yuǎn)程倉庫的名稱,通常我們看到的命名是origin;fetch用作項目名稱的前緣,在構(gòu)造項目倉庫遠(yuǎn)程地址時使用到;review描述的是用作code review的server地址

  • <default>:default標(biāo)簽的定義的屬性,將作為<project>標(biāo)簽的默認(rèn)屬性,在<project>標(biāo)簽中,也可以重寫這些屬性。屬性revision表示當(dāng)前的版本,也就是我們俗稱的分支;屬性remote描述的是默認(rèn)使用的遠(yuǎn)程倉庫名稱,即<remote>標(biāo)簽中name的屬性值;屬性sync-j表示在同步遠(yuǎn)程代碼時,并發(fā)的任務(wù)數(shù)量,配置高的機(jī)器可以將這個值調(diào)大

  • <project>:每一個repo管理的git庫,就是對應(yīng)到一個<project>標(biāo)簽,path描述的是項目相對于遠(yuǎn)程倉庫URL的路徑,同時將作為對應(yīng)的git庫在本地代碼的路徑; name用于定義項目名稱,命名方式采用的是整個項目URL的相對地址。 譬如,AOSP項目的URL為https://android.googlesource.com/,命名為platform/build的git庫,訪問的URL就是https://android.googlesource.com/platform/build
    如果需要新增或替換一些git庫,可以通過修改default.xml來實現(xiàn),repo會根據(jù)配置信息,自動化管理。但直接對default.xml的定制,可能會導(dǎo)致下一次更新項目清單時,與遠(yuǎn)程default.xml發(fā)生沖突。 因此,repo提供了一個種更為靈活的定制方式local_manifests:所有的定制是遵循default.xml規(guī)范的,文件名可以自定義,譬如local_manifest.xml, another_local_manifest.xml等, 將定制的XML放在新建的.repo/local_manifests子目錄即可。repo會遍歷.repo/local_manifests目錄下的所有*.xml文件,最終與default.xml合并成一個總的項目清單文件manifest.xml。
    問題的疑難點在于manifest中的配置,manifest.git相對于它管理的倉庫的路徑關(guān)系在remote節(jié)點配置的

在服務(wù)器創(chuàng)建倉庫

在創(chuàng)建好default.xml后,提交到服務(wù)器。
然后在服務(wù)器端,利用default.xml生成src.txt,再寫個腳本自動創(chuàng)建所有的git倉庫。
生成src.txt

cat default.xml | cut -d '"'   -f 2 > src.txt
命令解釋:
cat default.xml是輸出文件內(nèi)容
| 是管道,文件內(nèi)容被定向輸出到管道
cut 是針對行截取,-d是自定義分隔符為 "
-f 2顯示之前分隔開的第二個區(qū)域,比如行
   <project name="platform/build" path="build/" />
按"截取后為 project  name=  platform/build   path=  build/
下標(biāo)從0開始,第二個區(qū)域為platform/build.
>src.txt定向輸出到文件src.txt

cut詳細(xì)參數(shù):
-b :以字節(jié)為單位進(jìn)行分割。這些字節(jié)位置將忽略多字節(jié)字符邊界,除非也指定了 -n 標(biāo)志。
-c :以字符為單位進(jìn)行分割。
-d :自定義分隔符,默認(rèn)為制表符。
-f :與-d一起使用,指定顯示哪個區(qū)域。
-n :取消分割多字節(jié)字符。僅和 -b 標(biāo)志一起使用。如果字符的最后一個字節(jié)落在由 -b 標(biāo)志的 List 參數(shù)指示的<br />范圍之內(nèi),該字符將被寫出;否則,該字符將被排除。
cut詳細(xì)用法
生成src.txt后,里面會有一些不必要的行,文件首尾有一些不需要的行,如下:

1.0  //去掉
<manifest>  //去掉
origin  //去掉
origin  //去掉

android/platform/9820e/build
core/root.mk  //去掉
    </project>  //去掉


#/bin/bash
set -x
set -e
pwd=${PWD}

cd /home/gitolite/repositories#此處要根據(jù)實際的repositories路徑修改
while read line; do
    if [ -z "$line" ]; then
        echo $work_dir not exist !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1>&2
        continue
    fi
        git init --bare $line.git    
#初始化裸倉庫,使用--bare選項時,不再生成.git目錄,而是只生成.git目錄下面的版本歷史記錄文件,這些版本歷史記錄文件也不再存放在.git目錄下面,而是直接存放在版本庫的根目錄下面
        echo ==== $line
        pwd
done

運(yùn)行此腳本,會在/home/gitolite/repositoires下面生成相關(guān)倉庫
如下:

abi.git       build.git    developers.git   external.git    hardware.git         ndk.git    sdk.git       u-boot.git
art.git       chipram.git  development.git  flyscale.git    kernel.git           packages   system.git    vendor.git
bionic.git    cts.git      device.git       frameworks.git  libcore.git          pdk.git    tools.git
bootable.git  dalvik.git   docs.git         gen.git         libnativehelper.git  prebuilts  u-boot64.git

但是有一個問題,這樣雖然初始化了裸倉庫,但是由于沒有在gitolite中進(jìn)行添加和配置,客戶端是不能提交成功能,所以所有的這些倉庫必須都被 gitolite管理起來才可以。那如上方法就不可取了。

使用腳本生成gitolite.conf

因為要建立上百個倉庫,不可能全部手動進(jìn)行配置,我們需要使用腳本來生成gitolite.conf。
腳本很簡單:

#/bin/bash

set -x #追蹤代碼執(zhí)行情況
set -e #當(dāng)腳本執(zhí)行出現(xiàn)意料之外的情況時,立即退出,避免錯誤被忽略,導(dǎo)致最終結(jié)果不正確

work_dir=$1 #傳入的第一個參數(shù)

pwd=${PWD}
echo $pwd start create gitrepo...
while read line; do
        echo repo $line >> gitolite.conf  #倉庫名稱
        echo     RW+     =   @user >> gitolite.conf  #權(quán)限配置
done

同樣利用到了src.txt,執(zhí)行命令cat src.txt | ./con-tools.sh
這樣就配置好了,再執(zhí)行如下命令提交gitolite-admin

git add -all
git commit -m "更新gitolite.conf"
git push origin master

執(zhí)行完之后 在/home/gitolite/repositories下面就生成了對應(yīng)的所有倉庫。

客戶端上傳源碼

首先要準(zhǔn)備一份沒有建立git的源碼。根據(jù)default.xml生成des.txt,生成的命令如下

cat default.xml | cut -d ‘”’ -f 4 > des.txt
//關(guān)于該命令的含義前面已經(jīng)說過,

使用如下腳本進(jìn)行倉庫的批量初始化和提交

#/bin/bash

set -x #追蹤代碼執(zhí)行情況
set -e #當(dāng)腳本執(zhí)行出現(xiàn)意料之外的情況時,立即退出,避免錯誤被忽略,導(dǎo)致最終結(jié)果不正確

para1=
work_dir=$1 #傳入的第一個參數(shù)

pwd=${PWD}
echo $pwd start create gitrepo...
while read line; do
    echo readline
    line1=${line%%/*}
    if [ -z "$line" ]; then
        echo $work_dir not exist !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1>&2
        continue
    fi
    if [ $(ls -A $pwd/$line | wc -l) -eq 0 ]; then
        echo $work_dir empty !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1>&2
        continue
    fi
    workdir=$pwd/$line
    echo ==== $workdir
    cd $workdir  #以下是提交流程
        rm -rf .git
        git init .  1>&2
        git add . -f 1>&2
        git commit -m "Initial commit" 1>&2
        git push --set-upstream gitolite@192.168.1.104:/platform/$line.git master --force
done

執(zhí)行如下命令進(jìn)行批量提交:
cat des.txt | ./des.sh

客戶端下載代碼

  1. 客戶端需要首先下載git-repo倉庫,并配置環(huán)境變量,這樣才能使用repo命令
    git clone gitolite@192.168.1.104:git-repo.git
    然后把repo配置到環(huán)境變量中。
  2. repo init -u gitolite@192.168.1.104:/platform/manifest.git
  3. repo sync

repo upload

set -x
set -e
Shell腳本$的含義

錯誤處理

  1. 執(zhí)行repo init報錯
    rror: manifest missing or unreadable -- please run init
  2. repo: no branches ready for upload
    https://blog.csdn.net/armwind/article/details/52488961

參考鏈接:
repo工作原理
default.xml文件配置詳解
repo客戶端安裝
修改/etc/profile出錯后恢復(fù)

搭建Gerrit代碼審核服務(wù)器

參考鏈接
參考鏈接
下載wget http://gerrit-releases.storage.googleapis.com/gerrit-2.8.1.war
下載路徑/usr/local/

安裝apache2報依賴錯誤的問題,只需要把依賴包安裝指定版本的即可。
解決依賴錯誤

apache2啟動失敗,參考Log:/var/log/apache2/error.log

登錄mysql并修改用戶

啟動gerrit服務(wù)
./gerrit.sh start

登錄mysql數(shù)據(jù)庫
格式:mysql -u[用戶名] -p
示例,用戶名root:
mysql -uroot -p
show databases;//查看所有數(shù)據(jù)庫

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| reviewdb           |
+--------------------+
4 rows in set (0.02 sec)

information_schema數(shù)據(jù)庫是MySQL自帶的,它提供了訪問數(shù)據(jù)庫元數(shù)據(jù)的方式。詳細(xì)information_schema
reviewdb是gerrit使用的數(shù)據(jù)庫
use reviewdb;//使用reviewd數(shù)據(jù)庫
//確認(rèn)使用的數(shù)據(jù)庫

mysql> select database();
+------------+
| database() |
+------------+
| reviewdb   |
+------------+
1 row in set (0.00 sec)

//查看reviewdb中的所有表

mysql> show tables;
+-----------------------------+
| Tables_in_reviewdb          |
+-----------------------------+
| account_group_by_id         |
| account_group_by_id_aud     |
| account_group_id            |
| account_group_members       |
| account_group_members_audit |
| account_group_names         |
| account_groups              |
| account_id                  |
| change_id                   |
| change_messages             |
| changes                     |
| patch_comments              |
| patch_set_approvals         |
| patch_sets                  |
| schema_version              |
| system_config               |
+-----------------------------+
16 rows in set (0.01 sec)

修改gerrit認(rèn)證方式

gerrit有多種身份驗證方法,身份驗證方法決定了如何登錄Gerrit。

  1. OPENID,如果你想掛入某個現(xiàn)有的身份驗證提供方(例如GoogleAccounts),那么可以使用OpenID。
  2. development_become_any_account,如果是用于測試和學(xué)習(xí),可以選擇最簡單的development_become_any_account。
  3. HTTP認(rèn)證也是可選的認(rèn)證方式,此認(rèn)證方式下需要配置Apache的反向代理,并在Apache中配置Web站點的口令認(rèn)證,通過口令認(rèn)證后gerrit在創(chuàng)建賬號的過程中會詢問用戶的郵件地址并發(fā)送確認(rèn)郵件。
  4. LDAP, LDAP全稱Lightweight Directory Access Protocol,輕量目錄訪問協(xié)議。使用用戶名和密碼。
    在etc/gerrit.config下的
[auth]
        type = LDAP

使用HTTP認(rèn)證需要使用反向代理

我司使用的HTTP進(jìn)行認(rèn)證。
反向代理:反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器。

配置說明

下面是我的配置,服務(wù)器地址192.168.1.104,代理端口9999,被代理端口10000。本機(jī)回環(huán)IP127.0.1.1

  1. 在/etc/apache2/下創(chuàng)建httpd.conf
#add gerrit reverse proxy --bianjb
<VirtualHost *:9999>    #代理端口9999
    ServerName 192.168.1.104
    ProxyPreserveHost On    #開啟反向代理
    ProxyRequests Off
    <Proxy *>    #訪問權(quán)限規(guī)則
        Order deny,allow  
        Allow from all  
    </Proxy>
    <Location /login/>  #登錄成功轉(zhuǎn)到登錄界面
      AuthType Basic
      AuthName "Welcomme to Gerrit Code Review Site!"
      Require valid-user
      AuthBasicProvider file
      AuthUserFile /home/gerrit/review_site/etc/passwd    #用戶驗證使用的文件,需要自行創(chuàng)建
    </Location>
    ProxyPass / http://127.0.1.1:10000/    #被代理地下
</VirtualHost>

AuthUserFile /home/gerrit/review_site/etc/passwd,我放在了這個目錄下,可以自行指定,創(chuàng)建方法如下:

sudo touch /home/gerrit/review_site/etc/passwd  //創(chuàng)建文件
sudo htpasswd -b home/gerrit/review_site/etc/passwd  username passwd
//使用htpasswd幫助信息
htpasswd -h

后面登錄的時候就可以使用useranme+passwd進(jìn)行登錄 了。

  1. 在/etc/apache2/apache2.conf中引入我們新建的httpd.conf
Include httpd.conf
  1. 配置/etc/apache2/ports.conf
Listen 80    #apache2默認(rèn)監(jiān)聽的端口
Listen 9999  #新添加監(jiān)聽9999端口作為代理
  1. 重啟apache2服務(wù)
sudo service apache2 restart

現(xiàn)在就可以訪問服務(wù)器了,如下圖:


image.png

登錄成功后如圖:


image.png

配置Gerrit開機(jī)啟動

  1. 安裝gerrit的時候,會有一個安裝目錄,在它的下面有個 bin/gerrit.sh文件,把這個文件拷貝到/etc/init.d下 改名叫做 gerrit
  2. 然后用sysv-rc-conf工具,這個沒有可以直接apt-get install進(jìn)行安裝
  3. 運(yùn)行sysv-rc-conf
    image.png

    找到gerrit的那一行,把2~5都X上。

搭建起來還是挺費(fèi)勁的,歡迎各位交流指正!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容