在 CentOS 上搭建 SVN 服务端
在 CentOS 上搭建 SVN 服务端
这篇记一次在 CentOS 上从零搭 SVN 服务端的过程:装包、建仓库、配用户和权限、再用 Apache httpd 把仓库通过浏览器/SVN 客户端暴露出去。下面命令里的用户名 user1/user2 和主机名 svn-server 都是占位,换成自己的。
安装依赖包
要跑起来需要三个包:Apache httpd、mod_dav_svn 和 subversion。其中 httpd 作为 Web 服务对外提供访问。本文用 CentOS,从 yum 仓库取包;想用 nginx、lighttpd 或其他熟悉的 Web 服务替换 httpd 也可以。
yum install -y httpd
yum install -y subversion
yum install -y mod_dav_svn
创建仓库
先建一个专门放 SVN 仓库的目录。这步可选,但规模一大就是个好习惯:
mkdir /data/svn
创建第一个仓库(这里叫 repo1)。因为客户端后面要通过浏览器或 SVN 客户端访问,把目录所有权交给 apache(Web 服务的属主):
svnadmin create /data/svn/repo1
chown -R apache:apache /data/svn/repo1
建好后仓库目录下会自动生成一批默认文件和文件夹:
conf db format hooks locks README.txt
进 conf 目录,能看到三个配置文件:
authz passwd svnserve.conf
配置用户与权限
编辑 svnserve.conf,关闭匿名访问、开放认证用户的写权限,并指定用户库和权限库文件:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
用 htpasswd 建用户库。第一个用户加 -c 创建文件,后续的不要加 -c(否则会覆盖):
htpasswd -c /data/svn/repo1/conf/passwd user1
htpasswd /data/svn/repo1/conf/passwd user2
htpasswd /data/svn/repo1/conf/passwd user3
建好后 passwd 文件里是用户名加密码哈希:
user1:XXXX
user2:XXXX
user3:XXXX
接着编辑 authz 控制每个用户对仓库的权限。下面给 repo1 仓库设三档:user3 只读,user2 读写,其他人(含 user1)没有任何权限——也就是说 user1 连仓库里的文件都看不到:
[repo1:/]
user3 = r
user2 = rw
* =
配置 Apache httpd
编辑主配置 /etc/httpd/conf/httpd.conf,确认下面这行存在(用于把外部配置文件 include 进来);不存在就加到文件末尾:
Include conf.d/*.conf
进 conf.d 目录,里面已经有一个 subversion.conf。编辑它,让仓库能在浏览器里访问:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /repo1>
DAV svn
SVNPath /data/svn/repo1
AuthType Basic
AuthName "My Repository"
AuthzSVNAccessFile /data/svn/repo1/conf/authz
AuthUserFile /data/svn/repo1/conf/passwd
Require valid-user
</Location>
前两行加载 Apache 的 SVN 模块;<Location> 块定义 URL /repo1 指向我们建的仓库。AuthzSVNAccessFile 让特定用户对仓库内特定项有读写权限,用户列表取自 passwd。
改完重启 httpd 加载配置:
service httpd restart
到这里服务端就起来了,可以用浏览器访问 http://<svn-server>/repo1 或用 SVN 客户端 checkout 验证权限是否按 authz 生效。