目前主流的版本管理软件是 GIT 和 SVN。GIT 更强大更方便,是潮流,优先推荐。但国内很多公司仍在用 SVN,本文总结了 CentOS 7 环境下 SVN 的安装,及其 http / https 协议的配置方法,后续再介绍 GIT 相关内容。
作者:王克锋
出处:https://kefeng.wang/2016/12/31/svn-server/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。
sudo yum -y install subversion # 安装 SVN
sudo svnserve --version # 查看版本(1.7.14)
sudo mkdir -p /var/svn/repo1 # 创建版本库目录
sudo svnadmin create /var/svn/repo1 # 创建版本库
配置帐号:
## sudo vim /var/svn/repo1/conf/passwd
[users]
kevin=kevin123
john=john123
mike=mike123
配置权限:
## sudo vim /var/svn/repo1/conf/authz
[groups]
dev = kevin
qa = john,mike
[repo1:/]
@dev = rw
@qa = r
配置服务:
## 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 ## 认证空间名
# sudo vim /etc/selinux/config
# mode of SELinux: enforcing=enable, permissive=disable
# SELINUX=enforcing
SELINUX=permissive
Linux sudo reboot
之后生效。
如果漏掉此操作,使用 svn co 时会报错:
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
sudo systemctl enable svnserve
sudo systemctl start svnserve
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
### 重启生效: sudo systemctl restart iptables
如果想重装,需先卸载:
sudo systemctl stop svnserve
sudo systemctl disable svnserve
sudo yum -y remove subversion
sudo rm -rf /var/svn/repo1
svn co svn://centos/repo1 # 提示输入用户名密码,并保存
cd repo1
echo "aaa" > aaa.txt
svn add *
svn ci -m "test"
TortoiseSVN 软件:资源管理器右键菜单,TortoiseSVN / Settings,Saved Data / Authentication data,Clear
命令行执行:rd/s/q %APPDATA%\Subversion\auth
rm -rf ~/.subversion/auth
参考资料: http://svnbook.red-bean.com/en/1.7/svn.serverconfig.httpd.html
sudo yum -y install deltarpm ## 增量 RPM 套件
# sudo yum -y remove httpd mod_dav_svn
sudo yum -y install httpd mod_dav_svn
## 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
## 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>
## 首个用户必须指定 -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
sudo systemctl enable httpd
sudo systemctl restart httpd
sudo tail -f /var/log/httpd/error_log
### 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 及其密码,成功。
sudo yum -y install mod_ssl openssl
详细资料请参考我前面的文章:Nginx 负载均衡及其 HTTPS 部署
sudo mkdir /etc/httpd/ssl
sudo cp nginx.key /etc/httpd/ssl/httpd.key
sudo cp nginx.crt /etc/httpd/ssl/httpd.crt
## sudo vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
如果要停用 https 改用 http,只需注释下面的 SSLRequireSSL 一行。
### sudo vim /etc/httpd/conf.d/subversion.conf
<Location /svn>
## ......
Require valid-user
SSLRequireSSL
Location>
sudo systemctl restart httpd
### 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 已被禁用。