Linux部署Subversion

推荐直接看第8条,使用Docker直接部署SVN+图形管理,如果版本管理的仓库比较多的话,更加具有优势,不必经常登录服务器维护。

1.安装Subversion

yum install subversion
yum install mod_dav_svn #不需要http访问svn可不安装,可选

2.查看是否安装成功【可选】

svn --version

3.创建仓库根路径【也可视为创建仓库,仓库与根仓库不同的是,根仓库映射路径为/】

mkdir /mnt/svn    #创建目录
svnadmin create /mnt/svn    #建立仓库

4.修改仓库配置(在建立的仓库里面有三个配置文件svnserve.conf、passwd、authz)

  1.svnserve.conf:是总配置文件,限制匿名用户是否可以访问,确定权限文件,用户密码文件。

### 这个文件控制 svnserve 守护进程的配置,如果你
### 使用它来允许访问这个存储库。 (如果你只允许
### 通过 http: 和/或 file: URL 访问,那么这个文件就是
### 无关紧要.)

### 访问 http://subversion.apache.org/ 了解更多信息.

[general]
### anon-access 和 auth-access 选项控制对
### 未经身份验证(又名匿名)用户的存储库和
### 分别验证用户。
### 有效值为 "write", "read", and "none".
### 设置值为“none”禁止读写;
### "read" 允许只读访问,"write" 允许完整访问
### 对存储库的读/写访问权限。
### 下面的示例设置是默认的,并指定匿名
### 用户在经过身份验证时对存储库具有只读访问权限
### 用户对存储库具有读写权限。
# anon-access = read
# auth-access = write
### password-db选项控制密码的位置
### 数据库文件。 除非您指定以 / 开头的路径,
### 文件的位置是相对于包含的目录
### 这个配置文件。
### 如果启用了 SASL(见下文),则不会使用此文件。
### 取消注释下面的行以使用默认密码文件。
# password-db = passwd
### authz-db 选项控制授权的位置
### 基于路径的访问控制规则。 除非你指定路径
### 以/开头,文件的位置是相对于
### 包含此文件的目录。 指定的路径可能是
### 存储库相对 URL (^/) 或绝对文件:// 文本的 URL
### Subversion 存储库中的文件。 如果您不指定 authz-db,
### 没有完成基于路径的访问控制。
### 取消注释下面的行以使用默认授权文件。
# authz-db = authz
### groups-db 选项控制文件的位置
### 组定义并允许单独维护组
### 授权规则。 groups-db 文件的格式与
### authz-db 文件并且应该包含一个带有
### 组定义。 如果启用该选项,则 authz-db 文件不能
### 包含一个 [groups] 部分。 除非您指定以
### a /,文件的位置是相对于包含这个的目录
### 文件。 指定的路径可以是存储库相对 URL (^/) 或
### 绝对 file:// Subversion 存储库中文本文件的 URL。
### 默认情况下不使用此选项。
# groups-db = groups
### 此选项指定存储库的身份验证领域。
### 如果两个存储库具有相同的身份验证领域,他们应该
### 拥有相同的密码数据库,反之亦然。 默认领域
### 是存储库的 uuid。
# realm = My First Repository
### force-username-case 选项导致 svnserve 进行大小写规范化
### 用户名,然后再将它们与中的授权规则进行比较
### 上面配置的 authz-db 文件。 有效值为“upper”(到 upper-
### case the usernames), "lower" (小写用户名), and
### "none"(在不进行大小写转换的情况下按原样比较用户名,这
### 是默认行为)。
# force-username-case = none
### hooks-env 选项指定钩子脚本环境的路径
### 配置文件。 此选项覆盖每个存储库的默认值
### 可用于配置多个hook脚本环境
### 单个文件中的存储库,如果指定了绝对路径。
### 除非指定绝对路径,否则文件的位置是相对的
### 到包含此文件的目录。
# hooks-env = hooks-env

