SVN安装
使用yum安装SVN
1
| $ yum -y install subversion
|
创建目录并配置
建立版本库目录(建议使用/var/svn 这样的路径,不然后续在配置开机自启的时候需要修改部分配置,看个人喜好吧!)
创建svn代码库
1
| $ svnadmin create /opt/svn/repo
|
执行上面的命令后,自动建立repo测试库,查看/opt/svn/repo 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。以后创建svn库类似,替换repo名称即可
用户密码passwd配置
1 2
| [root@Master ~]# cd /opt/svn/repo/conf/ [root@Master conf]# nano passwd
|
修改password为以下内容:
注:格式必须是 用户名=密码(用户名和密码必须成对
权限控制authz配置
1
| [root@Master conf]# nano authz
|
目的是设置哪些用户可以访问哪些目录,向authz文件追加以下内容:
以上配置表示demo对根目录有读写权限,r为读,w为写
如果是多个用户开发,这里可以配置用户组,编辑示例:
1 2 3 4 5 6 7 8 9
| [groups] admin = admin test = fuhd,test
[repo:/] @admin = rw
[repo:/test] @test = rw
|
服务svnserve.conf配置
每个版本库创建之后都会生成svnserve.conf主要配置文件。编辑它:
1
| [root@Master conf]# nano svnserve.conf
|
追加以下内容:
1 2 3 4 5 6 7 8 9 10 11
| [general]
anon-access=none
auth-access=write
password-db=passwd
authz-db=authz
realm=repositories
|
启动与停止svn服务
查看svn的服务是否启动
如果没有启动执行下面命令即可(默认端口3690):
1 2 3 4 5 6
| $ svnserve -d -r /opt/svn/repo # 或者: $ systemctl start svnserve
# $ svnserve -d -r /opt/svn/repo --listen-port=9527
|
停止:
开启端口
如果配置了防火墙规则,使用如下命令即可:
1 2 3 4
| $ /sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT $ /etc/rc.d/init.d/iptables save $ /etc/init.d/iptables restart $ /etc/init.d/iptables status
|
配置开机自启
1
| $ systemctl enable svnserve.service
|
如果前面设置的svn目录地址使用的是/var/svn
这样的路径,开机时能够启动的,如果不是,可能会报如下错误:
1 2 3 4 5 6 7 8 9 10 11 12
| [root@Master ~]#systemctl status svnserve ● svnserve.service - Subversion protocol daemon Loaded: loaded (/usr/lib/systemd/system/svnserve.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Tue 2021-11-16 18:22:03 CST; 31s ago Process: 1011 ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS (code=exited, status=1/FAILURE)
Nov 16 18:22:02 Master systemd[1]: Starting Subversion protocol daemon... Nov 16 18:22:03 Master svnserve[1011]: svnserve: 根路径“/var/svn”不存在,或者不是目录。 Nov 16 18:22:03 Master systemd[1]: svnserve.service: control process exited, code=exited status=1 Nov 16 18:22:03 Master systemd[1]: Failed to start Subversion protocol daemon. Nov 16 18:22:03 Master systemd[1]: Unit svnserve.service entered failed state. Nov 16 18:22:03 Master systemd[1]: svnserve.service failed.
|
这里需要修改/etc/sysconfig
下的svnserve
文件:
1
| [root@Master ~]# nano /etc/sysconfig/svnserve
|
将该配置文件中的/var/svn
变更为你自己的路径就行,eg:
1 2 3 4
|
OPTIONS="-r /opt/svn"
|
使用如下命令项目是可以启动的:
1
| $ systemctl start svnserve.service
|
查看svn服务:
1 2 3 4 5 6 7 8 9 10 11 12 13
| [root@Master ~]# systemctl status svnserve.service ● svnserve.service - Subversion protocol daemon Loaded: loaded (/usr/lib/systemd/system/svnserve.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-11-16 18:28:58 CST; 28s ago Process: 2049 ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 2050 (svnserve) Tasks: 1 Memory: 596.0K CGroup: /system.slice/svnserve.service └─2050 /usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /opt/svn
Nov 16 18:28:58 Master systemd[1]: Starting Subversion protocol daemon... Nov 16 18:28:58 Master systemd[1]: Started Subversion protocol daemon.
|
配置SVN以HTPP的形式访问
安装HTTP访问需要的软件
1 2 3
| $ yum install -y httpd mod_dav_svn
# httpd 是Apache公司提供的http访问软件,mod_dav_svn是协助SVN使用http访问的插件
|
配置HTTP访问SVN时登录授权
这里需要使用htpasswd
命令重新创建SVN
认证的账号和密码,这里是为了在使用HTTP
访问SVN
的时候授权认证
1 2 3 4 5 6 7 8 9 10
| # 备份原来的账号密码 $ mv passwd passwd.default
# 使用htpasswd创建账号密码 $ htpasswd -cm passwd yourname $ htpasswd -m passwd myname
# 如果移动了passwd文件,在使用htpasswd的同时需要添加-c参数去创建passwd文件,如果不使用,会报如下错误: htpasswd: cannot modify file passwd; use '-c' to create it # eg: htpasswd -cm passwd zhangsan,zhangsan就是登录的账号
|
给予apache用户对于SVN仓库的权限
1
| $ chown -R apache:apache repo
|
如果不给于权限,代码可能只能更新,不能提交,并报 could not begin a transaction
错误,如下:
创建HTTP访问SVN的配置文件
1 2 3 4 5
| # 进入httpd配置服务的目录 $ cd /etc/httpd/conf.d
# 创建访问SVN的网络请求配置 $ touch svn.conf
|
填充svn.conf
文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # 这里Location后面的配置就是http访问时的路由地址 <Location /repo> # 使用刚刚安装的mod_dav_svn DAV svn # 该参数是SVN仓库的上级目录,这里即 /opt/svn # SVNParentPath /opt/svn # 配置SVN仓库路径 SVNPath /opt/svn/repo # 配置HTTP授权方式 AuthType Basic AuthName "Authorization Realm" # 配置HTTP访问SVN时的登录账号密码等 AuthUserFile /opt/svn/repo/conf/passwd # 配置HTTP访问SVN时的授权账号或者用户组等 AuthzSVNAccessFile /opt/svn/repo/conf/authz Satisfy all Require valid-user </Location>
|
启动或者重启httpd
服务
1 2 3 4 5 6 7 8
| # 启动httpd服务 $ systemctl start httpd
# 重启httpd服务 $ systemctl restart httpd
# 配置httpd服务开机自启 $ systemctl enable httpd
|
在浏览器上查看SVN服务
打开浏览器,访问http://192.168.217.128/repo,看看有无问题
输入配置的账号密码,可在浏览器端查看上传的文件
安装上SVN客户端,拉取SVN仓库后提交文件测试
使用Nginx代理HTTP+SVN访问
分配端口
因为Nginx
和httpd
默认使用的都是80端口,所以我们需要重新分配下Nginx
和httpd
两个的默认端口,我这里修改的是httpd
的默认端口(看个人取舍吧!)
1 2 3 4 5 6 7 8 9 10 11
| # 进入httpd默认的配置文件中 $ nano /etc/httpd/conf/httpd.conf
# 找到Listen属性 将80修改为非80端口即可(因为我这里使用的是httpd访问SVN,而SVN服务默认端口为3690,故这里也设置为3690) Listen 3690
# 重启或者重载httpd服务使配置生效 # 重启 $ systemctl restart httpd # 重载 $ service httpd reload
|
注意:有些情况下修改了httpd的端口重启后可能会报如下错误:
这是因为本机selinux而导致的错误,调整selinux状态即可,修改selinux的状态有两种方式,一种是命令方式,临时生效,一种是修改配置文件,永久生效
1、命令方式:调整至permissive
2、修改配置文件
1 2 3 4 5 6 7 8
| # 修改/etc/selinux下的config文件 $ nano /etc/selinux/config
# 将SELINUX=enforcing 属性值改为 disabled SELINUX=disabled
# 重新启动让其生效 $ reboot
|
Nginx中代理HTTP+SVN服务
在/etc/nginx/conf.d
地址下创建svn.conf
文件
1
| $ touch /etc/nginx/conf.d/svn.conf
|
在该文件中填入以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13
| server { listen 80; server_name localhost; location / { # 这里的请求就是HTTP+SVN访问地址 proxy_pass http://127.0.0.1:3690; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Cookie $http_cookie; client_max_body_size 5000M; } }
|
校验Nginx配置并重载服务
1 2 3
| $ nginx -t
$ nginx -s reload
|
美化浏览器访问SVN库显示样式
默认的浏览器访问SVN代码的时候
这里无法很好的区分文件或者是文件夹
美化后的效果:
需要在 /etc/httpd/conf.d/ 下创建的 SVN 配置文件中添加 SVNIndexXSLT “/svnindex.xsl” 属性值,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 这里Location后面的配置就是http访问时的路由地址 <Location /repo> # 使用刚刚安装的mod_dav_svn DAV svn # 该参数是SVN仓库的上级目录,这里即 /opt/svn # SVNParentPath /opt/svn # 配置SVN仓库路径 SVNPath /opt/svn/repo # 自定义美化浏览器访问时页面 SVNIndexXSLT "/svnindex.xsl" # 配置HTTP授权方式 AuthType Basic AuthName "Authorization Realm" # 配置HTTP访问SVN时的登录账号密码等 AuthUserFile /opt/svn/repo/conf/passwd # 配置HTTP访问SVN时的授权账号或者用户组等 AuthzSVNAccessFile /opt/svn/repo/conf/authz Satisfy all Require valid-user </Location>
|
svnindex.xsl
文件从哪里来?
如果是用的yum安装的subversion
,svnindex.xsl 默认地址为 /usr/share/doc/subversion-1.7.14/xslt
如果找不到,可通过如下命令搜索该文件:
1
| $ find / -name "svnindex.xsl"
|
当然,也可使用我这里已经配置好了的样式(看个人爱好吧!)
第三方自定义样式地址
注:如果svnindex.xsl
同级的目录下有其他文件,请在移动复制时一起操作
svnindex.xsl
文件该放在哪里才能生效?
因为这是在httpd工具下显示样式,因此该文件需放置在https默认的配置路径下,即:/var/www/html