使用gitolite-3.6搭建git鏡像服務器

需求:

    在外網搭建一臺git服務器,大家在任何聯網的地方可以向git服務器提交、clone,如果一個倉庫特別大,在公司clone一個倉庫的時候會使用時間過長,帶寬佔用等不利的因素,那我們在公司內網搭建一臺鏡像服務器,clone代碼的時候可以從鏡像服務器clone,會省很多時間,下面我們開始。

我是參照gitolite官網文檔搭建的:http://gitolite.com/gitolite/mirroring.html


環境:

    總共3臺機器,一臺在外網git主服務器(以下稱爲servser1),一臺在公司內網git鏡像服務器(以下稱爲server2),另外一臺客戶機(以下稱爲client),此實驗環境都使用的rhel6.5。

    server1的ip:192.168.1.172

    server2的ip:192.168.1.165

    client 的ip:192.168.1.180


在3臺機器的hosts文件中添加以下內容:

192.168.1.172 server1.example.com
192.168.1.165 server2.example.com


在server1和server2上安裝git,並且創建git賬戶

#yum -y install git perl-Time-HiRes 
#useradd git
#su - git


在client、server1、server2上生成key

#ssh-keygen


在client端上傳到server1、server2,並改名爲admin.pub,並且下載server1的pubkey並且命名爲server-server1.pub(此處服務器的pubkey必須以server-開頭

#scp .ssh/id_rsa.pub server1.example.com:/tmp/admin
#scp .ssh/id_rsa.pub server2.example.com:/tmp/admin
#scp server1.example.com:/home/git/.ssh/id_rsa.pub /tmp/server-server1.pub


在server1、server2上創建config文件,文件權限設置爲644

server1的配置:

#vim .ssh/config

###添加以下內容###
host server2
user git
hostname server2.example.com
identityfile ~/.ssh/id_rsa
###保存退出###

#chmod 644 .ssh/config

server2的配置:

#vim .ssh/config

####添加以下內容
host server1
user git
hostname server1.example.com
identityfile ~/.ssh/id_rsa
###保存退出###

#chmod 644 .ssh/config


在server1、server2端下載安裝gitolite

#git clone git://github.com/sitaramc/gitolite
#mkdir ~/bin
#gitolite/bin/install -to /home/git/bin
#gitolite setup -pk /tmp/admin.pub


到此我們可以在client端克隆gitolite-admin倉庫

創建server1,server2目錄以便區分是哪臺服務器的gitolite-admin倉庫

#mkdir server1
#cd server1
#git clione [email protected]:gitolite-admin
#cd gitolite-admin
#cp /tmp/server-server1.pub keydir/
#vim conf/gitolite.conf

###添加server-server1到gitolite-admin的倉庫讀寫權限###
repo gitolite-admin
    RW+     =   admin server-server1

repo testing
    RW+     =   @all
###保存退出###

#git add . && git commit -m "update gitolite.conf,add server key" && git push

創建server2目錄,重複以上步驟


在server1端執行以下命令出現 ‘hello server-server1, this is git@server2 running’消息則生效

#ssh server2 info


在client端修改server1、server2倉庫的gitolite.conf文件,添加以下內容,並且提交

repo gitolite-admin
    RW+     =   admin server-server1
    option mirror.master = server1
    option mirror.slaves = server2
    option mirror.redirectOK = all

repo testing
    RW+     =   @all
    option mirror.master = server1
    option mirror.slaves = server2
    option mirror.redirectOK = all
    
    
#git add . && git commit -m "update gitolite.conf" && git push


在server1端修改git家目錄下 .gitolite.rc文件(總共修改三個地方)

#vim .gitolite.rc

###取消註釋,更改hostname爲server1###
HOSTNAME                  =>  "server1",

###取消註釋###
 'mirror',
 'Mirroring',

在server2端修改git家目錄下 .gitolite.rc文件(總共修改三個地方)

#vim .gitolite.rc

###取消註釋,更改hostname爲server1###
HOSTNAME                  =>  "server2",

###取消註釋###
 'mirror',
 'Mirroring',

此時鏡像服務器就已經搭建完成了,我們來測試一下是否能同步


在client端server1目錄克隆一下主服務器的測試倉庫,在裏面創建文件提交以後看看是否會同步到鏡像服務器。

#git clone [email protected]:testing
#cd testing/
#touch test.txt
#git add . && git commit -m "add file" && git push origin master


在client端server2目錄克隆鏡像服務器的testing倉庫

#git clone [email protected]:testing
#ls testing

此時看到testing目錄下有test.txt文件,說明我們的鏡像服務器搭建成功了



如果所有的倉庫都做鏡像只要添加以下內容就可以了

repo @all
    option mirror.master = server1
    option mirror.slaves = server2
    option mirror.redirectOK = all




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章