[sasl]
### 该选项指定是否要使用Cyrus SASL
### 用于身份验证的库。 默认为假。
### 启用此选项需要使用 Cyrus 构建 svnserve
### SASL支持; 检查,运行'svnserve --version'并寻找一行
### 正在阅读“Cyrus SASL 身份验证可用。”
# use-sasl = true
### 这些选项指定了所需的安全层强度
### 您希望 SASL 提供的内容。 0表示不加密,1表示
### 仅完整性检查,大于 1 的值是相关的
### 加密的有效密钥长度(例如 128 表示 128 位
### 加密)。 下面的值是默认值。
# min-encryption = 0
# max-encryption = 256

 

vi /mnt/svn/conf/svnserve.conf
[general]

#匿名访问的权限,可以是read,write,none,默认为read  
anon-access = none
#认证用户的权限,可以是read,write,none,默认为write  
auth-access = write
#指定用户配置文件
password-db = passwd
#指定权限配置文件
auth-db = authz

[sasl]

  2.passwd:(用户账号配置文件,用户名=密码)

### 该文件是 svnserve 的示例密码文件。
### 其格式类似于svnserve.conf。 如图所示
### 下面的示例包含一个标记为 [users] 的部分。
### 每个用户的名称和密码如下,每行一个帐户。

[users]
# harry = harryssecret
# sally = sallyssecret

 

vi /mnt/svn/conf/passwd
[users]
admin = svnadmin
fanqi = qwer1234

  3.authz:(指定SVN仓库目录以及每个用户的权限)

### 该文件是 svnserve 的示例授权文件。
### 其格式与mod_authz_svn授权相同
### 文件。
### 如下所示,每个部分都定义了路径和权限
###(可选)由部分名称指定的存储库。
### 授权如下。 授权行可以指:
### - 单个用户,
### - 在特殊的 [groups] 部分中定义的一组用户,
### - 在特殊 [aliases] 部分中定义的别名,
### - 所有经过身份验证的用户,使用“$authenticated”令牌,
### - 只有匿名用户,使用“$anonymous”令牌,
### - 任何人,使用“*”通配符。
###
### 可以通过在规则前加上“~”来反转匹配。 规则可以
### 授予读取('r')访问权限、读写('rw')访问权限或无访问权限
###('')。

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe

# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

 

vi /mnt/svn/conf/authz
[aliases]

[groups]
# 创建一个coreqi的组,并制定两个用户admin和fanqi
coreqi = admin,fanqi
# [/]代表根目录,之后配置每个用户的权限
[/]
# coreqi组用户权限为读写
@coreqi = rw
#admin = rw
#fanqi = rw
# 其他用户只有读权限
* = r

 5.启动SVN服务

svnserve -d -r /mnt/svn --listen-host 192.168.182.128 --listen-port 3690

  --listen-host指定ip(建议不添加此参数,以便在服务器上通过127.0.0.1来检出)

  --listen-port 3690   (用户自定义,不加默认是当前服务器,端口是3690)

  -d 表示以守护进程方式运行

  -r 选项用来指定svn服务的根目录,这样用户就可以使用相对路径访问,而不用提供完整路径,这样访问服务器时就可以直接 用svn://服务器ip来访问了。如果有多个项目,可以附加目录来访问(如:svn://10.19.3.103/ezhu)

6.开放3690端口【我的是AlmaLinux8.7,其余的Linux请查询自身的防火墙开端口指令】

firewall-cmd --zone=public --add-port=3690/tcp --permanent //添加端口
firewall-cmd --reload    //重载
firewall-cmd --zone=public --query-port=3690/tcp    //查询端口开放是否成功

7.设置开机启动

  1.以服务形式

    1.查看SVN的service文件

cat /lib/systemd/system/svnserve.service

    2.找到service读取的文件,编辑【在service中的EnvironmentFile】

