Git 守護(hù)進(jìn)程

2018-09-27 15:42 更新

對(duì)于提供公共的,非授權(quán)的只讀訪問,我們可以拋棄 HTTP 協(xié)議,改用 Git 自己的協(xié)議,這主要是出于性能和速度的考慮。Git 協(xié)議遠(yuǎn)比 HTTP 協(xié)議高效,因而訪問速度也快,所以它能節(jié)省很多用戶的時(shí)間。

重申一下,這一點(diǎn)只適用于非授權(quán)的只讀訪問。如果建在防火墻之外的服務(wù)器上,那么它所提供的服務(wù)應(yīng)該只是那些公開的只讀項(xiàng)目。如果是在防火墻之內(nèi)的服務(wù)器上,可用于支撐大量參與人員或自動(dòng)系統(tǒng)(用于持續(xù)集成或編譯的主機(jī))只讀訪問的項(xiàng)目,這樣可以省去逐一配置 SSH 公鑰的麻煩。

但不管哪種情形,Git 協(xié)議的配置設(shè)定都很簡單?;旧?,只要以守護(hù)進(jìn)程的形式運(yùn)行該命令即可:

git daemon --reuseaddr --base-path=/opt/git/ /opt/git/

這里的 --reuseaddr 選項(xiàng)表示在重啟服務(wù)前,不等之前的連接超時(shí)就立即重啟。而 --base-path 選項(xiàng)則允許克隆項(xiàng)目時(shí)不必給出完整路徑。最后面的路徑告訴 Git 守護(hù)進(jìn)程允許開放給用戶訪問的倉庫目錄。假如有防火墻,則需要為該主機(jī)的 9418 端口設(shè)置為允許通信。

以守護(hù)進(jìn)程的形式運(yùn)行該進(jìn)程的方法有很多,但主要還得看用的是什么操作系統(tǒng)。在 Ubuntu 主機(jī)上,可以用 Upstart 腳本達(dá)成。編輯該文件:

/etc/event.d/local-git-daemon

加入以下內(nèi)容:

start on startup
stop on shutdown
exec /usr/bin/git daemon \
    --user=git --group=git \
    --reuseaddr \
    --base-path=/opt/git/ \
    /opt/git/
respawn

出于安全考慮,強(qiáng)烈建議用一個(gè)對(duì)倉庫只有讀取權(quán)限的用戶身份來運(yùn)行該進(jìn)程 — 只需要簡單地新建一個(gè)名為 git-ro 的用戶(譯注:新建用戶默認(rèn)對(duì)倉庫文件不具備寫權(quán)限,但這取決于倉庫目錄的權(quán)限設(shè)定。務(wù)必確認(rèn) git-ro 對(duì)倉庫只能讀不能寫。),并用它的身份來啟動(dòng)進(jìn)程。這里為了簡化,后面我們還是用之前運(yùn)行 Gitosis 的用戶 'git'。

這樣一來,當(dāng)你重啟計(jì)算機(jī)時(shí),Git 進(jìn)程也會(huì)自動(dòng)啟動(dòng)。要是進(jìn)程意外退出或者被殺掉,也會(huì)自行重啟。在設(shè)置完成后,不重啟計(jì)算機(jī)就啟動(dòng)該守護(hù)進(jìn)程,可以運(yùn)行:

initctl start local-git-daemon

而在其他操作系統(tǒng)上,可以用 xinetd,或者 sysvinit 系統(tǒng)的腳本,或者其他類似的腳本 — 只要能讓那個(gè)命令變?yōu)槭刈o(hù)進(jìn)程并可監(jiān)控。

接下來,我們必須告訴 Gitosis 哪些倉庫允許通過 Git 協(xié)議進(jìn)行匿名只讀訪問。如果每個(gè)倉庫都設(shè)有各自的段落,可以分別指定是否允許 Git 進(jìn)程開放給用戶匿名讀取。比如允許通過 Git 協(xié)議訪問 iphone_project,可以把下面兩行加到 gitosis.conf 文件的末尾:

[repo iphone_project]
daemon = yes

在提交和推送完成后,運(yùn)行中的 Git 守護(hù)進(jìn)程就會(huì)響應(yīng)來自 9418 端口對(duì)該項(xiàng)目的訪問請(qǐng)求。

如果不考慮 Gitosis,單單起了 Git 守護(hù)進(jìn)程的話,就必須到每一個(gè)允許匿名只讀訪問的倉庫目錄內(nèi),創(chuàng)建一個(gè)特殊名稱的空文件作為標(biāo)志:

$ cd /path/to/project.git
$ touch git-daemon-export-ok

該文件的存在,表明允許 Git 守護(hù)進(jìn)程開放對(duì)該項(xiàng)目的匿名只讀訪問。

Gitosis 還能設(shè)定哪些項(xiàng)目允許放在 GitWeb 上顯示。先打開 GitWeb 的配置文件 /etc/gitweb.conf,添加以下四行:

$projects_list = "/home/git/gitosis/projects.list";
$projectroot = "/home/git/repositories";
$export_ok = "git-daemon-export-ok";
@git_base_url_list = ('git://gitserver');

接下來,只要配置各個(gè)項(xiàng)目在 Gitosis 中的 gitweb 參數(shù),便能達(dá)成是否允許 GitWeb 用戶瀏覽該項(xiàng)目。比如,要讓 iphone_project 項(xiàng)目在 GitWeb 里出現(xiàn),把 repo 的設(shè)定改成下面的樣子:

[repo iphone_project]
daemon = yes
gitweb = yes

在提交并推送過之后,GitWeb 就會(huì)自動(dòng)開始顯示 iphone_project 項(xiàng)目的細(xì)節(jié)和歷史。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)