在 CentOS 7 上部署 Apache Subversion(SVN)服务器是一个常见的任务,尤其是在需要版本控制系统来管理代码和文档的环境中,以下是详细的步骤,包括安装、配置和启动 SVN 服务器的全过程:
先决条件
1、CentOS 7:最小化安装即可,但非必需。
2、sudo 用户登录:直接使用 root 亦可。
3、非 root 用户:请在命令前加 sudo。
安装 Apache
1、使用 YUM 安装 Apache:
sudo yum install y httpd
2、检查 Apache 是否安装成功:
httpd version # Server version: Apache/2.4.6 (CentOS)
3、删除 Apache 的默认欢迎页面:
sed i 's/^/#&/g' /etc/httpd/conf.d/welcome.conf
4、防止 Apache 在/var/www/html
目录中显示文件:
sed i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.conf
三、安装 SVN 和 mod_dav_svn 模块
1、安装 subversion 和 mod_dav_svn:
sudo yum install y subversion mod_dav_svn
2、检查 svnserve 是否安装成功:
svnserve version # svnserve, version 1.7.14 (r1542130)
配置 SVN
1、修改 SVN 配置文件:
vim /etc/httpd/conf.modules.d/10subversion.conf
2、添加以下内容到配置文件:
<Location /svn> DAV svn SVNParentPath /svn AuthName "SVN Repos" AuthType Basic AuthUserFile /etc/svn/svnauth AuthzSVNAccessFile /svn/authz Require validuser </Location>
3、创建 SVN 仓库:
mkdir /svn cd /svn svnadmin create repo1 chown R apache:apache repo1
4、设置 SVN 用户帐号:
mkdir /etc/svn htpasswd cm /etc/svn/svnauth user001 chown root:apache /etc/svn/svnauth chmod 640 /etc/svn/svnauth
5、为用户设置权限:
cp /svn/repo1/conf/authz /svn/authz vim /svn/authz
假设:用户 user001 是管理员,用户 user002 具有读写权限,用户 user003 只能读,可以修改以下设置:
[groups] admin=user001 repo1_user=user002 repo1_trainee=user003 [/] @admin=rw [repo1:/] @repo1_user=rw @repo1_trainee=r
启动 Apache 并修改防火墙规则
1、启动 Apache:
sudo systemctl start httpd.service sudo systemctl enable httpd.service
2、打开 HTTP 服务端口:
sudo firewallcmd zone=public permanent addservice=http sudo firewallcmd reload
访问 SVN 仓库
使用以下路径从 SVN 客户端访问服务器上的 SVN repo repo1:
http://<yourserverip>/svn/repo1/
FAQs
1、问题:如何为 SVN 仓库添加更多用户?
解答:可以使用htpasswd
命令来添加更多用户,要添加用户 user002 和 user003,可以运行以下命令:
htpasswd m /etc/svn/svnauth user002 htpasswd m /etc/svn/svnauth user003
注意:不要使用c
标志,否则会重建身份验证文件,并清除之前设置的所有用户帐户。
2、问题:如何配置用户的读写权限?
解答:可以通过编辑/svn/authz
文件来配置用户的读写权限,假设用户 user001 是管理员,user002 具有读写权限,user003 只能读,则可以修改以下设置:
[groups] admin=user001 repo1_user=user002 repo1_trainee=user003 [/] @admin=rw [repo1:/] @repo1_user=rw @repo1_trainee=r