文章目录
  1. 1 安装 SVN(V1.7.14)
    1. 1.1 安装
    2. 1.2 配置
    3. 1.3 关闭 SELinux 模式
    4. 1.4 启动服务
    5. 1.5 防火墙放行
    6. 1.6 卸载
    7. 1.7 客户端验证(svn://xxx)
    8. 1.8 客户端清除 SVN 保存的帐户信息
      1. 1.8.1 Windows 环境
      2. 1.8.2 Linux 环境
  2. 2 开通 HTTP 协议
    1. 2.1 安装 httpd 及其 SVN 模块
    2. 2.2 确认模块 dav/dav_svn 已加载
    3. 2.3 SVN HTTP 配置
    4. 2.4 创建 SVN HTTP 用户
    5. 2.5 启动 httpd 服务
    6. 2.6 防火墙放行
    7. 2.7 客户端验证(http://xxx)
  3. 3 开通 HTTPS 协议
    1. 3.1 安装 ssl 模块
    2. 3.2 生成证书
    3. 3.3 配置证书
    4. 3.4 重启服务
    5. 3.5 防火墙放行
    6. 3.6 客户端验证(https://xxx)

目前主流的版本管理软件是 GIT 和 SVN。GIT 更强大更方便,是潮流,优先推荐。但国内很多公司仍在用 SVN,本文总结了 CentOS 7 环境下 SVN 的安装,及其 http / https 协议的配置方法,后续再介绍 GIT 相关内容。

作者:王克锋
出处:https://kefeng.wang/2016/12/31/svn-server/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

1 安装 SVN(V1.7.14)

1.1 安装

1
2
3
4
sudo yum -y install subversion # 安装 SVN
sudo svnserve --version # 查看版本(1.7.14)
sudo mkdir -p /var/svn/repo1 # 创建版本库目录
sudo svnadmin create /var/svn/repo1 # 创建版本库

1.2 配置

配置帐号:

1
2
3
4
5
## sudo vim /var/svn/repo1/conf/passwd
[users]
kevin=kevin123
john=john123
mike=mike123

配置权限:

1
2
3
4
5
6
7
8
## sudo vim /var/svn/repo1/conf/authz
[groups]
dev = kevin
qa = john,mike

[repo1:/]
@dev = rw
@qa = r

配置服务:

1
2
3
4
5
6
7
8
9
## sudo mv /var/svn/repo1/conf/svnserve.conf{,.bak}
## sudo grep -v "###" /var/svn/repo1/conf/svnserve.conf.bak | sudo tee /var/svn/repo1/conf/svnserve.conf
## sudo vim /var/svn/repo1/conf/svnserve.conf
[general]
anon-access = none ## 匿名用户可读(关闭)
auth-access = write ## 授权用户可写
password-db = passwd ## 指定账号配置文件
authz-db = authz ## 指定权限配置文件
realm = /var/svn/repo1 ## 认证空间名

1.3 关闭 SELinux 模式

1
2
3
4
# sudo vim /etc/selinux/config
# mode of SELinux: enforcing=enable, permissive=disable
# SELINUX=enforcing
SELINUX=permissive

Linux sudo reboot 之后生效。

如果漏掉此操作,使用 svn co 时会报错:

1
2
svn: E000013: Unable to connect to a repository at URL 'svn://centos/repo1'
svn: E000013: Can't open file '/var/svn/repo1/format': Permission denied

1.4 启动服务

1
2
sudo systemctl enable svnserve
sudo systemctl start svnserve

1.5 防火墙放行

1
2
3
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
### 重启生效: sudo systemctl restart iptables

1.6 卸载

如果想重装,需先卸载:

1
2
3
4
sudo systemctl stop svnserve
sudo systemctl disable svnserve
sudo yum -y remove subversion
sudo rm -rf /var/svn/repo1

1.7 客户端验证(svn://xxx)

1
2
3
4
5
svn co svn://centos/repo1 # 提示输入用户名密码,并保存
cd repo1
echo "aaa" > aaa.txt
svn add *
svn ci -m "test"

1.8 客户端清除 SVN 保存的帐户信息

1.8.1 Windows 环境

TortoiseSVN 软件:资源管理器右键菜单,TortoiseSVN / Settings,Saved Data / Authentication data,Clear
命令行执行:rd/s/q %APPDATA%\Subversion\auth

1.8.2 Linux 环境

1
rm -rf ~/.subversion/auth

2 开通 HTTP 协议

参考资料: http://svnbook.red-bean.com/en/1.7/svn.serverconfig.httpd.html

2.1 安装 httpd 及其 SVN 模块

1
2
3
sudo yum -y install deltarpm ## 增量 RPM 套件
# sudo yum -y remove httpd mod_dav_svn
sudo yum -y install httpd mod_dav_svn

2.2 确认模块 dav/dav_svn 已加载

1
2
3
4
## grep -E "dav_module" /etc/httpd/conf.modules.d/00-dav.conf
LoadModule dav_module modules/mod_dav.so
## grep -E "dav_svn_module" /etc/httpd/conf.modules.d/10-subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so

2.3 SVN HTTP 配置

1
2
3
4
5
6
7
8
9
10
11
12
## sudo chown -R apache:apache /var/svn/repo1/ ## 将 SVN 版本库所有者改为 apache(httpd 进程的启动用户)
## sudo vim /etc/httpd/conf.d/subversion.conf
<Location /svn>
DAV svn ## mod_dav_svn 模拟,是 HTTP 1.1 的扩展,用来支持 SVN
SVNParentPath /var/svn ## SVN HTTP 的根目录
AuthType Basic ## 认证类型
AuthName "SVN repository" ## 输入用户名和密码时的提示信息
AuthUserFile /etc/httpd/svn-auth.htpasswd ## 认证文件的位置,需要手工创建

# Authorization: Authenticated users only
Require valid-user
</Location>

2.4 创建 SVN HTTP 用户

1
2
3
4
5
6
## 首个用户必须指定 -c 用于新建文件 svn-auth.htpasswd
## 后续用户必须不要指定 -c, 否则文件会被新建;-m 表示以 md5 加密密码
sudo htpasswd -cm /etc/httpd/svn-auth.htpasswd kevin ## 需要指定密码两次(最好与SVN的passwd一致)
sudo htpasswd -m /etc/httpd/svn-auth.htpasswd john ## 需要指定密码两次(最好与SVN的passwd一致)
sudo htpasswd -m /etc/httpd/svn-auth.htpasswd mike ## 需要指定密码两次(最好与SVN的passwd一致)
sudo cat /etc/httpd/svn-auth.htpasswd

2.5 启动 httpd 服务

1
2
3
sudo systemctl enable httpd
sudo systemctl restart httpd
sudo tail -f /var/log/httpd/error_log

2.6 防火墙放行

1
2
3
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
### 重启生效: sudo systemctl restart iptables

2.7 客户端验证(http://xxx)

Windows 下使用 Chrome 浏览器访问: http://kefeng.wang/svn/repo1/
输入用户名 kevin 及其密码,成功。

3 开通 HTTPS 协议

3.1 安装 ssl 模块

1
sudo yum -y install mod_ssl openssl

3.2 生成证书

详细资料请参考我前面的文章:Nginx 负载均衡及其 HTTPS 部署

1
2
3
sudo mkdir /etc/httpd/ssl
sudo cp nginx.key /etc/httpd/ssl/httpd.key
sudo cp nginx.crt /etc/httpd/ssl/httpd.crt

3.3 配置证书

1
2
3
## sudo vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

如果要停用 https 改用 http,只需注释下面的 SSLRequireSSL 一行。

1
2
3
4
5
6
7
### sudo vim /etc/httpd/conf.d/subversion.conf
<Location /svn>
## ......

Require valid-user
SSLRequireSSL
</Location>

3.4 重启服务

1
sudo systemctl restart httpd

3.5 防火墙放行

1
2
3
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
### 重启生效: sudo systemctl restart iptables

3.6 客户端验证(https://xxx)

Windows 下使用 Chrome 浏览器访问: https://kefeng.wang/svn/repo1/
输入用户名 kevin 及其密码,成功。
此时只能使用 https 访问,http 已被禁用。

文章目录
  1. 1 安装 SVN(V1.7.14)
    1. 1.1 安装
    2. 1.2 配置
    3. 1.3 关闭 SELinux 模式
    4. 1.4 启动服务
    5. 1.5 防火墙放行
    6. 1.6 卸载
    7. 1.7 客户端验证(svn://xxx)
    8. 1.8 客户端清除 SVN 保存的帐户信息
      1. 1.8.1 Windows 环境
      2. 1.8.2 Linux 环境
  2. 2 开通 HTTP 协议
    1. 2.1 安装 httpd 及其 SVN 模块
    2. 2.2 确认模块 dav/dav_svn 已加载
    3. 2.3 SVN HTTP 配置
    4. 2.4 创建 SVN HTTP 用户
    5. 2.5 启动 httpd 服务
    6. 2.6 防火墙放行
    7. 2.7 客户端验证(http://xxx)
  3. 3 开通 HTTPS 协议
    1. 3.1 安装 ssl 模块
    2. 3.2 生成证书
    3. 3.3 配置证书
    4. 3.4 重启服务
    5. 3.5 防火墙放行
    6. 3.6 客户端验证(https://xxx)