VPS上搭建Subversion服务器手记

Subversion(下文简称SVN)是有名的版本控制软件,尤其适合多人在不同的地方,通过Internet,进行软件源码的控制与管理。最近我打算和同事协同开发一些东西,所以决定充分挖掘俺们的Linode VPS的有利资源,把SVN的服务端给装到VPS上。这样,我们就能通过SVN来远程协作开发软件了。 之前我也没在Linux下装过SVN服务端,所以也没什么经验,通过在网上的资料搜索,终于找到一些比较合适的教程来参考。网上大多的教程,提到安装SVN服务端,需要配合apache服务器。不过这下可让我郁闷了,我的Linode,是用的LNMP架构,Web Server是Nginx,貌似网上也啥文章提到用Nginx来搭配SVN的。本打算再装一个Apache的,突然在一篇教程看到原来SVN服务器除了借助apache之外,还可以以一种相对独立的方式进行安装。于是俺壮胆在VPS上装了一下,果然成功了。所以打算以此文作为安装Subversion服务端的一篇手记,也顺便备忘,以后可能还会用到。

先提一下我的服务器环境: Linode的VPS,安装了Ubuntu的 32位OS,并且用LNMP一键安装包,搭建了web环境。为了不安装apache,也不打算通过http来访问SVN,只需要客户端可以Commit & update 就可以。所以,我打算通过安装SVN独立服务器的方式,来搭建SVN服务端。

下面介绍一下安装步骤:

第一步,获取Subversion的最新版本,官网地址:http://subversion.apache.org 我打算采用获取源代码并编译安装的方式,直接获取官方最新的源代码,并下载。目前最新版本为:subversion-1.6.12 需要下载的源码包,有两个 a. subversion-1.6.12.tar.gz b.subversion-deps-1.6.12.tar.gz 这个包是一些从apache中提取出来的依赖文件,必装!

第二步,解压源码压缩包,并编译安装Subversion

tar xfvz subversion-1.6.12.tar.gz
tar xfvz subversion-deps-1.6.12.tar.gz
cd subversion-1.12.6
./configure --prefix=/usr/local/svn --without-berkeley-db

(注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db) 接下来,直接编译和安装

make && make install

安装好后,可以测试一下Subversion是否正确安装:

/usr/local/svn/bin/svnserve --version

如果显示出Subversion的相关版本信息,表示安装正常

第三步,配置Subversion

首先,确定你的源代码数据存放的地方,这里我用/usr/local/svndata来存放我的源代码数据

mkdir /usr/local/svndata
#然后建立一个测试项目的目录testproject,并用这个目录作为该项目的repository
mkdir /usr/local/svndata/testproject
#为testproject建立版本库
/usr/local/svn/bin/svnadmin create /usr/local/svndata/testproject

版本库建立好后,进入此目录,你会发现Subversion已经为你生成好了目录和配置文件,用来存放你的源码的数据和版本控制信息,这些你不用太多关心了,我们需要关注的是该目录下的/conf/svnserve.conf。此文件包含了testproject的版本库配置信息。用vim或者nano修改此文件,加入以下信息:

[general]

anon-access = none

auth-access = write

password-db = /usr/local/svn/conf/passwd.conf

authz-db = /usr/local/svn/conf/authz.conf

realm = testproject

此信息中,包含了一些权限设置,以及SVN的用户名、密码验证配置相关信息。这里为了方便使用,我将password-db和authz-db都统一放到了svn里面,这样,让多个版本库可以共享同样的密码和验证信息。

接下来,直接来到/usr/local/svn,建立conf目录,并建立passwd.conf和authz.conf文件。

我们先来看看passwd.conf:

[users]

username = password

username2 = password2

比较好理解, 除了个users标签,后面的每一行,对应访问SVN的用户名和密码,中间以等号隔开,保存后,直接退出。

我们再来看看authz.conf文件:

[groups]

admin = username, username2

[/]

@admin = rw

groups表示用户组,这里吧username,username2都设置到一个叫admin的组里面。

[/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/usr/local/svndata,[/]就是表示对全部版本库设置权限。@admin=rw 表示admin组的所有用户,都有读写权限。关于此配置文件的具体设置项,可以到官网参考一下。

第四步,在一切配置文件就绪后,就可以启动Subversion了。这里为了VPS的安全起见,不推荐以root身份运行Subversion,所以,我们需要为Subversion添加一个Linux运行帐号。

useradd svn -d /home/svn -s /bin/sh
#然后,以svn用户的身份,运行Subversion服务端
su - svn -c "/usr/local/svn/bin/svnserve -d --listen-port 8888 -r /usr/local/svndata"
#-d 表示后台运行此进程,监听端口为8888

这样,Subversion的服务端就启动了,为了确保万无一失,可以用命令确认:netstat -anp|grep svnserve,会出现类似下面的结果 tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 13711/svnserve 这样,服务端启动好后,我们可以通过客户端进行访问了,例如在俺的Win7,实现装好了SVN客户端,就可以通过这样的地址来访问testproject:

svn://{your-server-ip}:8888/testproject/

若你发现不能访问,确保你的VPS的iptables是否允许8888端口通过,具体的配置,可以参考我之前的一篇iptables规则配置的文章

从运行的效果来看,Subversion的服务端,会占用很少的内存,感觉非常良好。

此文也到此为止,打完收工~~

支持原创技术分享,据说打赏我的人,都找到了女朋友!