Centos7搭建SVN服务器以及配置HTTP和HTTPS
svn和git差不多 都是用来存代码的
只不过svn是部署在一台服务器上 git是每个人都维护一份完整代码仓库 svn一般都是公司内部自建一个svn服务器 用来同步每个人之间的代码以及其他ui/ux资源
用途就是保存并同步大家要协同办公的东西
比如两个ui设计师要同步设计稿
总不能通过钉钉飞书这些发送吧
涉及到公司内部文件的机密
所以就要在内网上搭建一台有svn服务的机器 大家都连上去 通过svn服务器进行文件的共享和同步
这个行为就和git是一样的
一.搭建
参考资料SVN 服务器的安装及其 HTTPS 实现_svn server.config.html-CSDN博客
安装SVN
sudo yum -y install subversion
创建版本库目录
sudo mkdir -p /var/svn/repo1
创建版本库
sudo svnadmin create /var/svn/repo1
配置帐号
sudo vim /var/svn/repo1/conf/passwd
[users]
zhangsan=svn123
lisi=svn123
配置权限
sudo vim /var/svn/repo1/conf/authz
[groups]
xm1 = zhangsan
xm2 = lisi
[repo1:/]
@xm1 = rw
@xm2 = r
配置服务
把 /var/svn/repo1/conf/svnserve.conf 文件重命名为 /var/svn/repo1/conf/svnserve.conf.bak,以此实现对原配置文件的备份。
sudo mv /var/svn/repo1/conf/svnserve.conf{,.bak}
从 svnserve.conf.bak 备份文件中过滤掉所有包含 ### 的行
sudo grep -v "###" /var/svn/repo1/conf/svnserve.conf.bak | sudo tee /var/svn/repo1/conf/svnserve.conf
对 SVN 仓库的访问权限、用户认证等进行设置
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 ## 认证空间名
关闭 SELinux 模式
sudo vim /etc/selinux/config
# mode of SELinux: enforcing=enable, permissive=disable
# SELINUX=enforcing
SELINUX=permissive
重启生效
sudo reboot
启动服务
sudo systemctl enable svnserve
sudo systemctl start svnserve
防火墙放行
sudo vim /etc/sysconfig/firewalld
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
重启生效
sudo systemctl restart firewalld
二.基本命令
启动
sudo svnserve -d -r /var/svn # -d: 守护进程 -r: 仓库根目录
查找进程
ps aux | grep svnserve
结束进程
sudo kill <PID> # 替换为实际的进程ID
验证端口监听
sudo netstat -tulnp | grep 3690
# 或
sudo ss -tulnp | grep 3690
测试本地连接
telnet 127.0.0.1 3690
查看日志
sudo journalctl -u svnserve --no-pager -n 20 # 查看最近日志
# 或直接检查 svnserve 输出(如果未用 systemd 管理)
sudo tail -f /var/log/messages | grep svnserve
防火墙检查
sudo firewall-cmd --list-ports | grep 3690 # 检查是否开放端口
sudo firewall-cmd --add-port=3690/tcp --permanent # 如果未开放
sudo firewall-cmd --reload
三.开通HTTP
安装 httpd 及其 SVN 模块
sudo yum -y install deltarpm ## 增量 RPM 套件
sudo yum -y remove httpd mod_dav_svn
sudo yum -y install httpd mod_dav_svn
确认模块 dav/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
将 SVN 版本库所有者改为 apache(httpd 进程的启动用户)
sudo chown -R apache:apache /var/svn/repo1/
SVN HTTP配置
sudo vim /etc/httpd/conf.d/subversion.conf
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "SVN repository"
AuthUserFile /etc/httpd/svn-auth.htpasswd
# AuthzSVNAccessFile /var/svn/conf/authz
# Authorization: Authenticated users only
Require valid-user
</Location>
创建SVN HTTP用户
## 首个用户必须指定 -c 用于新建文件 svn-auth.htpasswd
## 后续用户必须不要指定 -c, 否则文件会被新建;-m 表示以 md5 加密密码
sudo htpasswd -cm /etc/httpd/svn-auth.htpasswd zhangsan ## 需要指定密码两次(最好与SVN的passwd一致)
sudo htpasswd -m /etc/httpd/svn-auth.htpasswd lisi ## 需要指定密码两次(最好与SVN的passwd一致)
sudo cat /etc/httpd/svn-auth.htpasswd
启动httpd服务
sudo systemctl enable httpd
sudo systemctl restart httpd
sudo tail -f /var/log/httpd/error_log
防火墙放行
sudo vim /etc/sysconfig/firewalld
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
重启生效
sudo systemctl restart iptables
在windows客户端验证
Windows 下使用 Chrome 浏览器访问: http://服务器ip/svn/repo1
输入用户名 zhangsan 及其密码,成功。

