如何通过Web高效管理多个项目的SVN仓库(适用于中小型研发团队)

TIPS:
希望是你见过的最简洁配置文档,结构清晰,代码精简,减少新手入门的成本,帮助更多的人掌握。

时间 描述 备注
2017-3-31 21:28:00 1.编辑文档,添加截图 -
2017-3-31 23:08:30 1.修改“场景”中文字描述 2.修改多处结构错误 -
2017-3-31 23:30:50 1.修改5.5节,code格式问题 -
2017-4-1 9:38:40 1.增加8.3节,tomcat开机自动启动服务 -
2017-4-5 12:10:50 1.修改2.5.2节,subversion.conf配置文件1处错误 2.补充8.2节,目录权限修改 -
2017-4-5 12:30:30 1.增加补充部分,SNV ADMIN配置成功的状态截图 -
2018-1-3 10:13:30 1.增加权限管理中“认证失败”的问题 -
- - -

采用方案

Linux+Apache+Subversion+MySQL+JDK+Tomcat+Svnadmin

目录

0.安装准备

  • 0.1 升级系统软件包
  • 0.2 关闭SELinux
  • 0.3 安装wget

1.部署Apache

  • 1.1 安装apache
  • 1.2 修改配置文件
  • 1.3 启动apache服务
  • 1.4 调整防火墙,允许80端口访问
  • 1.5 浏览器访问测试

2.部署Subversion

  • 2.1 安装SVN
  • 2.2 重启apache服务
  • 2.3 检查svn模块是否安装上了apache
  • 2.4 查看svn版本
  • 2.5 配置SVN仓库
    • 2.5.1 创建SVN库主目录
    • 2.5.2 编辑配置文件subversion.conf
    • 2.5.3 创建/data/svn/passwd.http和/svn/authz文件
    • 2.5.4 重启apache服务

3.部署MySQL

  • 3.1 安装MySQL
  • 3.2 mysql开机自动启动
  • 3.3 启动mysql服务
  • 3.4 调整防火墙,允许3306端口访问
  • 3.5 设置mysql数据库的root用户密码

4.部署Tomcat

  • 4.1 安装JDK

  • 4.1.1 下载安装包

  • 4.1.2 解压软件包

  • 4.1.3 修改环境变量

  • 4.1.4 使配置立即生效

  • 4.1.5 检验是否生效

  • 4.2 安装Tomcat

  • 4.2.1 下载安装包

  • 4.2.2 解压缩apache-tomcat软件包

  • 4.2.3 修改tomcat的配置文件

  • 4.2.4 调整防火墙,允许8080端口被访问

  • 4.2.5 重启防火墙,使端口配置生效

5.部署jsvnadmin

  • 5.1 删除tomcat/webapps目录中的默认文件
  • 5.2 下载svnadmin软件包
  • 5.3 解压缩svnadmin软件包
  • 5.4 将svnadmin.war解压到tomcat/webapps的svnadmin目录中
  • 5.5 修改svnadmin的jdbc属性文件中连接mysql的默认账户密码

6.初始化svnadmin的数据库

  • 6.1 创建svnadmin数据库
  • 6.2 导入sql文件(mysql5.sql 和en.sql )
  • 6.3 启动tomcat服务

7.浏览器访问,初始化配置

8.补充部分

  • 8.1 查看新增目录、文件,及authz配置参数
  • 8.2 配置仓库的目录权限
  • 8.3 配置rc.local让tomcat开机自动启动服务
  • 8.4 权限公里中“认证失败”的问题

场景

  • 互联网小型公司刚开始启动项目的时候,一般只有一个项目,这个时候,只需要在服务器上部署单库的SVN提供服务即可满足需求,运维人员刚开始只需要在命令行手动配置仓库,新人入职改改passwd和authz配置文件添加账号和权限就能搞定,但随着公司的日益发展壮大,研发队伍越来越壮大,人数越来越多,项目模块化,分布式,SOA服务化,多项目同时研发、测试、发布上线等等,运维人员忙的不可开交,旧法子已经完全不能满足需求了,怎么办呢?本着高效率工作,多玩耍的思想,运维人员要寻求更快更便捷的方法来解决问题,那么一定是服务化的方法了,通过WEB UI的方式管理,点点鼠标可以轻松搞定。
  • Jsvnadmin的出现,就改变了以往纯命令行或脚本的原始化方法,它是一个 Java 开发的管理 Svn 服务器的项目用户的 web 应用。安装好 Svn 服务器端好,把 Svn Admin 部署好,就可以通过 web 浏览器管理 Svn 的项目,管理项目的用户,管理项目的权限。使得管理配置 Svn 简便,再也不需要每次都到服务器手工修改配置文件。

