需求:
在外網搭建一臺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