linux中配置Gitolite+Gitweb+Nginx步驟詳解

來源:互聯網
上載者:User


Gitolite是功能非常強大的Git伺服器構建工具,可以比較方便地實現使用者權限管理等功能。但是Gitolite是一個純粹的Git伺服器,不像Gitlab等項目,自身不具備其它的訪問和瀏覽方式。

之前的伺服器上也配置過Gitolite,同時配合Redmine來用。對我來說不管是Gitlab還是Redmine功能都太過豐富了。實際上自己的伺服器上裝Gitolite只是放一些私人庫,我只需要一個簡單直觀的Web瀏覽功能而已。論項目協作的話,不管是Github還是國內的Gitcafe和OSC都是很不錯的選擇。

所以這次挑來挑去選擇了最簡單的Gitweb來實現。所搜尋到的教程大部分是基於Apache+Gitweb的,nginx在與Gitweb的結合上則有一些額外需要配置的內容。所以寫下這篇文章稍作記錄。

目錄

Gitolite的安裝和配置

Gitweb的安裝和配置

nginx的配置

1.Gitolite的安裝和配置

①基本安裝配置

Gitolite的安裝其實很簡單。官方文檔寫的相當詳細了。

首先把程式碼複製品下來,用內建的安裝指令碼安裝到/usr/local/gitolite然後再做軟串連。

然後添加一個禁用密碼的使用者:

sudo adduser \ 
  --system \ 
  --shell /bin/bash \ 
  --group \ 
  --disabled-password \ 
  --home /home/git git

切換到該使用者並gitolite setup。admin.pub是管理員的公開金鑰,提前scp到伺服器上。


su - git
gitolite setup --pubkey admin.pub

此時本機已經可以複製gitolite-admin的repo了。

②Gitweb額外配置

為了準備Gitweb訪問,還需要一些額外的配置。主要是處理檔案系統的許可權和repo的許可權問題。

首先要修改/home/git/.gitolite.rc中的UMASK,將0007修改為0027。同時執行:


sudo usermod -a -G git www #www是我運行伺服器的使用者,自行修改
sudo chmod g+r /home/git/projects.list
sudo chmod -R g+rx /home/git/repositories

將Web伺服器的執行使用者添加到git組,並保證檔案系統許可權對現有檔案也起效。

另外要注意的一點是Gitweb通過projects.list讀取並決定哪些repo能夠顯示(確切說是顯示在首頁,後面Gitweb配置部分會提到),在Gitolite中,需要對特定repo設定許可權 R = gitweb 才能使該repo被加入到projects.list當中。

2.Gitweb的安裝和配置
①Gitweb的安裝

Gitweb直接通過包管理軟體安裝就可以。但一般來說軟體源中gitweb會把apache列為依賴,如果已經先安裝好了nginx要記得把apache的服務禁用掉。
以Debian係為例,執行:

1
sudo apt-get install gitweb highlight
其中highlight用於提供代碼高亮的功能。

②Gitweb的配置

gitweb的設定檔預設位置是/etc/gitweb.conf。下面是設定檔的範例。


# path to git projects (<project>.git)
$projectroot = "/home/git/repositories/";

# directory to use for temp files
$git_temp = "/tmp";

# target of the home link on top of all pages
#$home_link = $my_uri || "/";

# html text to include at home page
#$home_text = "indextext.html";

# file with project list; by default, simply scan the projectroot dir.
$projects_list = "/home/git/projects.list";
$strict_export = 1;

# stylesheet to use
#@stylesheets = ("static/gitweb.css");

# javascript code for gitweb
$javascript = "static/gitweb.js";

# logo to use
$logo = "static/git-logo.png";

# the 'favicon'
#$favicon = "static/git-favicon.png";

# git-diff-tree(1) options to use for generated patches
#@diff_opts = ("-M");
@diff_opts = ();

$feature {'blame'}{'default'} = [1];
$feature {'blame'}{'override'} = 1;

$feature {'snapshot'}{'default'} = ['zip', 'tgz'];
$feature {'snapshot'}{'override'} = 1;

$feature{'highlight'}{'default'} = [1];
其中$projectroot和$projects_list很好理解,指定repo的目錄和projects.list的位置。如果不指定projects.list的話,gitweb會自動在$projectroot定義的目錄下遞迴尋找合法的git repo來顯示。

$strict_export參數規定只有顯示在首頁上的repo才能夠被訪問。換句話說在有projects.list的情況下,該檔案列出的repo才能被訪問。沒有這一項的話,儘管gitolite-admin這個重要目錄不會在projects.list裡列出(誰會幹這種事……),但是可以直接通過修改url參數進行訪問。預設這個選項是沒有開的,真的是非常不安全……翻了翻開發人員的意見似乎是是確實應該預設開啟以增強安全性,但是考慮到相容性問題沒有修改。

$feature數組啟用了一些外掛程式或者說特性。blame可以顯示代碼來源人,snapshot提供repo的打包下載,highlight提供代碼高亮。

3.nginx的配置
nginx的安裝沒有什麼特殊要求,教程一大把就不講了。主要講一下如何用nginx跑起來gitweb。

nginx跑gitweb需要spawn-fcgi和fcgiwrap的輔助。

sudo apt-get install spawn-fcgi fcgiwrap

安裝好之後修改/etc/init.d/fcgiwrap,把FCGI_USER FCGI_GROUP FCGI_SOCKET_OWNER FCGI_SOCKET_GROUP都修改為運行Web伺服器的使用者(我伺服器上是www)。

然後在nginx的設定檔中添加一個新的server段

 

server {
 listen 80;
 server_name gitweb.example.com;
 access_log  /home/wwwlogs/access.log  main;

 location / {
  root /usr/share/gitweb;
  index index.cgi;
  include fastcgi_params;
  gzip off;
  fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;

  if ($uri ~ "/index.cgi") {
   fastcgi_pass unix:/var/run/fcgiwrap.socket;
  }
 }
}

這種使用fcgiwrap的方式是很簡單粗暴的,跟用php-fpm不分pool一樣。不過這裡fcgiwrap僅用來跑gitweb一個,就湊合著用吧。

重啟一下fcgiwrap和nginx,就可以看到效果了。

如果是私用的網站,可以考慮添加robots.txt以及用nginx的auth_basic添加簡單的http認證。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.