1. 安装步骤
这里默认你已经安装完成 svn,并且将 svn 的数据仓库目录配置为/usr/local/svn/data
。如果没有安装,可以参考之前的安装文档:CentOS7 环境下在线和离线安装 SVN(Subversion)
1.1 安装 httpd 组件和依赖
安装httpd
执行命令yum -y install httpd
安装依赖组件mod_dav_svn
执行命令yum -y install mod_dav_svn
1.2 创建仓库和配置用户和权限
- 通过 svnadmin 命令创建仓库。
svnadmin create /usr/local/svn/data/repository
- 通过
htpasswd
命令创建第一个用户admin
和httpdPasswd
文件。
htpasswd -c -m /usr/local/svn/data/repository/conf/httpdPasswd admin
Tips1:
-c
表示表示创建新文件httpdPasswd
,-m
是强制使用MD5
加密密码admin
可访问用户名
Tips2:后续再添加用户可以去掉-c
,直接使用htpasswd -m /usr/local/svn/data/repository/conf/httpdPasswd otheruser
- 修改
httpdPasswd
同级目录下的authz
文件,添加组和给组添加权限
[groups]
mygroups=admin,user1,user2
[/]
@mygroups=rw
1.3 httpd 的相关配置
httpd
默认监听端口是80
,可以通过修改/etc/httpd/conf/httpd.conf
文件中Listen
对应的值。(如果无需修改端口,此步略过)到
/etc/httpd/conf.d/
目录,创建一个svn.conf
文件,文件内容如下:
# 加入依赖模块
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /data>
DAV svn
SVNListParentPath on
# 监控svn的父级目录data,data下有很多仓库
SVNParentPath /usr/local/svn/data
AuthType Basic
AuthName "Authorization Realm"
# httpdPasswd文件的路径
AuthUserFile /usr/local/svn/data/repository/conf/httpdPasswd
# authz文件的路径
AuthzSVNAccessFile /usr/local/svn/data/repository/conf/authz
Satisfy all
Require valid-user
SVNAutoversioning on
ModMimeUsePathInfo on
</Location>
- 重启 svn,重启 httpd 服务
svn 拉取地址:http://192.168.195.129:8088/data/repository
Tips:前置条件是在上面的操作中,修改了
httpd
监听的端口,由80
修改为8088
,如果没有去修改,则直接将上述地址中的端口去掉即可。
遇到的问题:从 svn 中拉取是正常的,但是提交出现 could not begin a transaction,解决方案就是执行下面的两个命令
chown -R apache:apache /usr/local/svn/data/
chcon -R -t httpd_sys_rw_content_t /usr/local/svn/data/
Tips:主要原因是权限问题。
httpd
是apache
提供的组件,在安装httpd
的时候会创建一个apache
用户和用户组,在提交内容的时候,apache
需要对仓库内容进行写操作,由于在安装svn
的时候,用的是root
用户,导致apache
没有写的权限导致的。
1.4 httpd 操作相关命令
httpd 安装成功后会自动注册到 service 里面,可以通过 service 相关命令来执行起停及查看状态,具体命令如下:
# 启动httpd
systemctl start httpd
# 停止httpd
systemctl stop httpd
# 重启httpd
systemctl restart httpd
# 将httpd加入到随系统自动启动
systemctl enable httpd
2. 通过 nginx 转发
配置信息如下:
http {
server {
listen 8088;
server_name localhost;
client_max_body_size 2048m;
location / {
proxy_pass http://192.168.195.129:8088;
}
}
}