乐趣区

关于svn:SVNAdmin-好用的开源SVN管理系统

  • 基于 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 用户可本人批改明码 无需分割管理人员了

退出移动版