- 基于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-utilsrpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpmyum-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 httpdsystemctl start httpdsystemctl 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文件能够帮忙咱们装置Subversionphp install.php
- 批改Subversion的配置使其反对被本系统管理
#切换到目录cd /var/www/html/server#install.php文件能够帮忙咱们配置Subversionphp install.php
将本程序退出系统管理和开机自启(系统管理)(举荐)(与下方启动形式二选一即可)
#新建文件 svnserve.servicevim /usr/lib/systemd/system/svnadmind.service
#写入以下内容#留神 /var/www/html/server/svnadmind.php 要改为本人理论的文件门路#文件名称为 svnadmind 则示意咱们新建的服务名称为 svnadmind[Unit]Description=SVNAdminAfter=syslog.target network.target[Service]Type=simpleExecStart=/usr/bin/php /var/www/html/server/svnadmind.php start[Install]WantedBy=multi-user.target
#启动systemctl daemon-reloadsystemctl 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-develcd /home/svnadminsqlite3 svnadmin.db.header on.mode columnselect * 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用户可本人批改明码 无需分割管理人员了