svnadmin优点

  • 多数据库: Svn 项目配置数据保存在数据库,支持所有数据库(默认MySQL/Oracle/SQL Server)
  • 多操作系统:支持 Window,Linux 等操作系统。
  • 权限控制:管理员可以随意分配权限、项目管理员可以管理项目成员、成员只能查看和修改自己的密码。
  • 支持多项目、多用户、多用户组 Group(默认带有“项目管理组”、 “项目开发组”、 “项目测试组”)。
  • 安全:密码加密保存。
  • 多协议:支持 svn 协议和 http 协议(从 2.0 开始支持 Apache 服务器- - 单库方式,从 3.0开始支持 Apache 多库方式)
  • 仓库浏览(从 3.0.2 开始)
  • 多语言(从 3.0.2 开始)

解决方案

  • Svnadmin 在 Java 1.6、 Tomcat 6、 Subversion 1.6、 MySQL 5.1、 Apache 2.2、Windows 7 上开发测试通过,同时支持其他操作系统和数据库。
  • 常采用的方案:
  • Linux+Apache+Subversion+MySQL+Tomcat+Svnadmin
  • Windows+Apache+Subversion+MySQL+Tomcat+Svnadmin
  • 支持 svn 协议
    Svn 的配置信息都在仓库目录的 conf 下的 authz,passwd,svnserve.conf 三个文件中,配置用户和权限都是通过修改 passwd 和 authz,立刻就生效。 Svn Admin 的本质是对这 3个文件进行管理,所有成员、权限的数据都保存在数据库中, 一旦在Svn Admin 的页面上修改,就会把配置信息输出到 conf 下的那 3 个配置文件中。
  • 支持 http 协议
    Apache+SVN 配置成功后可以有两种方式:
    • 多库方式: SVNParentPath 指定一个父目录,所有仓库在这个父目录下,使用一个密码文件和一个权限配置文件。优点是增加删除仓库不需要改 apache的 httpd.conf,不需要重启 Apache。缺点是项目多会很混乱。
    • 单库方式: SVNPath 每个仓库单独配置各自的密码和权限文件。优点是各自分开,互相不影响,维护方便。缺点是增加或删除仓库需要修改 apache 的httpd.conf 后重启。

0.安装准备

OS:CentOS6.8 x64

0.1 升级系统软件包
  [root@example00 ~]# yum -y update
0.2 关闭SELinux
  [root@example00 ~]# vim /etc/sysconfig/selinux 
  SELINUX=disabled
0.3 安装wget
  [root@example00 ~]# yum -y install wget

准备工作做完以后,reboot命令重启服务器

1.部署Apache

1.1 安装apache
  [root@example00 ~]# yum -y install httpd httpd-devel
1.2 修改配置文件
  [root@example00 ~]# vim /etc/httpd/conf/httpd.conf
   276 ServerName localhost:80
1.3 启动apache服务
开机自动启动
  [root@example00 ~]# chkconfig httpd on
启动apache服务
  [root@example00 ~]# service httpd start
1.4 调整防火墙,允许80端口访问
  [root@example00 ~]# vim /etc/sysconfig/iptables
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
  [root@example00 ~]# service iptables restart
1.5 浏览器访问:http://192.168.1.190

出现apache的欢迎页面

apache欢迎页面

2.部署Subversion

2.1 安装SVN
  [root@example00 ~]# yum -y install subversion mod_dav_svn
2.2 重启apache服务
  [root@example00 ~]# service httpd restart
2.3 检查svn模块是否安装上了apache
  [root@example00 ~]# ls /etc/httpd/modules/ | grep svn
  mod_authz_svn.so
  mod_dav_svn.so
2.4 查看svn版本
  [root@example00 ~]# svn --version
  svn, version 1.6.11 (r934486)
     compiled Aug 17 2015, 08:37:43
2.5 配置SVN仓库
2.5.1 创建SVN库主目录

多库模式,一份配置文件管理多个库

  [root@example00 ~]# mkdir -p /data/svn        # 
2.5.2 编辑配置文件subversion.conf
  [root@example00 ~]# cd /etc/httpd/conf.d/
  [root@example00 conf.d]# ls
  README  subversion.conf  welcome.conf
  [root@example00 conf.d]# vim subversion.conf 
  #Include /data/svn/httpd.conf
  <Location /svn/>
          DAV svn
          SVNListParentPath on
          SVNParentPath /data/svn
          AuthType Basic
          AuthName "Subversion repositories"
          AuthUserFile /data/svn/passwd.http
          AuthzSVNAccessFile /data/svn/authz
          Require valid-user
  </Location>
  RedirectMatch ^(/svn)$ $1/
