CentOS Gitweb Nginx 私服搭建

CentOS Gitweb Nginx 私服搭建

 

参考:

http://blog.csdn.net/lifetragedy/article/details/51658266

 

安装软件:

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel

$ yum install -y git gitweb spawn-fcgi fcgi-devel fcgi

 

Gitweb,仅支持 git clone gituser@hostname:/repositories这样的协议 我们需要让git支持http协议的图形化的界面

 

spawn-fcgi,因为nginx默认是不支持cgi的,而gitweb是用cgi写的,因此我们才安装fastcgi,而fastcgi又要通过spawn-fcgi来启动

 

 

安装fcgiwrap

wget  https://codeload.github.com/gnosek/fcgiwrap/legacy.tar.gz/master

 

tar -xvf gnosek-fcgiwrap-1.1.0-18-g99c942c.tar.gz 

cd gnosek-fcgiwrap-99c942c/

 

autoreconf -i  

./configure --prefix=/你的安装目录/fcgiwrap

make && make install  

ls -l /etc/init.d/ |grep spawn-fcgi 

 

 

/etc/init.d 目录下有一个spawn-fcgi程序

/usr/bin 目录下有一个spawn-fcgi程序

/var/www/git目录下是gitweb所有的文件(网页版git)

/etc/目录下有一个gitweb.conf文件

/etc/sysconfig/目录下有一个spawn-fcgi文件

 

修改/etc/gitweb.conf文件

 

$projectroot = "/home/git/repositories";  

 

@git_base_url_list= ("git://192.168.0.101", "http://192.168.0.101:81");  

$git_temp = "/tmp";  

$home_link = $my_uri || "/";

$home_text = "indextext.html";  

$projects_list = $projectroot;

@stylesheets = ("static/gitweb.css");  

$javascript = "static/gitweb.js";  

$logo = "static/git-logo.png";  

$favicon = "static/git-favicon.png"; 

@diff_opts = ();  

$feature{pathinfo}{default} = [1];  

$feature{'highlight'}{'default'} = [1];  

 

修改/etc/sysconfig/spawn-fcgi文件

FCGI_SOCKET=/var/run/fcgiwrap.socket  

FCGI_PROGRAM=/usr/local/sbin/fcgiwrap  

FCGI_USER=nginx  

FCGI_GROUP=nginx  

FCGI_EXTRA_OPTIONS="-M 0700"  

OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"  

 

启动spawn-fcgi

 

chkconfig --levels 2345 spawn-fcgi on  

/etc/init.d/spawn-fcgi start  

 

把spawn-fcgi设为开机启动,并启动该服务,该服务成功启动后会在:

/var/run目录下生成一个fcgiwrap.socket文件。

 

使用root用户创建git用户

useradd -d 指定工作目录/home/git -g 用户组git -m 用户名git

设置密码

passwd git

 

more /etc/passwd

创建目录

mkdir gitrepo

授权

chmod 750 工作目录/home/git

chown -R 用户名.用户组 工作目录/home/git/gitrepo

 

su git

cd 

生成.ssh

ssh-keygen

 

cd 工作目录/home/git

 

touch .ssh/authorized_keys

 

 

cd gitrepo

创建连接文件

ln -s /var/www/git/gitweb.cgi 

ln -s /var/www/git/static  

 

初始化仓库

git init --bare 仓库名称.git

 

chmod -R 775 仓库名称.git

 

cd 仓库名称.git

 

客户端通过ECLIPSE的JGIT连上GIT的远程服务后会发送一个git-upload指令。

同时服务端会回一个git-receive给到客户端做“接收”请求的准备,但是git服务默认对于这个receive的值为false,因此如果你没有做特殊处理后,在eclipse连上git后会发生一个can not find git-receive这样的错误,解决办法是:

 

su git  

cd /home/git/repositories/hello.git  

git config --file config http.receivepack true  

 

 

nginx配置(权限参考 Nginx添加htpasswd认证配置 

server {  

      error_log    /nginx/logs/git.error.log;  

      access_log   /nginx/logs/git.access.log;  

      listen       81;  

      server_name  域名;  

 

     

      index gitweb.cgi;

      root /home/git/gitrepo;

 

 

      auth_basic "Authorized users only";

      auth_basic_user_file /home/conf/git.auth.conf;

 

      location ~ \.(cgi|pl).*$ {  

            gzip off;  

            fastcgi_pass unix:/var/run/fcgiwrap.socket;  

            fastcgi_param  SCRIPT_FILENAME    /var/www/git/gitweb.cgi;    

            fastcgi_param  SCRIPT_NAME        gitweb.cgi;    

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  

            include fastcgi_params;  

      }  

 

      location ~ ^.*\.git/objects/([0-9a-f]+/[0-9a-f]+|pack/pack-[0-9a-f]+.(pack|idx))$ {  

            root /home/git/gitrepo;

       }

  

      location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ {  

            root /home/git/gitrepo;  

            fastcgi_param QUERY_STRING $query_string;  

            fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend;  

            fastcgi_param GIT_HTTP_EXPORT_ALL true;  

            fastcgi_param GIT_PROJECT_ROOT /home/git/gitrepo;  

            fastcgi_param PATH_INFO $uri;  

            include fastcgi_params;  

            fastcgi_pass unix:/var/run/fcgiwrap.socket;           

       }

  

      try_files $uri @gitweb;  

      

      location @gitweb {  

            fastcgi_pass unix:/var/run/fcgiwrap.socket;  

            fastcgi_param SCRIPT_FILENAME /var/www/git/gitweb.cgi;  

            fastcgi_param PATH_INFO $uri;  

            fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;  

            include fastcgi_params;  

      }

}  

 

 

 

客户端操作

git init

git clone git@192.168.1.101:/home/git/repositories/hello.git  (会使用到git用户的密码)

touch readme #新建一个readme文本文件  

vi readme #随便在此文件中写点什么然后保存退出即可  

git add . 代表把当前目录内所有东西进行远程推送  

git commit -a -m “init helloworld“ #代表commit所有之前add过的东东,并且带上commit时的注释  

git remote add origin git@192.168.1.101:/home/git/repositories/hello.git #建立远程GIT连接  

git push origin master #正式推送 

 

 

修改git用户不可登录:

vi /etc/passwd

git:x:500:500::/home/git:/bin/bash ##此行注释掉

git:x:500:500:git version control:/home/git:/usr/bin/git-shell

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值