1. 程式人生 > >企業級Git Server服務的部署與應用

企業級Git Server服務的部署與應用

Git

開源的普及,讓使用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軟體版本的迭代更新還是釋出的比較頻繁的。下載了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

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運維圈