利用Git提供的git-http-backend可以很方便的提供HTTP服务,因为是CGI方式,所以最直接的就是用Apache来部署,详见这里 。
但是,因为很多时候都会用Nginx作为伺服(效率考虑),为了资源更绿色地利用,特地奉上通过FastCGI的方式来搭建Git HTTP服务的方式。另外,为了方便灵活的授权支持,本文将提供每个git库单独授权的示例。
准备好环境:
ubuntu server: 14.04
git:1.9.1
fcgiwrap :1.1.0-2
nginx:1.4.6
安装没有什么好说的,就是要注意一下nginx运行的用户和组,git目标库,要让nginx用户组有访问权限。
nginx配置:
server { server_name git.myhost.com; access_log /var/log/nginx/git-access.log ; error_log /var/log/nginx/git-error.log ; #location ~ (/.*) { #如果你不想每个git库都单独的授权,就用这个全局通用配置 location ~ /([\w_]+).git/(.*) { auth_basic "Restricted"; auth_basic_user_file /opt/repos/git/auth/$1; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_HTTP_EXPORT_ALL true; fastcgi_param GIT_PROJECT_ROOT /opt/repos/git; #注意目录权限 fastcgi_param PATH_INFO /$1.git/$2; #fastcgi_param PATH_INFO $1; # 配合上面的全局授权 fastcgi_pass unix:/var/run/fcgiwrap.socket; #注意socket权限 } }
fastcgi_params配置:
#下面的基本是默认的配置,但是有2个不注释掉,就会出错~ fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; #fastcgi_param SCRIPT_FILENAME $request_filename; #注释掉这里 #fastcgi_param SCRIPT_NAME $fastcgi_script_name; #注释掉这里 fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param HTTPS $https if_not_empty; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; # Pass authenticated username to CGI app fastcgi_param REMOTE_USER $remote_user;