linux中配置Gitolite+Gitweb+Nginx步骤详解

Gitolite是功能非常强大的Git服务器构建工具,可以比较方便地实现用户权限管理等功能。但是Gitolite是一个纯粹的Git服务器,不像Gitlab等项目,自身不具备其它的访问和浏览方式。

之前的服务器上也配置过Gitolite,同时配合Redmine来用。对我来说不管是Gitlab还是Redmine功能都太过丰富了。实际上自己的服务器上装Gitolite只是放一些私有库,我只需要一个简单直观的Web浏览功能而已。论项目协作的话,不管是Github还是国内的Gitcafe和OSC都是很不错的选择。

所以这次挑来挑去选择了最简单的Gitweb来实现。所搜索到的教程大部分是基于Apache+Gitweb的,nginx在与Gitweb的结合上则有一些额外需要配置的内容。所以写下这篇文章稍作记录。

目录

Gitolite的安装和配置

Gitweb的安装和配置

nginx的配置

1.Gitolite的安装和配置

①基本安装配置

Gitolite的安装其实很简单。官方文档写的相当详细了。

首先把代码克隆下来,用自带的安装脚本安装到/usr/local/gitolite然后再做软连接。

然后添加一个禁用密码的用户:

sudo adduser \ 
  --system \ 
  --shell /bin/bash \ 
  --group \ 
  --disabled-password \ 
  --home /home/git git

切换到该用户并gitolite setup。admin.pub是管理员的公钥,提前scp到服务器上。

su - git
gitolite setup --pubkey admin.pub

此时本机已经可以克隆gitolite-admin的repo了。

②Gitweb额外配置

为了准备Gitweb访问,还需要一些额外的配置。主要是处理文件系统的权限和repo的权限问题。

首先要修改/home/git/.gitolite.rc中的UMASK,将0007修改为0027。同时执行:

sudo usermod -a -G git www #www是我运行服务器的用户,自行修改
sudo chmod g+r /home/git/projects.list
sudo chmod -R g+rx /home/git/repositories

将Web服务器的执行用户添加到git组,并保证文件系统权限对现有文件也起效。

另外要注意的一点是Gitweb通过projects.list读取并决定哪些repo能够显示(确切说是显示在首页,后面Gitweb配置部分会提到),在Gitolite中,需要对特定repo设置权限 R = gitweb 才能使该repo被加入到projects.list当中。

2.Gitweb的安装和配置
①Gitweb的安装

Gitweb直接通过包管理软件安装就可以。但一般来说软件源中gitweb会把apache列为依赖,如果已经先安装好了nginx要记得把apache的服务禁用掉。
以Debian系为例,执行:

1
sudo apt-get install gitweb highlight
其中highlight用于提供代码高亮的功能。

②Gitweb的配置

gitweb的配置文件默认位置是/etc/gitweb.conf。下面是配置文件的范例。

# path to git projects (<project>.git)
$projectroot = "/home/git/repositories/";

# directory to use for temp files
$git_temp = "/tmp";

# target of the home link on top of all pages
#$home_link = $my_uri || "/";

# html text to include at home page
#$home_text = "indextext.html";

# file with project list; by default, simply scan the projectroot dir.
$projects_list = "/home/git/projects.list";
$strict_export = 1;

# stylesheet to use
#@stylesheets = ("static/gitweb.css");

# javascript code for gitweb
$javascript = "static/gitweb.js";

# logo to use
$logo = "static/git-logo.png";

# the 'favicon'
#$favicon = "static/git-favicon.png";

# git-diff-tree(1) options to use for generated patches
#@diff_opts = ("-M");
@diff_opts = ();

$feature {'blame'}{'default'} = [1];
$feature {'blame'}{'override'} = 1;

$feature {'snapshot'}{'default'} = ['zip', 'tgz'];
$feature {'snapshot'}{'override'} = 1;

$feature{'highlight'}{'default'} = [1];
其中$projectroot和$projects_list很好理解,指定repo的目录和projects.list的位置。如果不指定projects.list的话,gitweb会自动在$projectroot定义的目录下递归查找合法的git repo来显示。

$strict_export参数规定只有显示在首页上的repo才能够被访问。换句话说在有projects.list的情况下,该文件列出的repo才能被访问。没有这一项的话,尽管gitolite-admin这个重要目录不会在projects.list里列出(谁会干这种事……),但是可以直接通过修改url参数进行访问。默认这个选项是没有开的,真的是非常不安全……翻了翻开发者的意见似乎是是确实应该默认打开以增强安全性,但是考虑到兼容性问题没有修改。

$feature数组启用了一些插件或者说特性。blame可以显示代码来源人,snapshot提供repo的打包下载,highlight提供代码高亮。

3.nginx的配置
nginx的安装没有什么特殊要求,教程一大把就不讲了。主要讲一下如何用nginx跑起来gitweb。

nginx跑gitweb需要spawn-fcgi和fcgiwrap的辅助。

sudo apt-get install spawn-fcgi fcgiwrap

安装好之后修改/etc/init.d/fcgiwrap,把FCGI_USER FCGI_GROUP FCGI_SOCKET_OWNER FCGI_SOCKET_GROUP都修改为运行Web服务器的用户(我服务器上是www)。

