天天看點

在 Ubuntu 系統上配置 Nginx Git 伺服器在 Ubuntu 系統上配置 Nginx Git 伺服器

在 Ubuntu 系統上配置 Nginx Git 伺服器

多年前發表過一篇在 Windows 系統上配置 Apache Git 伺服器的博文, 主要是用 Apache 的 Basic 認證 + git-http-backend 實作, 現在需要在公司的 vps 上再部署一個類似的簡單 git 伺服器, 這次的軟體環境如下:

  • Ubuntu 14.04.4 LTS
  • nginx/1.4.6 (Ubuntu)
  • git version 1.9.1

使用

git-http-backend

搭建 git 服務的原理都是類似的, 主要是利用 web 伺服器 (apache/nginx) 進行使用者認證, 并将使用者資訊傳遞給 CGI 程式

git-http-backend

, 進而實作通過 http 完成 git 操作。

安裝 git-core、 nginx 和 fcgiwrap

輸入下面的指令安裝需要的這三個軟體包:

apt-get install git-core nginx fcgiwrap           

複制

配置 nginx

我的目的是在 nginx 的預設網站下添加一個虛拟目錄

/git/

, 通過通路

/git/xxx.git

的形式來通路伺服器上的

xxx.git

代碼庫, 這就需要修改一下 nginx 預設網站的配置檔案

/etc/nginx/sites-available/default

, 添加下面的資訊:

# 配置以 /git 開始的虛拟目錄
location ~ /git(/.*) {
    # 使用 Basic 認證
    auth_basic "Restricted";
    # 認證的使用者檔案
    auth_basic_user_file /etc/nginx/passwd;
    # FastCGI 參數
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;
    fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    # git 庫在伺服器上的跟目錄
    fastcgi_param GIT_PROJECT_ROOT    /var/git-repos;
    fastcgi_param PATH_INFO           $1;
    # 将認證使用者資訊傳遞給 fastcgi 程式
    fastcgi_param REMOTE_USER $remote_user;
    # 包涵預設的 fastcgi 參數;
    include       fastcgi_params;
    # 将允許用戶端 post 的最大值調整為 100 兆
    max_client_body_size 100M;
}           

複制

建立 nginx 認證使用者檔案

參考 nginx ngx http auth basic module , 使用者認證檔案格式如下:

# comment
name1:password1
name2:password2:comment
name3:password3           

複制

可以使用

htpasswd

指令建立使用者, 如果伺服器上沒有這個指令的話, 可以輸入指令

apt-get install apache2-utils

來安裝這個指令, 安裝了這個指令之後, 就可以使用它來建立認證使用者了, 比如要建立使用者 user1, 輸入指令如下:

htpasswd /etc/nginx/passwd user1           

複制

然後根據提示輸入密碼就可以了。

建立 git 代碼庫

上面配置的 git 跟目錄是

/var/git-repos

, 我們在這個目錄下初始化一個空的代碼庫, 指令如下:

cd /var/git-repos
git init --bare test.git           

複制

注意檢查一下 test.git 的權限, 如果權限不足的話, 使用這個指令設定一下權限:

chmod a+rw -R test.git           

複制

重新開機 nginx 并測試

輸入指令重新開機 nginx 并測試 git 服務:

nginx -s reload
git clone https://server-name/git/test.git           

複制