首页 > Lijia > 搭建svn和git服务
2013
11-07

搭建svn和git服务

下面就开始搭建svn和git的服务,我们只需要搭建一个最基本的服务,有浏览功能就好。

我们用apache来提供svn和git服务,这样就能集成LDAP身份验证了,这次,我打算使用https来提高安全性,所以还要自己给自己颁发个证书。

首先要安装,如果没安装apache也可以顺便装下:

$ yum install httpd mod_ssl

其实安装好以后就可以用https来访问web服务器了,这里我在自己生成一个证书:

$ yum install openssl
$ openssl genrsa -out tiwb.key 1024
$ openssl req -new -key tiwb.key -out tiwb.csr
$ openssl x509 -days 3650 -req -in tiwb.csr -signkey tiwb.key -out tiwb.crt
$ mv tiwb.key /etc/pki/tls/private
$ mv tiwb.crt /etc/pki/tls/certs

然后修改/etc/httpd/conf.d/ssl.conf

ServerName tiwb.net:443
SSLCertificateFile /etc/pki/tls/certs/tiwb.crt
SSLCertificateKeyFile /etc/pki/tls/private/tiwb.key

如果想让所有的http全部自动重定向到https,可以建立一个虚拟主机。

配置文件/etc/httpd/conf.d/ssl_redirect.conf

<VirtualHost *:80>
  ServerName tiwb.net
  Redirect permanent / https://tiwb.net/
</VirtualHost>

然后重起http服务器测试效果:

$ service httpd restart

由于是自己签名的证书,在打开网站时会提示证书不被信任,我反正是自己用,可以把证书下载下来添加到受信任的证书颁发机构里。

给虚拟机附加第二块数据盘

在安装svn前我先给服务器再挂一块虚拟硬盘用来放数据:

$ qemu-img create -f qcow2 data.qcow2 100G
$ virsh edit svn

然后编辑虚拟机配置文件$ virsh edit svn,在<device>下添加下面内容:

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none'/>
  <source file='/home/emu/data.qcow2'/>
  <target dev='vdb' bus='virtio'/>
</disk>

重起虚拟机后, 可以再系统里看到/dev/vdb这个设备。下面我们格式化这块硬盘,并把它挂到/data下。

先给硬盘分区, 分一个区就可以了, 用cfdisk简单一些:

$ cfdisk /dev/vdb

分好区后格式化一下:

$ mkfs.ext4 /dev/vdb1

下面要让这个分区能在开机时自动挂载,在/etc/fstab里添加:

/dev/vdb1     /data       ext4    defaults    0 0

最后还要记得建立/data这个文件夹,否则挂载会失败,完成后就可以重起看看效果了。

安装svn服务

首先安装apache的svn模块:

$ yum install mod_dav_svn

我们把svn的根目录设置为/data/svn,先建一个测试svn的库:

$ mkdir /data/svn
$ cd /data/svn
$ svnadmin create test
$ chown -R apache:apache test

然后修改配置文件/etc/http/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
  DAV svn
  SVNParentPath /data/svn
  SvnListParentPath on
  SSLRequireSSL
</Location>

重起httpd服务后就可以用浏览器访问https://tiwb.net/svn/来查看效果了。

SVN集成LDAP验证

刚才架设的svn服务器是没有用户验证的,下面我们来集成LDAP验证。

首先要安装apache的ldap模块:

$ yum install mod_authz_ldap

然后更新subversion服务的配置:

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn/>
  DAV svn
  SVNParentPath /data/svn
  SvnListParentPath on
  SSLRequireSSL

  AuthType Basic
  AuthName "Please login"
  AuthBasicProvider ldap
  AuthLDAPURL "ldap://ldap.tiwb.net/ou=Users,dc=tiwb,dc=net?uid?sub"
  AuthLDAPBindDN "cn=Manager,dc=tiwb,dc=net"
  AuthLDAPBindPassword "secret"
  AuthzSVNAccessFile /data/svn/authz
  Require valid-user
</Location>

我们只集成了LDAP的用户验证,组还是需要用svn自带的authz。所以还要建立组配置文件/data/svn/autnz

[groups]
team1=user1,user2,user3
team2=user1,user4

[/]
*=r

[test:/]
*=
@team1=rw

安装git服务

下面安装git服务, 跟svn差不多,首先安装git

$ yum install git

然后安装一个gitlist,你可以在gitlist.org上找到最新版的下载地址。

$ wget https://s3.amazonaws.com/gitlist/gitlist-0.4.0.tar.gz
$ tar -xvf gitlist-0.4.0.tar.gz
$ mv gitlist /var/www/
$ cd /var/www/gitlist
$ mv config.ini-example config.ini
$ mkdir cache
$ chmod 777 cache

然后修改/var/www/gitlist/config.ini中git库的路径:

repositories[] = '/data/git/'

克隆一个测试库:

$ mkdir -p /data/git
$ cd /data/git
$ git clone --bare https://github.com/klaussilveira/gitlist.git gitlist.git
$ chown -R apache:apache gitlist.git

最后增加一个apache的配置文件/etc/httpd/conf.d/git.conf

SetEnv GIT_PROJECT_ROOT /data/git
SetEnv GIT_HTTP_EXPORT_ALL

ScriptAliasMatch \
  "(?x)^/git/(.*/(HEAD | \
                  info/refs | \
                  objects/(info/[^/]+ | \
                      [0-9a-f]{2}/[0-9a-f]{38} | \
                      pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                  git-(upload|receive)-pack))$" \
  /usr/libexec/git-core/git-http-backend/$1

Alias /git /var/www/gitlist

<Directory /var/www/gitlist>
  AllowOverride None
  Options -MultiViews

  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ /git/index.php [L]
</Directory>

<Location /git/>
  AuthType Basic
  AuthName "Please login"
  AuthBasicProvider ldap
  AuthLDAPURL "ldap://ldap.tiwb.net/ou=users,dc=tiwb,dc=net?uid?sub"
  AuthLDAPBindDN "cn=Manager,dc=tiwb,dc=net"
  AuthLDAPBindPassword "secret"
  Require valid-user
  SSLRequireSSL
</Location>

git客户端的证书设置

如果你自己创建了https的根证书,那么git的客户端还需要信任这个证书,你可以把你的证书加到客户端的根证书里,也可以配置下客户端不要验证证书的有效性。

为了方便,我先设置下不要验证证书有效性。可以直接使用git命令修改全局设置:

$ git config --global http.sslverify false

如果使用的时图形界面的git,可以直接修改全局配置文件。

最后编辑:
作者:wy182000
这个作者貌似有点懒,什么都没有留下。

留下一个回复