2.5.3 创建/data/svn/passwd.http和/svn/authz文件
  [root@example00 conf.d]# touch /data/svn/passwd.http
  [root@example00 conf.d]# touch /data/svn/authz
2.5.4 重启apache服务
  [root@example00 conf.d]# service httpd restart

3.部署MySQL

3.1 安装MySQL
  [root@example00 ~]# yum -y install mysql-server mysql mysql-devel
3.2 mysql开机自动启动
  [root@example00 ~]# chkconfig mysqld on
3.3 启动mysql服务
  [root@example00 ~]# service mysqld start
3.4 调整防火墙,允许3306端口访问
  [root@example00 ~]# vim /etc/sysconfig/iptables
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

  [root@example00 ~]# service iptables restart
3.5 设置mysql数据库的root用户密码
  [root@example00 ~]# mysqladmin -u root password 'mypassword'
3.5 授权root账户远程访问mysql
  [root@example00 conf.d]# mysql -u root -p
  mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
  Query OK, 0 rows affected (0.00 sec)

  mysql> FLUSH PRIVILEGES;
  Query OK, 0 rows affected (0.00 sec)

  mysql> exit
  Bye

4.部署Tomcat

4.1 安装JDK

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

4.1.1 下载安装包
  [root@example00 ~]# cd /usr/local/src/
  [root@example00 src]# wget http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz
4.1.2 解压软件包
  [root@example00 src]# tar -zxvf jdk-8u121-linux-x64.tar.gz -C /usr/local/
  [root@example00 src]# cd /usr/local/jdk1.8.0_121/
  [root@example00 jdk1.8.0_121]# pwd
  /usr/local/jdk1.8.0_121
4.1.3 修改环境变量
  [root@example00 ~]# vim /etc/profile
  # Java_Home
  JAVA_HOME=/usr/local/jdk1.8.0_121
  JRE_HOME=/usr/local/jdk1.8.0_121/jre
  PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
  CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
  export JAVA_HOME JRE_HOME PATH CLASSPATH
4.1.4 使配置立即生效
  [root@example00 ~]# source /etc/profile
4.1.5 检验是否生效

方法1:

  [root@example00 ~]# java -version
  java version "1.7.0_131"
  OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)
  OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)

方法2:

  [root@example00 ~]# echo $PATH
  /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.8.0_121/bin:/usr/local/jdk1.8.0_121/jre/bin:/root/bin
  [root@example00 ~]# echo $JRE_HOME
  /usr/local/jdk1.8.0_121/jre
  [root@example00 ~]# echo $JAVA_HOME
  /usr/local/jdk1.8.0_121
4.2 安装Tomcat

下载地址:http://tomcat.apache.org/download-70.cgi
找到Core中tar.gz,右键复制链接

4.2.1 下载安装包
  [root@example00 ~]# cd /usr/local/src/
  [root@example00 src]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.76/bin/apache-tomcat-7.0.76.tar.gz
4.2.2 解压缩apache-tomcat软件包
  [root@example00 src]# tar -zxvf apache-tomcat-7.0.76.tar.gz -C /usr/local/
  [root@example00 src]# cd /usr/local/
  [root@example00 local]# mv apache-tomcat-7.0.76/ tomcat
4.2.3 修改tomcat的配置文件

末尾增加URIEncoding参数为UTF-8

  [root@example00 src]# vim /usr/local/src/svnadmin-tomcat/conf/server.xml 
   22 <Server port="8005" shutdown="SHUTDOWN">
   71     <Connector port="8080" protocol="HTTP/1.1"
   72                connectionTimeout="20000"
   73                redirectPort="8443" URIEncoding="UTF-8"/>
4.2.4 调整防火墙,允许8080端口被访问
  [root@example00 src]# vim /etc/sysconfig/iptables
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
4.2.5 重启防火墙,使端口配置生效
  [root@example00 src]# service iptables restart

5.安装jsvnadmin

下载链接
https://code.google.com/archive/p/jsvnadmin/
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/jsvnadmin/svnadmin-3.0.5.zip

5.1 删除tomcat/webapps目录中的默认文件
  [root@example00 ~]# rm -rf /usr/local/tomcat/webapps/*
5.2 下载svnadmin软件包
  [root@example00 ~]# cd /usr/local/src/
  [root@example00 webapps]# wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/jsvnadmin/svnadmin-3.0.5.zip
5.3 解压缩svnadmin软件包
  [root@example00 src]# unzip svnadmin-3.0.5.zip -d svnadmin
  [root@example00 src]# cd svnadmin