三.HTTPS的配置和实现
安装ssl
sudo yum -y install mod_ssl openssl
生成证书
参考资料:Nginx 负载均衡及其 HTTPS 部署 | 王克锋的博客
sudo mkdir /etc/httpd/ssl
生成 X509 V3 扩展文件
vim /etc/ssl/x509v3.ext
basicConstraints=CA:FALSE
authorityKeyIdentifier=keyid,issuer
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=IP:服务器IP
生成密钥和证书文件
## 生成密钥对(nginx.key, 包含公钥和私钥)
sudo openssl genrsa -out nginx.key 2048
## 生成证书请求(nginx.csr, 包含公钥和主题信息)
## 注意:CN必须是将来的域名,否则 Chrome 访问时报错 NET::ERR_CERT_AUTHORITY_INVALID
sudo openssl req -new -sha256 -key nginx.key -out nginx.csr -subj "/CN=kefeng.wang/O=kefeng.wang/L=SHANGHAI/ST=SHANGHAI/C=CN"
## 商用证书: 把证书请求文件(nginx.csr)连同费用,交给 Verisign 等CA服务公司,CA 用它的私钥签名生成证书返还证书(nginx.crt);
## 个人证书: 个人使用密钥(nginx.key),签发证书请求(nginx.csr),生成根证书(nginx.crt);
## 商用证书的 CA 根证书已经内置在浏览器中,无需手工导入;而个人证书则需要导入。
## 注意: 必须指定 -sha256, 否则 Chrome 访问时报错 This page is insecure (broken HTTPS). SHA-1 Certificate
sudo openssl x509 -req -sha256 -days 3650 -in nginx.csr -signkey nginx.key -extfile x509v3.ext -out nginx.crt
sudo sz nginx.crt ## 下载至 Windows
# 根据密钥对(nginx.key),生成私钥(private.pem)、公钥(public.pem)、modulus(JavaScript 中可用)
sudo openssl pkcs8 -topk8 -in nginx.key -nocrypt -out private.pem
sudo openssl rsa -in nginx.key -pubout -out public.pem
openssl rsa -in nginx.key -noout -modulus | sudo tee -a modulus.js
将 Nginx 服务器使用的 SSL 私钥和证书文件复制到 Apache 服务器(httpd)的 SSL 证书目录中,从而让 Apache 服务器能够使用这些证书来提供 HTTPS 服务。
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
重启服务
sudo systemctl restart httpd
防火墙放行(/iptables和/firewalld都要配置)
sudo vim /etc/sysconfig/firewalld
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
重启生效
sudo systemctl restart firewalld
客户端验证
客户端验证(https://xxx)
Windows 下使用 Chrome 浏览器访问: https://服务器IP/svn/repo1

也可以在客户端使用TortoiseSVN
参考资料:
TortoiseSVN安装与使用_小乌龟svn-CSDN博客
在 Centos7 中搭建 SVN 服务,借助 TortoiseSVN 轻松进行合作开发_centos7+tortoisesvn-CSDN博客
更多推荐

所有评论(0)