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 [email protected]:/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 [email protected]:/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