5.4 将svnadmin.war解压到tomcat/webapps的svnadmin目录中
  [root@example00 svnadmin]# unzip svnadmin.war -d /usr/local/tomcat/webapps/svnadmin
5.5 修改svnadmin的jdbc属性文件中连接mysql的默认账户密码
  [root@example00 svnadmin]# vim /usr/local/tomcat/webapps/svnadmin/WEB-INF/jdbc.properties 
  db=MySQL

  #MySQL
  MySQL.jdbc.driver=com.mysql.jdbc.Driver
  MySQL.jdbc.url=jdbc:mysql://127.0.0.1:3306/svnadmin?characterEncoding=utf-8
  MySQL.jdbc.username=root
  MySQL.jdbc.password=mypassword

6.初始化svnadmin的数据库

6.1 创建svnadmin数据库
  [root@example00 ~]# mysql -u root -p
  mysql> CREATE DATABASE svnadmin CHARACTER SET utf8;
  Query OK, 1 row affected (0.00 sec)

  mysql> show databases;
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | mysql              |
  | svnadmin           |
  | test               |
  +--------------------+
  4 rows in set (0.00 sec)

  mysql> exit
  Bye
6.2 导入sql文件(mysql5.sql 和en.sql )
  [root@example00 svnadmin]# mysql -u root -p svnadmin < /usr/local/src/svnadmin/db/mysql5.sql 
  [root@example00 svnadmin]# mysql -u root -p svnadmin < /usr/local/src/svnadmin/db/lang/en.sql 
6.3 启动tomcat服务
  [root@example00 ~]# /usr/local/tomcat/bin/startup.sh 
  Using CATALINA_BASE:   /usr/local/tomcat
  Using CATALINA_HOME:   /usr/local/tomcat
  Using CATALINA_TMPDIR: /usr/local/tomcat/temp
  Using JRE_HOME:        /usr/local/jdk1.8.0_121/jre
  Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

7.浏览器访问,初始化配置

浏览器访问:http://192.168.1.190:8080/svnadmin/
页面提示:欢迎使用SVN ADMIN,第一次使用请设置管理员帐号和密码.
输入账号/密码,即为svnadmin的默认WEB登录账号密码,需要保存起来,以免忘记。

SVN ADMIN初始化页面
  • 在SVN ADMIN的WEB页面中,可以看到项目管理的相关配置,改变了以往Linux Server上通过命令行管理svn的繁琐历史,而使用WEB GUI的配置方式,可以大大提高SVN仓库的管理效率;
  • 在SVN ADMIN的WEB页面上不仅可以新建项目的SVN仓库,还可以针对不同的项目,进行账户、账户组的配置、权限的管理,非常适合中等型,或小型互联网公司进行管理;
创建库.png
提交成功

8.补充部分

8.1 查看新增目录、文件,及authz配置参数
  [root@example00 ~]# cd /data/svn/
  [root@example00 svn]# ls
  authz  project1  httpd.conf  passwd.http

/data/svn目录中,已经产生了一个目录ddstore,和一个文件httpd.conf,它与subversion.conf是一样的,在/etc/httpd/conf.d/subversion.conf中已配置。

  [root@example00 svn]# cat authz 
  [aliases]
  [groups]
  ddstore_developer=
  ddstore_manager=
  ddstore_tester=

  [ddstore:/]
  @ddstore_manager=rw

查看authz文件,可以发现,已经被添加了配置内容;这些改变,都是因为调用了svn做了相应的操作。

8.2 配置仓库的目录权限
  [root@example00 ~]# chown -R apache.apache /data/svn/project1/
  [root@example00 ~]# chmod -R 777 /data/svn/project1/
8.3 配置rc.local让tomcat开机自动启动服务
  [root@example00 ~]# vim /etc/rc.local 
  #tomcat auto start
  /usr/local/tomcat/bin/startup.sh
8.4 权限公里中“认证失败”的问题

原因:没有把admin加入项目的manager组中,因此进入权限管理中后,会出现认证失败的问题;
解决方法:设置用户组--->设置用户--->将admin添加到管理组

所有的部署过程已经完成,那么我们需要在SVN ADMIN管理页面中,查看仓库的状态,点击仓库URL链接,查看仓库的状态;若无任何错误信息,即表示仓库配置成功,若有报错,例如405信息等等,那么说明仓库的配置是有问题的,若您尝试多次解决无果,可以联系我,我有空的时候可以协助你troubleshouting。

点击仓库URL链接
查看仓库状态

到这里,CentOS下Subversion+Apache+Jsvnadmin的环境已经部署完成!下面大家可以根据自己的公司的项目需求,进行项目仓库的配置和权限分配了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容