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下。