上節(jié)講到如何使用在阿里云上申請一個9.9的服務(wù)器初始化配置磕秤,那么現(xiàn)在需要在這個服務(wù)器上搭建git服務(wù)器,下面來說一下我這一周多求學(xué)的知識臭笆。
一叙淌、使用gitolite搭建git服務(wù)器
1.首先使用ssh 用戶名@ip地址 遠(yuǎn)程連接到你的服務(wù)器;
2.然后輸入用戶的密碼去登錄愁铺;
3.現(xiàn)在進(jìn)去正題鹰霍,使用yum update
更新所需要的數(shù)據(jù)包,系統(tǒng)會先提示你需要更新那些包茵乱,輸入y去執(zhí)行更新茂洒;
以上是一個更新完整的過程。
4.安裝git
yum install git
安裝的順序大概和上面的一樣瓶竭,先會告訴你有哪些需要更新督勺,然后輸入y,執(zhí)行更新在验。安裝成功之后可以輸入 git 查看其相關(guān)的命令玷氏。
5.安裝perl
yum install perl
注意:在安裝perl的同時,最好把 cpan 也同時安裝一下
yum install cpan
6.安裝openssh
yum install openssh
以上這些都是開發(fā)前的環(huán)境準(zhǔn)備腋舌,現(xiàn)在開始進(jìn)入正題盏触;
7.添加git、gitadmin用戶
useradd git
//添加一個用戶名為 git 的用戶块饺,這個名字你可以隨便起
//比如赞辩,我想添加一個madman用戶,使用useradd madman
//以上解釋是害怕你們被誤導(dǎo)授艰,但是建議用戶名還是起的有意義比較好
8.相關(guān)命令
- 添加用戶的ssh登錄密碼
passwd git //為git用戶添加登錄的密碼
- 查看所有的用戶
cat /etc/passwd //這個命令用來查看所有的用戶
這里有人會問辨嗽,為什么會有這么多用戶呢?大多都是系統(tǒng)自帶的淮腾,而只有像root糟需、git這樣的以/bin/bash的屉佳,是可以使用ssh登錄的。
- 查看所有用戶的詳細(xì)信息
cat /etc/shadow
別問我用戶:后面那一長串東東是什么鬼洲押,我只能說我也不是很清楚武花,應(yīng)該有端口號,有用戶的id什么的吧杈帐,具體你們用到的時候可以上網(wǎng)搜一下体箕,那么第一個是用戶的密碼,當(dāng)然是經(jīng)過加密處理的挑童。
還有的是
ntp:!!:17357
是什么鬼累铅?這是說明這個用戶是被鎖定的,其實(shí)一開始添加 git 用戶的時候站叼,如果不給 git 用戶添加密碼娃兽,它的狀態(tài)也是被鎖定的。比如我現(xiàn)在添加一個 gitadmin 用戶來查看一下:- 刪除用戶
userdel -r gitadmin //刪除gitadmin用戶以及關(guān)聯(lián)文件
9.在 gitadmin 用戶下生成公鑰私鑰
ssh-keygen //中間敲三次回車
//第一次:默認(rèn)生成的路徑大年,回車
//第二次第三次 輸入密碼 確認(rèn)密碼换薄,建議回車
10.把私鑰移動到tmp目錄下
cp id_rsa.pub /tmp/gitadmin.pub
//ps:截圖中敲錯單詞了玉雾,不要在意這些細(xì)節(jié)翔试,最后我又改回來了
11.在 git 用戶下安裝 gitolite
首先,來到 git 用戶的home目錄下复旬,依次執(zhí)行
git clone https://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin
12.設(shè)置管理員的私鑰
在git用戶下的/bin目錄下垦缅,執(zhí)行
./gitolite setup -pk /tmp/gitadmin.pub
在git用戶下會多出兩個文件projects.list 、respositories:
respositories文件是所有的倉庫驹碍,這里在git用戶下只是做配置壁涎;
cd 到respositories目錄下,我們查看一下目錄下的東西:
13.切換到gitadmin用戶下志秃,clone git用戶下的gitolote-admin.git
git clone git@ip地址:gitolite-admin
我們看到gitadmin用戶下已經(jīng)存在了這個目錄怔球,然后查看一下這個目錄,下面有兩個文件浮还,這兩個文件一會兒再去操作:
14.現(xiàn)在我們要在本地生成公鑰私鑰竟坛,然后copy到gitadmin/gitolite-admin/keydir下,至于如何在本地生成公鑰私鑰钧舌,我之前有篇文章提到過担汤,可以去那里看一下,http://www.reibang.com/p/32690ccd101b,下面只執(zhí)行scp操作去操作本地的公鑰洼冻;
scp id_rsa.pub root@ip地址:/home/gitadmin/gitolite-admin/keydir/liding_mac.pub
來到服務(wù)器gitadmin用戶下崭歧,查看上傳的文件:
但是,我們還需要做git的一系列操作撞牢,我們先查看一下現(xiàn)在是什么狀態(tài):
我們按照提示去git add 到暫存區(qū)率碾,再去查看狀態(tài):
根據(jù)上面的提示叔营,我們再去執(zhí)行commit操作:
好吧,再根據(jù)提示告訴git你是誰所宰,再去執(zhí)行commit操作:
最后审编,我們終于可以執(zhí)行g(shù)it push操作了:
好了,最后可以看到緩存區(qū)已經(jīng)被清空了歧匈,那么通過以上操作垒酬,大概可以明白gitadmin/gitolite-admin/keydir這個文件是用來放置公鑰的;
15.下面來說一下conf這個文件件炉,我們先打開看一下這個是干什么的勘究。
可以看到里面有一個文件gitolite.conf文件,打開這個文件是上圖的代碼斟冕;那么這個文件是干什么的口糕?其實(shí)這個就是所謂的倉庫,這里面每一個repo都是一個倉庫磕蛇,一般一個項目可以關(guān)聯(lián)一個倉庫景描,我們可以使用vim打開新增或刪除這個倉庫,再和上面同樣的操作就可以了秀撇,最后使用```git clone git@ip地址:倉庫名``把空倉庫pull下來超棺,可以往里面添加?xùn)|西。
好了呵燕,以上就是整個git服務(wù)器的搭建過程棠绘,接下來就是git中鉤子的使用了。
至于什么是鉤子再扭,這里就不再做詳細(xì)解釋氧苍,從以上的搭建中,只要把用戶的本地公鑰添加到gitadmin下的keydir文件中泛范,就可以把項目pull下來直接使用让虐,也可以進(jìn)行g(shù)it的相關(guān)操作,而最終完整的項目存在于git用戶下的repositories目錄中罢荡。但是我們不可能把這個項目直接copy下來放到服務(wù)器的一個目錄下赡突,然后域名指向這個目錄中的索引文件。當(dāng)然你這樣開發(fā)完成之后再去這樣操作也是可行的柠傍,但是維護(hù)呢麸俘?總不能維護(hù)的時候再去copy一份吧,這顯然也不是一個很好的開發(fā)體驗惧笛。那么這里就需要用到git鉤子了从媚,我們每次做git操作的時候都會觸發(fā)這個鉤子執(zhí)行一系列的操作,去更新服務(wù)器中的文件患整,想想就比較完美拜效。那么喷众,接下來我會一步一步操作去演示到千。
二般眉、使用git鉤子完善完美的git服務(wù)器
1.首先柿汛,我們切換到gitadmin 用戶项玛,來到gitolite-admin/conf/目錄下稍计,在gitolite.conf中添加一個新的倉庫剥哑,比如下圖中的ipaiban-admin:
然后執(zhí)行g(shù)it status,根據(jù)相關(guān)提示進(jìn)行一系列的git操作,以上都有,這里不再重復(fù)了姜骡。
那么,現(xiàn)在我們就可以從本地正常git clone下來這個倉庫了,但是這是一個空倉庫,先不要管他。
2.切換到git用戶下稽煤,可以看到在repositories中已經(jīng)有了ipaiban-admin.git目錄
我們查看一下ipaiban-admin.git目錄里都有什么:
別的目錄都不要管匾二,可以看到有個hooks目錄,繼續(xù)查看
好了睹限,這里就是我們要找的目錄了,我們需要在這個目錄下創(chuàng)建鉤子文件:
使用vi 創(chuàng)建一個新文件
vi post-receive
在這個文件中寫shell腳本并保存:
#!/bin/sh
unset GIT_DIR
MYDIR=ipaiban-admin
cd mnt/work/$MYDIR
git pull
git checkout dev
sudo cp -rfu ./* /mnt/w3c/$MYDIR
cd /mnt/w3c/
sudo chown -R www.www $MYDIR
3.來到掛載的硬盤mnt下,創(chuàng)建兩個目錄:work 以及 w3c
mkdir work
mkdir w3c
sudo chown -R www.www w3c
sudo chown -R git.git work
然后分別在w3c下和work下創(chuàng)建ipaiban-admin目錄诚亚;
需要注意的是work一定要分給git 用戶,并且需要生成git用戶的公鑰敏释,并放到gitadmin下的keydir文件里面并執(zhí)行g(shù)it一系列提交操作义屏;
結(jié)束語:(重要)
OK,到這里基本已經(jīng)結(jié)束了蜂大,最后要做的是把域名指向w3c下的ipaiban-admin就可以了闽铐,這里只適合測試服務(wù)器,而正式服務(wù)器的操作最好不要用鉤子直接關(guān)聯(lián)奶浦,而是把正式服務(wù)器生成密鑰加到測試服務(wù)器的keydir文件里兄墅,需要更新到正式服務(wù)器的時候,手動執(zhí)行一下上面的腳本澳叉,有人會發(fā)現(xiàn)隙咸,我在shell腳本里都切換到了dev分支,為什么呢成洗?因為一般master分支是用來搭建主體架構(gòu)的五督,不建議直接進(jìn)行開發(fā),需要建一個分支去開發(fā)泌枪,這里我建立了一個dev分支概荷,而實(shí)際開發(fā)中還需要real分支,就是正式分支碌燕,在dev分支上開發(fā)測試完成之后,合并到real分支去继薛。
Happy Hacking~