原文:http://aaba.me/blog/2014/03/setup-a-private-http-nginx-based-git-server.html

https://doomzhou.github.io/git/linux/2016/03/30/git-over-http-by-nginx.html

参考:http://beginor.github.io/2016/03/12/http-git-server-on-nginx.html

« Downgrade Lightroom 5 catalog back to Lightroom 4 | Home | jsp tag属性的动态求值 »

March 22, 2014

Setup a private http/nginx based GIT server

搭建一个私有的GIT服务器,我们的需求不多:

  • http访问,使用nginx
  • web浏览界面
  • 简单的http base验证

操作系统为某个发行版的debian, 很多无关的细节都会略过,会有一些简单nginx的fastcgi配置说明。

查了很多资料,得出这些结论:

  • 使用git-http-backend 支持客户端访问,支持smart HTTP protocol
  • 使用gitweb 支持浏览器访问
  • 以上两个模块是普通的cgi,需要用fcgiwrap包装成fast-cgi
  • 可以使用nginx的fast-cgi支持
  • nginx的fast-cgi是代理,真正的fastcgi进程需要使用spawn-fcgi启动

启动spawn-fcgi

这里指定了监听的端口(9001),进程(2个,可以根据实际需要增加),最后一个参数是fcgiwrap的位置

spawn-fcgi -a 127.0.0.1 -p 9001 -F 2 /usr/local/sbin/fcgiwrap

