- 基于 web 的 Subversion(SVN)服务器端管理工具,反对 docker 部署
- 反对性能:SVN 仓库治理、SVN 用户治理、SVN 分组治理、目录受权、目录浏览、Hooks 治理、在线 dump 备份、在线备份复原、SVN 用户禁用、服务器状态治理、日志治理、音讯告诉、更新检测 …
- 演示地址:http://svnadmin.witersen.com (默认的用户名与明码都为 admin)
-
我的项目地址:
- GitHub 地址:https://github.com/witersen/S…
- Gitee 地址:https://gitee.com/witersen/Sv…
-
发行包:
- GitHub:https://github.com/witersen/S…
- Gitee:https://gitee.com/witersen/Sv…
-
兼容性
- 本程序提供 docker 镜像,基于 centos7.9.2009 构建
- 操作系统(手动装置):CentOS7(举荐)、CentOS8、Rocky、Ubuntu(Windows 及其它 Linux 发行版正在测试兼容中)
- PHP 版本:5.5 <= PHP < 8.0
- 数据库:SQLite、MySQL
- Subversion:1.8+
- 问题帮助或性能倡议加 Q 群:633108141
一、手动装置
1、在 CentOS7.6 操作系统裸机装置示例
- 装置 PHP 和相干扩大
# 解压缩和网络获取工具
yum install -y zip unzip wget vim
# 因为 CentOS7 默认源中提供的 PHP 版本为 5.4,而咱们须要 5.5+,因而应用 remi 源
# 可将 remi-php55 切换为想装置的版本
yum install -y epel-release yum-utils
rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php55
# 装置 php 及相干扩大
yum install -y php php-common php-cli php-fpm php-json php-mysqlnd php-mysql php-pdo php-process php-json php-gd php-bcmath
- 装置 web 服务器
# 以 apache 为例
yum install -y httpd
systemctl start httpd
systemctl enable httpd
- 装置本程序
# 将代码包下载到 /var/www/html/ 目录并解压
cd /var/www/html/
# 代码包从发行版获取
wget https://gitee.com/witersen/SvnAdminV2.0/releases/download/v2.3.3/v2.3.3.zip
# 解压
unzip v2.3.3.zip
- 装置 Subversion(如果你装置过 Subversion,本步骤能够略过)
# 因为 CentOS7.6 默认源中的 Subversion 版本为 1.7 因而咱们须要通过装置脚本装置高版本(>=1.8)# 切换目录
cd /var/www/html/server/
# install.php 文件能够帮忙咱们装置 Subversion
php install.php
- 批改 Subversion 的配置使其反对被本系统管理
# 切换到目录
cd /var/www/html/server
#install.php 文件能够帮忙咱们配置 Subversion
php install.php
-
将本程序退出系统管理和开机自启(系统管理)(举荐)(与下方启动形式二选一即可)
-
# 新建文件 svnserve.service vim /usr/lib/systemd/system/svnadmind.service
-
# 写入以下内容 #留神 /var/www/html/server/svnadmind.php 要改为本人理论的文件门路 #文件名称为 svnadmind 则示意咱们新建的服务名称为 svnadmind [Unit] Description=SVNAdmin After=syslog.target network.target [Service] Type=simple ExecStart=/usr/bin/php /var/www/html/server/svnadmind.php start [Install] WantedBy=multi-user.target
-
# 启动 systemctl daemon-reload systemctl start svnadmind #查看状态 systemctl status svnadmind #退出开机自启动 systemctl enable svnadmind #勾销开机自启动
-
-
启动本程序的后盾过程(手动治理)(与上方启动形式二选一即可)
-
# 正式启动(后盾模式)nohup php svnadmind.php start >/dev/null 2>&1 & #进行 php svnandmin.php stop #调试模式
-
2、在装置宝塔面板的操作系统装置示例
- 装置形式跟手动部署相似,只是宝塔零碎了很多可视化操作很不便
- 参考视频:SVNAdmin V2.2.1 零碎部署与应用演示视频【针对宝塔面板】
3、在 ubutntu18 装置示例
- 留神以 root 用户执行 server/install.php 和 server/svnadmind.php 即可
4、在 Rocky 装置示例
- 无注意事项
二、docker 装置
-
拉取镜像
-
# 拉取镜像
-
-
仅运行查看成果(不挂载数据)
-
docker run -d \ --name svnadmintemp \ -p 80:80 \ -p 3690:3690 \ --privileged \
-
-
用于生产环境(挂载数据到容器中,容器销毁数据不会失落)
-
新用户
-
# 启动一个长期容器,并将配置文件复制进去 docker run -d \ --name svnadmintemp \ --privileged=true \ witersencom/svnadmin:2.3.3 \ /usr/sbin/init #复制的数据目录为 /home/svnadmin/ cd /home/ docker cp svnadmintemp:/home/svnadmin ./ #进行并删除长期容器 dockeer stop svnadmintemp && docker rm svnadmintemp #启动正式容器 docker run -d \ -p 80:80 \ -p 3690:3690 \ -v /home/svnadmin/:/home/svnadmin/ \ --privileged \
-
-
老用户(2.3.1+)
-
# 假如数据存储主目录在宿主机的地位为 /home/svnadmin/ 则间接依照上面形式启动即可 会主动将宿主机数据挂载到容器中 docker run -d \ -p 80:80 \ -p 3690:3690 \ -v /home/svnadmin/:/home/svnadmin/ \ --privileged \
-
-
三、手动降级
3.1、docker 用户
- docker 版本只须要进行原来的镜像而后拉取新镜像即可
- 留神将数据存在宿主机
3.2、非 docker 用户
-
程序降级实质就是用新代码替换旧代码,而后用户的数据存储目录无需扭转,流程如下:
- 进行后盾 php server/svnadmind.php stop
- 下载新版本代码,替换旧版本代码
-
执行适配程序 php server/install.php
- 执行脚本并抉择应用第 2 个选项,抉择不笼罩原来的 autzh、passwd、svnadmin.db 等文件
- 重新启动后盾
- 如果用户之前本人批改了配置文件,则须要降级后从新批改配置文件
四、FAQ
1、如何将已有的 SVN 仓库应用此系统管理?
- (1)装置本零碎
- (2)执行 php server/install.php 应用内置的性能重新配置你的 Subversion
- (3)将已有的一个或多个 SVN 仓库挪动到 /home/svnadmin/rep/ 目录下
- (4)刷新管理系统的仓库治理页面即可辨认 SVN 仓库
- (5)留神此形式并不会辨认 SVN 仓库原有的用户以及权限配置,因为咱们应用了对立的配置文件来进行用户和权限治理,因而迁徙仓库后还须要在管理系统从新增加用户、用户组、配置权限!
2、如何将数据库切换为 MySQL?
- 创立数据库
- 将零碎提供的 mysql 数据库文件导入到你的 MySQL 数据库
- 批改 config/database.php 将 sqlite 局部正文并配置你的 MySQL 即可
- 留神:若 php 版本过低而 MySQL 版本 >=8.0,则会提醒:The server requested authentication method unknown to the client,只须要降级 php 版本或者批改 MySQL 数据库的配置信息即可
3、为什么只反对治理 Subversion1.8+?
- 预计在 2.5.x 版本向下适配,反对治理 Subversion 1.5+
4、为什么目前只反对 Linux 操作系统?
- 正在应用新计划对 Windows 操作系统进行反对测试
- 预计在 2.4.x 版本反对 Windows 部署
5、仓库初始化构造模板?
- 咱们能够在创立仓库的时候抉择创立指定内容构造的仓库,如蕴含 “trunk” “branches” “tags” 文件夹的构造,这一构造是可选的并且可调整的,咱们能够手动调整 /home/svnadmin/templete/initStruct/01/ 下的目录构造
6、罕用钩子举荐?
-
咱们能够在目录 /home/svnadmin/hooks/ 下减少本人罕用的钩子
- /home/svnadmin/hooks/ 下建设文件夹 xx,名称任意
- 在 xx 下新建文件 hookDescription 写入对此钩子的形容文本内容
- 在 xx 下新建文件 hookName 写入钩子类型,如 post-commit 等
- 在 xx 下新建文件,以钩子类型命名,如 post-commit,而后写入具体钩子内容
- 感激【南方糙汉子 -】提供的钩子脚本
7、对于 Subversion 权限配置中的魔力符号
- Subversion 从 1.5 开始反对用户应用一些魔力符号如 $authenticated、$anonymous
- 预计在 2.3.4 版本反对 Subversion 的全副权限配置个性
8、对于与 LDAP 对接
- 预计在 2.4 版本从新规划系统权限调配,并反对 LDAP 等认证形式
9、如何找回明码
-
应用默认的 SQLite 数据库
# 应用 sqlite 数据库 yum install -y sqlite-devel cd /home/svnadmin sqlite3 svnadmin.db .header on .mode column select * from admin_users;
-
应用 MySQL 数据库
- 应用可视化工具登录到数据库查看 admin_users 数据表信息即可
10、对于大文件下载中断问题
- 当下载 1G 以及以上的大文件会呈现下载被中断的问题,是因为文件下载为了平安没有应用 http 文件直链,而是通过 php 校验后读取文件流下载,所以会存在一个 php-fpm 最大执行工夫的问题,因而你能够通过 设置 php-fpm.conf 配置文件的 request_terminate_timeout 为 0 来勾销超时限度
11、容器重启后无奈失常拜访 web 服务(svn 不受影响)
【起因】重启容器后,容器内的 httpd 因为一些起因没有胜利重启
1、构建的 docker 镜像是以 CentOS7.9.2009 为根底进行的
因为 CentOS7.9.2009 根底镜像的权限问题:https://github.com/docker-library/docs/tree/master/centos#dockerfile-for-systemd-base-image
导致如果启动容器时不减少 --privileged 参数 和不以 /usr/sbin/init 作为首先执行的指令,将会导致容器内一些程序无奈失常启动
2、另外不排除重启后再次启动 httpd 时因为上次的 httpd.pid 文件仍然造成的辨认未 httpd 运行中的误判【解决方案】如果重启容器后 web 管理系统无法访问
只须要进入容器并执行上面的命令重新启动 httpd 服务即可
/usr/sbin/httpd
或者
/usr/sbin/httpd -DFOREGROUND &
前面会思考更换更不便的解决方案
12、如果配置了多个仓库模板,如何在创立仓库时指定应用某个仓库模板?
例如:在 /home/svnadmin/templete/initStruct/01 上面配置第一个仓库构造模板
在 /home/svnadmin/templete/initStruct/02 上面配置第二个仓库构造模板
如果在 web 中创立时,如何选用默认的 /home/svnadmin/templete/initStruct/02 上面的仓库构造模板?【解决方案】因为工夫问题,开发时并没有对此性能做更多的具体开发,因而只预留了配置文件层面的批改路径,后续会将仓库模板性能退出到 web 配置,无需手动命令行治理
能够通过批改 config/svn.php 中的 templete_init_struct_01 值来批改
13、docker 版本要批改容器内 svn 的 3690 默认端口
【解释】既然应用 docker 版本,则无需思考容器内利用的端口,因为可通过容器启动时候做端口映射
docker 版本因为处于容器中权限问题禁用了一些按钮的操作权限,如批改 svn 服务的端口和绑定主机等信息
如果启动容器时,映射关系为 3691:3690 示意宿主机 3691 映射到容器的 3690,因而在容器中批改 3690 为 3692,会导致宿主机的 3691 无奈提供服务
前面会改良 docker 版本,尽量令应用体验跟原生机器统一【批改端口计划】法 1
间接在容器启动时即指定宿主机的映射端口,如 3692:3690 这样在容器中的管理系统查看还是 3690,然而宿主机通过 3692 提供 svn 服务
法 2(通过提供的 dockefile 本人重构 docker 镜像)批改所有文件中的 3690 端口为想要的端口如 3692
之后通过 docker build . -t svnadmin:xxx-edit 即可失去标签为 svnadmin:xxx-edit 的自定义构建镜像
这样的做法益处为管理系统查看到的端口为 3692,启动 docker 时候映射端口的写法也可为 3692:3692
14、如何创立其它的管理员账户 ?
因为目前的管理系统版本没有思考到多用户权限治理的问题,此问题将在后续版本退出多用户权限治理解决
如果须要多个不同的管理员账号能够通过向管理员表 admin_users 手动插入数据
应用 sqlite:数据库文件地位 /home/svnadmin/svnadmind.db,如果不相熟 sqlite 的命令行插入,能够下载该文件到本地,应用 navicat 系列数据库管理软件关上批改,之后笼罩到服务器
应用 mysql:进入命令行手动批改
15、配置了自定义仓库模板然而创立仓库时没有失效
留神配置自定义仓库模板的地位
通常的地位在 /home/svnadmin/templete/initStruct/01 上面
而不是在我的项目代码相干的地位
16、数据长度超过 8192 请向上调整参数:SOCKET_READ_LENGTH
【呈现问题起因】svn 的用户量和权限配置数量减少,超过了默认值【解决方案】批改 config/daemon.php 文件中的 SOCKET_READ_LENGTH 和 SOCKET_WRITE_LENGTH
设置到 133693415 字节也就是大概小于 128M 貌似都是能够的,再大没有测试过
批改后别忘记要重启守护过程,重启守护过程的形式依据装置形式的不同而不同(不重启会出问题)【实用版本】2.1.0+
17、登录时二维码总是提醒输出谬误
【呈现问题起因】首次登录数据信息默认应用 sqlite 数据库
因为部署问题或其它问题造成数据库文件 /home/svnadmin/svnadmin.db 没有权限【解决方案】为 sqlite 数据库文件和文件所在目录受权 777
chmod 777 /home/svnadmin/svnadmin.db
chmod 777 -R /home/svnadmin
如果是容器部署,须要在容器中执行此操作而不是在宿主机执行
18、本程序的工作模式
- 通过使 svnadmind.php 成为守护过程并监听指定端口来工作
-
php-fpm 与 php-cli 程序的应用 TCP 套接字通信
五、性能介绍
-
登录界面可分角色登录,配合后端实现的登录验证码更平安(验证码可后盾手动敞开开启)
-
服务器状态监控和信息统计,对以后服务器状态和 SVN 仓库信息更加理解
-
SVN 仓库概览,提供了多种高级性能,还可依据仓库名、版本数、体积等一键排序
-
新建 SVN 仓库提供两种模式 随便抉择
-
在线目录浏览更加不便 逐层加载,服务资源占用更低
-
通过目录面包屑能够随时回到某级目录 能够看到目录的作者、版本、提交日期、提交日志等,还可一键复制检出地址
-
仓库受权准确到文件级别,可对用户和用户组疾速受权和更改权限
-
反对在线 dump 形式备份,备份文件可随时下载或删除
-
反对对 SVN 仓库钩子的治理
-
提供了罕用钩子,也能够将本人的罕用钩子放在这里
-
能够查看每个仓库的详细信息,一键复制详细信息更加不便
-
能够将通过 dump 形式备份的文件再导入仓库 实现 SVN 仓库的迁徙
-
仓库导入过程中如果抛出了错误信息会被收集被显示 不便管理人员更好的定位问题
-
能够很不便的批改仓库名称,这会主动同步配置文件,所以无需放心
-
删除仓库也会有危险提醒
-
SVN 用户治理反对启用、禁用、增加备注信息,治理用户更加不便
-
SVN 分组反对显示其蕴含的用户和分组数量 同时反对批改备注信息
-
能够对分组进行用户成员编辑,零碎会贴心的提醒用户是否处于禁用状态
-
用户治理反对组嵌套,同时如果你不小心搞了一个循环嵌套,零碎会提醒你
-
分组名反对批改,零碎会帮你批改配置文件的所有,无需放心
-
零碎提供了日志性能,能够对系统的运行状况做个记录啦
-
管理人员能够批改本人的账号和明码,更加平安
-
零碎提供了 svnserve 主机和端口绑定性能 而且开启了 svnserve 的运行日志 为你多一层运维保障
-
看看你的数据都在哪里存储呢
-
配置邮件告诉服务吧
-
危险操作能够来个提醒
-
看看有没有新版本吧
-
SVN 用户集体的界面 只可看到被受权的仓库门路
-
SVN 用户可本人批改明码 无需分割管理人员了