vi /etc/sysconfig/svnserve
# OPTIONS is used to pass command-line arguments to svnserve.
# 
# Specify the repository location in -r parameter:
OPTIONS="-r /mnt/svn" 

    3.注册服务开机自启

systemctl enable svnserve.service

    4.reboot重启或启动服务

reboot
||
systemctl start svnserve.service

    5.权限问题导致无法启动的问题

  参考:https://www.cnblogs.com/lph970417/p/13073474.html

      # 执行下面两行命令
      ausearch -c 'svnserve' --raw | audit2allow -M my-svnserve
     semodule -i my-svnserve.pp

      # 在执行svn启动命令
      systemctl start svnserve.service

   另当使用svn客户端连接仓库的时候也会提示权限不足解决如下

#关闭SELinux,两种方式:
1、临时关闭:setenforce 0 

2、修改配置文件(需要重启服务器):
vi /etc/selinux/config
修改SELINUX=enforcing为SELINUX=disabled
重启服务器:   
reboot

  2.以脚本形式【我的Centos 8不生效,Centos 的 /etc/rc.d/rc.local 是没有执行权限的】

    1.新建脚本

cat > /root/svn_startup.sh << EOF
#!/bin/bash
/usr/bin/svnserve -d -r /mnt/svn/
EOF

    2.修改脚本运行权限

chmod 777 /root/svn_startup.sh

    3.在Linux自启动中添加

vi /etc/rc.d/rc.local

    在末尾添加脚本的路径,如:/root/svn_startup.sh

    4.reboot,重启

 查看svn启动进程

ps -ef|grep svnserve

8.svn集成图形管理界面系统【二选一,在他们的介绍页面有测试地址,可试用一下后决定使用哪一个】

  因为他们都是B/S应用,SvnAdmin基于PHP,svnWebUI基于Java,所以下面以Docker搭建来举例,如果本机服务器有具体的运行环境的话,可以不嫌麻烦搭建一下。

  1.SvnAdmin

    1.下载镜像

docker pull witersencom/svnadmin:2.4.7

    2.启动一个临时的容器用于复制配置文件出来

docker run -d --name svnadmintemp --privileged witersencom/svnadmin:2.4.7 /usr/sbin/init

    3.把配置文件复制到本机的 /home/svnadmin 目录

cd /home/
docker cp svnadmintemp:/home/svnadmin ./
docker cp svnadmintemp:/etc/httpd/conf.d ./svnadmin/
docker cp svnadmintemp:/etc/sasl2 ./svnadmin/

    4.删除掉临时容器

docker stop svnadmintemp && docker rm svnadmintemp

    5.启动正式的容器

docker run -d -p 80:80 -p 3690:3690 \
-v /home/svnadmin/:/home/svnadmin/ \
-v /home/svnadmin/conf.d/:/etc/httpd/conf.d/ \
-v /home/svnadmin/sasl2/:/etc/sasl2/ \
--privileged \
--name svnadmin \
witersencom/svnadmin:2.4.7

    6.进入容器内进行文件授权

docker exec -it svnadmin bash
chown -R apache:apache /home/svnadmin

     7.备注:

      1.可将原有的svn仓库挂载到/home/svnadmin/rep目录中,即可在svnadmin图像界面中显示并进行操作。

      2.默认数据库使用sqllite,可切换到mysql。

      3.其余操作参考官方文档介绍。

  2.svnWebUI

    1.下载镜像

docker pull cym1102/svnwebui:latest

    2.运行

docker run -itd -v /home/svnWebUI:/home/svnWebUI --privileged=true -p 6060:6060 -p 3690:3690 cym1102/svnwebui:latest

    3.访问

      备注:

      svnWebUI的访问端口在6060,SvnAdmin的访问端口在80,这点需要注意。

      原有仓库的挂载在/home/svnWebUI/repo下。

        

posted @ 2023-01-11 13:50  SpringCore  阅读(97)  评论(0编辑  收藏  举报