目前主流的版本管理软件是 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
| # LoadModule dav_module modules/mod_dav.so # 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
| # # 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
|
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
|
Windows 下使用 Chrome 浏览器访问: https://kefeng.wang/svn/repo1/
输入用户名 kevin 及其密码,成功。
此时只能使用 https 访问,http 已被禁用。