企業級Git Server服務的部署與應用
開源的普及,讓使用Git來進行版本控制管理的開發者、團隊、企業也越來越多。
市場上,無論國內外,提供的免費的Git託管服務商也越來越多。Github當然首當其衝,還有Gitlab、Bitbucket等。國內基於Git的程式碼託管也非常多,如果是面向企業,收費其實都不低。最重要的,也不是收費問題,原始碼對於企業來說是機密等級非常高的東東,放在自己的伺服器上安全等級相對來說要高一點。所以企業就需要有自己內部的Git服務解決方案了。
今天就來說說企業級的Git應用部署。
1安裝Git
當然先說Git的安裝,這裡都以CentOS 6.x 64位作業系統為例。
首先去下載Git的原始碼,當然從下面的網址去下載:
https://github.com/git/git/releases
或者:
https://www.kernel.org/pub/software/scm/git
目前可以看到Git的最新版已經發布到了2.12,我們就以這個Releases版本為例(懂C和C++的童鞋可以去折騰下Git的開發版)。
Git軟體版本的迭代更新還是釋出的比較頻繁的。下載了Git原始碼(從Github下載可能還是需要花費一些時間,原因你懂的),先別急著解壓,先來做另一件事。
2安裝系統依賴包
直接使用yum進行安裝:
yum install perl-ExtUtils-MakeMaker expat expat-devel xmlto perl-ExtUtils-MakeMakerasciidoc
如果有些軟體提示找不到的,給CentOS裝上epel的Yum源,即可安裝成功。
3配置編譯
拿到原始碼之後就行就是下面的三步了:
- 解壓
- 編譯
- 安裝
這裡重點說說編譯配置,來看看配置引數:
./configure –prefix=/usr/local/git \
–with-gitconfig=/usr/local/git/etc/gitconfig \
–with-gitattributes=/usr/local/git/etc/gitattributes \
–with-editor=/usr/bin/vim \
–with-expat \
–with-shell=/bin/bash \
–with-perl=/usr/bin/perl \
–with-zlib=/usr \
–with-curl \
–with-libpcre \
–with-openssl \
–with-iconv
這裡我們把Git安裝到/usr/local/git目錄下面,如果有Python環境的也可以通過–with-python指定Python直譯器。
在執行完configure配置命令後,編譯有兩種方式:
常規編譯:
make all -j 2
make install
這樣安裝,不會編譯man文件,編譯的時間比較快。
帶man文件的安裝方式:
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/extras/RPMS/asciidoc-8.6.9-1.el6.rfx.noarch.rpm
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/docbook2x-0.8.8-1.el6.rf.x86_64.rpm
yum localinstall asciidoc-8.6.9-1.el6.rfx.noarch.rpm docbook2x-0.8.8-1.el6.rf.x86_64.rpm
yum install xmlto texinfo
ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi
make -j 2 all doc info
make install install-gitweb install-doc install-man install-html install-info
注意這裡,安裝man文件時,需要解決幾個依賴,否則會報錯。這大概就是一個比較完整的編譯安裝,其實官方也提供man文件的下載,可以不自行編譯。
https://www.kernel.org/pub/software/scm/git/git-manpages-2.12.0.tar.gzhttps://www.kernel.org/pub/software/scm/git/git-htmldocs-2.12.0.tar.gz
4Git初始配置
完成了Git的編譯安裝後,需要進行一些初始設定。如果不設定,會出現一些問題。
n -s /usr/local/git/bin/git /usr/bin/
ln -s /usr/local/lib/libcharset.so.1 /lib/libcharset.so.1
ldconfig
mkdir /usr/local/git/etc
git –version
這裡有一個動態庫的連結配置,需要留意。執行git –version的時候,就可以看到顯示為2.12的版本。到這裡,git就正式可用了,但是還是作為客戶端來使用的。
5整合Apache
安裝了Git之後,就需要整合Apache,來提供基於http的Git服務。Apache伺服器可以使用Yum來安裝,這裡不多贅述。整合Apache配置:
<VirtualHost *:80>
ServerName git.test.com
ServerAdmin [email protected]
SetEnv GIT_PROJECT_ROOT /data/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias / /usr/local/git/libexec/git-core/git-http-backend/
<Location />
AuthType Basic
AuthName “Test Git Repository”
AuthUserFile /etc/httpd/conf.d/git.auth
Require valid-user
</Location>
</VirtualHost>
注意加粗部分的配置,這一句“/usr/local/git/libexec/git-core/git-http-backend/”就是用來整合Git和Apache的。
另外git.auth是用來做登入授權配置的,配置這授權檔案使用htpasswd命令進行配置。配置了git.auth之後,啟動Apache,就可以使用http來提供Git服務了。
6建立第一個版本庫
我們來建立第一個版本庫:
cd /data/git
git init –bare TestPorject.git
這裡還需要注意一個問題,需要把版本庫所在目錄授權給Apache的執行使用者,否則會出現無法進行git push的操作。這是Linux層的檔案許可權控制問題。
7克隆與提交版本庫
這裡就屬於客戶端的操作了。在建立好了上面的第一個版本庫後,就可以在客戶端進行Git操作了:
git clone http://git.test.com/TestPoject.git
在Clone的過程中,需要輸入在git.auth檔案中配置的使用者名稱和密碼,這點需要注意。
完成Clone操作了,就看可以在客戶端完全使用git來管理你的程式碼了。
這樣把Git部署在自己的伺服器上,就完全不限制倉庫的數量和容量問題,想建立多少就多少。
8配置基礎管理Web端
我們在配置好了上面的http服務後,可以使用git clone http://git.test.com/project.git進行程式碼的克隆,這裡雖然提供了http服務,但還不能在瀏覽器裡訪問,要實現這一Web基礎功能,還需要對Apache進行下一步的配置:
<VirtualHost *:81>
ServerName git.test.com
ServerAdmin [email protected]
<Location />
AuthType Basic
AuthName “Test Git Repository”
AuthUserFile /etc/httpd/conf.d/git.auth
Require valid-user
</Location>
DocumentRoot /var/www/gitweb
<Directory /var/www/gitweb>
Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
</Directory>
</VirtualHost>
注意這裡使用的81埠,不能再用80端了。
上面有一個/var/www/gitweb的目錄,這個目錄需要放置一些指令碼檔案:
cp -rap /usr/local/git/share/gitweb/* /var/www/gitweb/
然後需要配置/var/www/gitweb/gitweb.cgi這個檔案:
our $projectroot = “/data/git“;
our $home_link_str = “Projects”;
這裡$projectroot就需要改成版本庫的根目錄,這裡使用的是/data/git目錄。
重啟下Apache,然後就可以在瀏覽器上訪問:http://git.test.com:81/,這裡也是需要輸入使用者名稱和密碼(也即裡git.auth檔案裡配置的)。
GitWeb的UI效果就如上圖所示,這裡我們使用https://git.kernel.org/cgit/來演示。
9倉庫的備份
服務已經部署好了,並且執行起來了。但還有個很重要的問題需要引起注意,那就是:
備份,備份,備份!!
得說三遍才行!!
還記得今年年初Gitlab丟資料的故障,這可是國際級的版本託管且比較有影響力的故障事件了。
備份可以使用Shell指令碼,設定定時任務來實現備份。主要注意備份下面幾個檔案或目錄:
- /data/git
- /etc/httpd/conf.d/git.auth
- /etc/httpd/conf.d/git.conf
其中/data/git目錄就是倉庫的根目錄了,另外兩個檔案就是與Apache進行整合的配置檔案和Git訪問的使用者許可權控制檔案。
備份的方式注意一定要進行異地備份,不要備份在本機,這可是常識性問題了。
到這裡,就可以正式啟用Git服務來給自己的企業做程式碼託管了。
10第三方Git Server的解決方案
這裡推薦幾款市場上比較火的第三方的開源的Git Server解決方案:
- Gogs
- Gitlab CC
Gogs是基於Go語言開發的,Gitlab基於Ruby開發的。Gitlab比Gogs更重量級、更加麻煩一點,但網上也有一些一鍵安裝的Gitlab的指令碼,基本可以成功安裝。Gogs來說相對輕量級一點,部署也比較容易一點,同時具備了Github的大部分功能。
關於Gogs和Gitlab的具體部署,這裡就不多說了,官方都有提供比較詳細的教程和文件,可以參照官方的說明來部署。其實不管是Gogs或者Gitlab,或者自己部署Git http服務,但離不開底層的Git軟體。
文章來自微信公眾號:Python運維圈