debian默认的fcgiwrap好像有些问题,按照别人的[经验](http://stackoverflow.com/questions/14304922/nginx-fcgiwrapper-error-cannot-get-script-name)自己安装了一个。 这里启动的fcgiwrap进程监听在9001端口,nginx使用fastcgi的协议和它们交互,执行的真正脚本通过fcgi参数传过来,稍后就会配置到。 **安装好git, gitweb,创建git目录**

mkdir /data/git

修改 /etc/gitweb.conf ,gitweb需要知道代码放在哪里

# path to git projects (.git)
$projectroot = "/data/git";

**配置nginx** 配置文件里提到的auth_basic_user_file文件,可以用htpasswd(apache2)生成

server {
listen 80;
server_name my_git_server.com; # gitweb的非cgi资源
location ~ \.(png|css|js)$ {
root /usr/share/gitweb;
}
# gitweb
location /gitweb {
auth_basic "Restricted";
auth_basic_user_file /path_to_passwd;
# fcgiwrap is set up to listen on this host:port
fastcgi_pass 127.0.0.1:9001;
include fastcgi_params;
# fcgiwrapper执行这个文件
fastcgi_param SCRIPT_FILENAME /usr/share/gitweb/index.cgi;
} # git client
location / {
auth_basic "Restricted";
auth_basic_user_file /path_to_passwd;
# fcgiwrap is set up to listen on this host:port
fastcgi_pass 127.0.0.1:9001;
include fastcgi_params;
# fcgiwrapper执行这个文件
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
# export all repositories under GIT_PROJECT_ROOT
fastcgi_param GIT_HTTP_EXPORT_ALL "";
# git目录
fastcgi_param GIT_PROJECT_ROOT /data/git;
fastcgi_param PATH_INFO $1;
# 把用户带上,否则push会失败
fastcgi_param REMOTE_USER $remote_user;
}
}

按照上面步骤,一个基本可用的GIT就准备好了,如果你遇到了一些问题,比如,访问gitweb返回403错误,一般都出现在fcgiwrapper的执行上,可以把spawn-fcgi使用-n参数启动,看错误输出。

新建项目

在/data/git目录

$ mkdir my-new-repo.git
$ cd my-new-repo.git
$ git --bare init

切换到gitweb,就可以看到了。如果要提交代码,记得检查spawn-fcgi启动的用户要有写入/data/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 http://server-name/git/test.git

Setup a private http/nginx based GIT server的更多相关文章

  1. Setup Git Server in CentOS 6.3

    0. Environment: Server machine: CentOS 6.3 x86 Client machine: Windows 10 Pro x86_64 1. Install ssh ...

  2. How to Setup a Private Proxy Server on EC2 in Under 10 Minutes

    How to Setup a Private Proxy Server on EC2 in Under 10 Minutes I’ve been slacking a bit with regular ...

  3. # 基于Gitolite搭建Git Server - 支持SSH&HTTP

    Git, 一个分布式的版本管理工具,我认为其革命性的点:在于改变了用户协作的方式,使得协作更简单. 下面讲述 使用一个开源软件 Gitolite搭建一个Git Sever, 并给了一个推荐的团队协助方 ...

  4. 安全防范:nginx下git引发的隐私泄露问题

    安全防范:nginx下git引发的隐私泄露问题 1   安全事件 最近阿里云服务器后台管理系统中收到一条安全提示消息,系统配置信息泄露: http://my.domain.com/.git/confi ...

  5. Ubuntu server 搭建Git server

    Ubuntu server 搭建Git server,git相比svn,最主要就是分布式了,每个客户端用户的本地都是一个版本管理控制器. Ubuntu server 版本为12.04 搭建步骤如下: ...

  6. ubuntu 14.04 安装git server

    版本信息 ubuntu : 14.04.1 git version 1.9.1 perl v5.10.1 ssh OpenSSH_6.6.1p1 本次安装的git server使用gitolite实现 ...

  7. 逐步在Windows上结合CopSSH + msysGit安装安装Git Server同时集成Git使用Visual Studio

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  8. 已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步代码时,还是提示输入密码?

    GitHub虽好,但毕竟在国内访问不是很稳定,速度也不快,而且推送到上面的源码等资料必须公开,除非你给他交了保护费:所以有条件的话,建议大家搭建自己的Git Server.本地和局域网服务器都好,不信 ...

  9. centos 6.9 +nginx 配置GIT HTTPS服务器(证书采用自签名)

    第一部分原通过SSH访问的GIT服务器迁移 1.把原服务器GIT资源库目录完成复制至新的服务器 2.安装GIT服务器 新的服务器 创建用户 useradd git password git 下载GIT ...

随机推荐

  1. about hibernate lazy load and solution

    about hibernate lazy load is that used when loaded again.it can increase efficienty and sava memory. ...

  2. CentOS 6.0找不到ifcfg-eth0解决方案

    症状:     /etc/sysconfig/network-scripts/中只有ifcfg-lo文件,而没有ifcfg-eth0. 终端中执行命令ifconfig显示的信息为ifcfg-lo的信息 ...

  3. jxls导出EXCEL模板

    http://jxls.sourceforge.net/ InputStream templateInput = null; InputStream in = null; OutputStream o ...

  4. Python 邮件发送

    python发送各类邮件的主要方法   python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点.     一.相关模块介绍 ...

  5. 新版本的jquery checkbox 全选反选代码只能执行一遍,第二次就失败attr与prop区别

    $("#all_check").click(function() { $("input[name='checkShop[]']").attr("che ...

  6. Java判断PC端还是移动端

    package com.*.*.*; import java.io.IOException;import java.util.regex.Matcher;import java.util.regex. ...

  7. Spring Timer实现

    定时器:继承java.util.TimerTask类实现run方法 package com.zbb.framework.util.timer; import java.util.TimerTask; ...

  8. 第19讲 不带参数功能FC的编程与应用

  9. treecnt

    treecnt  ﹡    LH (命题人)   基准时间限制:1 秒 空间限制:131072 KB 分值: 40 给定一棵n个节点的树,从1到n标号.选择k个点,你需要选择一些边使得这k个点通过选择 ...

  10. 恢复SQLSERVER被误删除的数据(转)

    恢复SQLSERVER被误删除的数据 曾经想实现Log Explorer for SQL Server的功能,利用ldf里面的日志来还原误删除的数据 这里有一篇文章做到了,不过似乎不是所有的数据类型都 ...