在 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
複制