1.简介SVNAdmin2是一个通过图形界面管理服务器端SVN的Web程序。一般情况下,配置SVN仓库的人员权限,需要登录服务器手动修改authz和passwd文件。当仓库结构和人员权限扩大时,手动管理变得非常容易出错。该系统可以识别人员和权限并提供管理和扩展功能。SVNAdmin2支持SVN协议校验、HTTP协议校验,并支持两种协议的切换,支持docker部署或源码部署。SVNAdmin2支持LDAP访问,从而达到利用原有人员结构和分组规则的目的。SVNAdmin2的第一个版本(20年代初)是为个人管理SVN仓库而开发的。无意中打开源码后,发现用户越来越多,于是开始迭代维护。GitHub地址Gitee地址求助问题、功能建议、更新计划、SVN技术讨论,可以加QQ群:633108141项目演示地址:http://svnadmin.witersen.com(manager/admin/admin)系统截图2.兼容性docker>CentOS7>CentOS8>Rocky>UbuntuWindows如果需要,可以使用docker版本PHP版本:PHP5.5+推荐PHP7.0+数据库:SQLite,MySQLSubversion:1.8+3。dockerinstallation3.1适用于:快速部署看此方法效果可以快速部署程序体验效果,数据不存放在宿主机,生产环境慎用dockerrun-d--namesvnadmintemp-p80:80-p3690:3690--privilegedwitersencom/svnadmin:2.4.33.2适用于:新用户正式使用启动一个临时容器将配置文件copy出来dockerrun-d--namesvnadmintemp--privilegedwitersencom/svnadmin:2.4.3/usr/sbin/init复制配置文件到本地/home/svnadmin目录cd/home/&&dockercpsvnadmintemp:/home/svnadmin./删除临时容器dockerstopsvnadmintemp&&dockerrmsvnadmintemp启动官方容器dockerrun-d-p80:80-p3690:3690-v/home/svnadmin/:/home/svnadmin/--privileged--namesvnadminwitersencom/svnadmin:2.4.3回车文件授权容器dockerexec-itsvnadminbashchown-Rapache:apache/home/svnadmin3.3适用于:老用户升级2.4.x之前的用户升级到2.4.x(能上网的用户)进入容器yuminstall-yunzipcd/var/www/html/server&&phpinstall.phpyuminstall-y解压缩cyrus-saslcyrus-sasl-libcyrus-sasl-plainmod_dav_svnmod_ldapmod_phpphp-ldapcronieathttpd-kgracefulchown-Rapache:apache/home/svnadmin/phpsvnadmind.phpstopnohupsvnadmind.phpstart&2.4.x之前的用户升级到2.4.x(不能联网的用户)在有网络的环境下下载升级包,注意下载update.tar.gz而不是update.zip提前下载升级包,复制到容器/var/www/html/server/目录下cd/var/www/html/server/tar-zxvfupdate.tar.gzphpupdate/index.php退出容器停旧4.源码安装4.1适用于:CentOS7、Rocky等安装解压工具yuminstall-yzipunzipwgetvim其中安装sasl相关依赖(svnprotocolcheckout配置sasl认证如ldapto被使用)yuminstall-ycyrus-saslcyrus-sasl-libcyrus-sasl-plaininstallPHP及相关扩展(CentOS7默认源中提供的PHP版本为5.4,我们需要5.5+,所以使用remi源)yuminstall-yepel-releaseyum-utilsrpm-Uvhhttps://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpmyum-config-manager--enableremi-php74yuminstall-yphpphp-commonphp-cliphp-fpmphp-mysqlndphp-mysqlphp-pdophp-processphp-jsonphp-gdphp-bcmathphp-ldapinstallwebserver(推荐apache可以使用http协议查看)yuminstall-yhttpdmod_dav_svnsystemctlstarthttpdsystemctlenablehttpdinstalltaskplanningcomponent(taskplanningfunction使用)yuminstall-ycronieat下载解压代码包cd/var/www/html/&&wgethttps://gitee.com/witersen/SvnAdminV2.0/releases/download/v2.4.3/2.4.3.zipunzipv2.4.3.zip安装Subversion(如果你已经安装了Subversion,这个步骤可以跳过)(注意需要Subversion>=1.8)cd/var/www/html/server/#option1phpinstall.php修改Subversion的配置,使其可以被本系统管理cd/var/www/html/server#Option1orOption2phpinstall.php为数据目录授权所有者和组php脚本web调用是作为apache执行的,所以apache用户需要有数据目录的权限。如果使用nginxtomcat等其他web服务器,可以通过浏览器访问本机IP/server/own.php获取属主和属组chown-Rapache:apache/home/svnadmin手动启动后台进程(启动方式1)#pwd/var/www/html#backgroundrunningnohupphpsvnadmind.phpstart>/dev/null2>&1Stopbackgroundphpsvnandmin.phpstop#Debuggingmodephpsvnadmin.phpconsole通过系统启动后台进程管理(启动方式二)新建一个系统服务文件svnserve.service(centos一般是/usr/lib/systemd/system/svnserve.service,ubuntu一般是/lib/systemd/system/svnserve.service)写入如下内容(注意根据自己的代码部署路径调整)[Unit]Description=SVNAdminAfter=syslog.targetnetwork.target[Service]Type=simpleExecStart=/usr/bin/php/var/www/html/server/svnadmind.phpstart[Install]WantedBy=multi-user.targetoperationservice#启动systemctldaemon-reloadsystemctlstartsvnadmind#查看状态ssystemctlstatussvnadmind#Addsystemctlenablesvnadmind4.2applicableYu:宝塔面板安装方式与手动部署类似,但是宝塔系统有很多可视化操作,非常方便。root用户执行server/install.php和server/svnadmind.php)在ubuntu中,软件包名称与CentOS系列的大不相同,需要用户自行处理udoapt-getupdatesudoapt-getinstall-yapache2sudoapt-getinstall-yphpsudoapt-getinstall-yphp-clisudoapt-getinstall-yphp-fpmsudoa2enmodproxy_fcgisetenvifsudosystemctlrestartapache2sudoa2enconfphp7.2-fpmsudosystemctlreloadapache2sudoapt-getinstall-yphp-jsonsudoapt-getinstall-yphp7.2-mysqlsudoapt-getinstall-yphp-mysqlsudoapt-getinstall-ysqlite3sudoapt-getinstall-yphp7.2-sqlitesudoapt-getinstall-yphp-gdsudosystemctlrestartapache2sudoapt-getinstall-ysubversionsubversion-toolscd/var/www/htmlwgetxxx.zipunzipxxx.zip#Option2sudoserver/install.phpchown-Rapache:apache/home/svnadmin/surootnohupphpserver/svnadmind.phpstart&4.4适用于:老用户升级到2.4.x之前升级到2.4.xyuminstall-yunzipcd/var/www/html/server&&phpinstall.phpyuminstall-yunzipcyrus-saslcyrus-sasl-libcyrus-sasl-plainmod_dav_svnmod_ldapmod_phpphp-ldapcronieathttpd-kgraceful(webserveri无需重启)s不是apache)chown-Rapache:apache/home/svnadmin/(如果web服务器不是apache,请参考上面own.php的说明)phpsvnadmind.phpstopnohupsvnadmind.phpstart&(如果有自己的启动方式,就用自己的启动方式)之后2.4.x升级执行php代码/server/install.php。如果没有升级包,需要手动升级。手动升级,只需重新下载安装包即可覆盖之前的代码。因为下载的新代码没有之前的配置信息,需要重新修改你的配置文件数据库配置信息web/config/database.php主目录配置信息web/config/svn.php二进制文件配置文件web/config/bin.php五、常见问题5.1用这个系统管理以前的仓库?确认之前的SVN仓库的版本。如果是1.8+,就不用担心了。如果是1.8以下,只需要升级仓库即可。安装本系统,执行phpserver/install.php使用内置函数重新配置你的Subversion,替换现有的或者将多个SVN仓库移动到/home/svnadmin/rep/目录下,在导航SVN中执行同步列表warehouse识别SVN仓库注意:如果你原来使用的仓库是一套配置文件,你还是需要按照截图的方式稍微调整一下你的配置文件,因为现在是一套配置文件的管理方式在多个仓库中。5.2如何将数据库切换到MySQL?创建数据库svnadmin将安装包中的MySQL文件templete/database/mysql/svnadmind.sql导入到数据库中修改config/database.php注释掉sqlite部分,配置你的MySQLversion>=8.0,会提示:服务器请求客户端未知的认证方式,只需要升级php版本或者修改mysql数据库的配置信息即可。5.3为什么只支持Subversion1.8+的管理?因为目前是通过多个仓库读取一组配置文件的方式,而subversion1.8+只支持这种方式。预计2.5.x版本向下适配,支持Subversion1.5+5.4管理。为什么目前只支持Linux操作系统??系统中使用了一些多进程的方案,在Windows下实现会花费更多的时间。短期内没有支持Windows部署的计划。Windows下可以使用docker5.5版本的仓库初始化结构模板吗?我们在创建仓库的时候可以选择创建一个指定内容结构的仓库,比如包含“trunk”“branches”“tags”文件夹的结构。这种结构是可选的和可调的。我们可以手动调整/home/svnadmin/templete/initStruct/01/下的目录结构5.6推荐的常用hooks?我们可以在/home/svnadmin/hooks/目录下添加我们常用的hooks,在/home/svnadmin/hooks/下新建一个文件夹xx,在xx下新建一个文件hookDescription,名称任意。在xx下写这个hook的描述文字新建一个文件hookName写hook类型,比如post-commit等在xx下新建一个文件,以hook类型命名,比如post-commit,然后写具体hook内容yuminstall-ysqlite-develcd/home/svnadminsqlite3svnadmin.db.headeron.modecolumnselect*来自admin_users;使用MySQL数据库,使用可视化工具登录数据库查看admin_users数据表信息。5.8关于大文件下载中断问题下载1G以上的大文件时,下载会中断,因为文件下载是为了安全不是使用http文件直接链接,而是通过php验证后读取文件流下载,php-fpm的最大执行时间会有问题,所以可以将php-fpm.conf配置文件的request_terminate_timeout设置为0,取消超时限制5.9容器启动后web服务无法正常访问restarted(svn不受影响)【原因】重启容器后,由于某些原因导致容器中的httpd重启失败1.构建的docker镜像是基于CentOS7.9.2009由于CentOS7.9.2009base的权限问题image:https://github.com/docker-library/docs/tree/master/centos#dockerfile-for-systemd-base-image如果启动容器时不加--privileged参数并且如果/usr/sbin/init未使用作为第一个执行的命令,容器中的一些程序将无法正常启动。2、另外,不排除重启后再次启动httpd时,httpd.运行时误判【解决】如果重启容器后无法访问web管理系统,只要进入容器,执行如下命令重启httpd服务/usr/sbin/httpd.conf后面会考虑更方便的方案5.10如果配置了多个仓库模板,创建仓库时如何指定某个仓库模板?例如:在/home/svnadmin/templet/initStruct/01下配置第一个仓库结构模板在/home/svnadmin/templet/initStruct/02下配置第二个仓库结构模板在web中创建时如何选择默认的仓库结构/home/svnadmin/templete/initStruct/02下的模板?【解决】由于时间问题,开发时没有详细开发该功能,所以只保留配置文件级别的修改路径,后续会更新仓库。web配置增加模板功能,无需手动命令行管理。可以在config/svn.php中修改templete_init_struct_01的值。在/home/svnadmin/templete/initStruct/01下,而不是在项目代码相关的位置5.12Thedatalengthexceeds8192请向上调整参数:SOCKET_READ_LENGTH【问题原因】svn的用户数和权限配置有增加,超过默认值[解决]修改config/daemon.php文件中的SOCKET_READ_LENGTH和SOCKET_WRITE_LENGTH为133693415字节,约128M。方式根据安装方式不同(不重启会出问题)【适用版本】2.1.0+6.捐赠感谢您在业余时间将我的大部分时间和精力花在SVNAdmin2上。如果可以的话,希望各位网友踊跃捐款,多多捐款代表认可,作者会继续更新的动力!捐助频道时间qq@猫衣服的苏狐QQ2021-08-19qq@cat微信2022-10-10qq@Listen_WeChat2022-11-16qq@小吴飞刀|mike微信2022-11-16gitee@tango_zhuGitee2022-11-18qq@三多~(?°3°?)支付宝2022-11-28wechat@Z*h微信2022-11-30