然后在nginx的配置文件中添加一个新的server段

 

server {
 listen 80;
 server_name gitweb.example.com;
 access_log  /home/wwwlogs/access.log  main;

 location / {
  root /usr/share/gitweb;
  index index.cgi;
  include fastcgi_params;
  gzip off;
  fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;

  if ($uri ~ "/index.cgi") {
   fastcgi_pass unix:/var/run/fcgiwrap.socket;
  }
 }
}

这种使用fcgiwrap的方式是很简单粗暴的,跟用php-fpm不分pool一样。不过这里fcgiwrap仅用来跑gitweb一个,就凑合着用吧。

重启一下fcgiwrap和nginx,就可以看到效果了。

如果是私用的站点,可以考虑添加robots.txt以及用nginx的auth_basic添加简单的http认证。

时间: 2024-10-29 09:58:04

linux中配置Gitolite+Gitweb+Nginx步骤详解的相关文章

Linux下配置Shadowsocks服务器的步骤详解

说明: Shadowsocks是一个轻量级的socks5代理软件, 而hadowsocks-libev是一个基于shadowsocks 协议的socks5代理软件, 相比原版,hadowsocks-libev程序体积小.高并发.资源占用更少.跨平台.完全兼容shadowsocks协议. hadowsocks-libev包括三个模块: ss-server:服务器端,部署在远程服务器,提供shadowsocks服务. ss-local:客户端,提供本地socks5协议代理. ss-redir:客户端

Linux中编译安装MemcacheQ的步骤详解

队列(Queue)是一种常用的数据结构.在队列这种数据结构中,最先插入的元素将会最先被取出:反之最后插入的元素将会最后被取出,因此队列又称为"先进先出"(FIFO:First In First Out)的线性表. 加入元素的一端叫"队尾",取出元素的一端叫"队头".利用消息队列可以很好地异步处理数据的传送和存储,当遇到频繁且密集地向后端数据库中插入数据时,就可采用消息队列来异步处理这些数据写入. MemcacheQ是一款基于Memcache协议的

linux中512M VPS内存优化步骤详解

512M的VPS优化apache内存 查看目前占用内存 Ps aux|grep httpd 基本一个占用50M左右 ps aux|grep httpd | wc –l 一共13个,减去grep httpd 那行 12个,说明占用大约600M 超过了服务器512M内存, (相比之下nginx主进程占用50M,带着php-fpm跑,一个fpm占用2M,开启10个fpm进程,一共70M的内存就足够了.) 标准Linux Apache配置在Apache的配置文件在/etc/httpd/conf/http

Linux中安装rsync同步工具步骤详解

 rsync是一款服务器与服务器这间的同步工具了,通常我们可以利用rsync来实时数据同步操作了,下面我一起来看看安装rsync同步软件的教程.   安装 rsync-3.1.0.tar.gz  #tar zxvf rsync-3.1.0.tar.gz #cd rsync-3.1.0 #./configure --prefix=/home/work/rsync #make  #make install rsync服务端的配置: 环境:192.168.11.11为生产机:192.168.11.12

Linux中安装jdk1.6 x64步骤详解

下载jdk1.6 进入oracle官网,依次选择 Downloads-->Java SE-->拉倒网页最底部,点击Previous Releases - Java Archive后的DOENLOAD按钮,选择Java SE 6,选择Java SE Development Kit 6u45,选择Accept License Agreement后下载这个(下载时需要登录): blob.png 拷贝至服务器/usr/local # chmod +x jdk-6u45-linux-x64.bin #

linux中安装php solr扩展步骤详解

从http://pecl.php.net/package/solr下载最新版本. 解压后运行: phpize ./configure make install 在/etc/php.d下随便复制一个扩展的文件,把里面加载的扩展改成solr.so.重启php-fpm加载solr扩展:service php-fpm reload 然后修改php.ini(vim /usr/local/etc/php.ini ),把 extension_dir = "./" 修改为 extension_dir

Linux系统安装配置PHP环境(Apache2)教程详解

在Linux环境下配置安装PHP环境(Apache2),参考了一些别人的配置方法,遇到问题上网查.下面就是安装步骤:   一.安装Apache2.2.22 1.到官网下载  http://httpd.apache.org/download.cgi    2.解压    tar  -zxvf httpd-2.2.22.tar.gz 3.建立目标文件夹(注意以下所有操作都时在root用户下执行的)    mkdir /usr/local/apache2    也就是说等下安装的apache2要安装到

linux中crontab命令启动/重启/停止详解

linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令. 一.crond简介 crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,cron

linux中samba的部署及应用详解

samba: 启动服务:nmb.server:smb.server 会通过文件系统的方式输出给客户端 smb:Service Message Block:服务信息块 cifs:Common Internet File System,通用互联网文件系统 samba:Andrew Tridgell:热情奔放的桑巴舞,主要的协议 cifs,协议 1.功能: 文件系统共享: NetBIOS协议: 打印服务: 2.工作模型 peer to peer(Work Group):工作组模型 domain dev