Fork me on GitHub
KeKe Blog

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

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

1 jsvnadmin简介

1.1 软件优点

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

1.2 部署方案

  • 方案1
    Linux+Apache+Subversion+MySQL+Tomcat+Svnadmin

  • 方案2
    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 后重启。

2 初始化系统

2.1 升级系统软件包

1
yum -y update

2.2 关闭SELinux

1
2
3
4
vim /etc/sysconfig/selinux
# 修改为
SELINUX=disabled

2.3 安装基础依赖包

1
2
3
4
yum install gcc gcc-c++ ntpdate wget -y
# 重启服务器
reboot

3 部署Apache

3.1 安装Apache

1
yum install httpd httpd-devel -y

3.2 调整配置文件

1
2
3
4
vim /etc/httpd/conf/httpd.conf
# 大概在276行
276 ServerName localhost:80

3.3 设置Apache服务

1
2
3
4
5
# 设置开机自动启动
chkconfig httpd on
# 启动httpd
servide httpd start

3.4 调整防火墙规则

1
2
3
4
5
6
vim /etc/sysconfig/iptables
# 允许80端口访问
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables restart

4 部署Subversion

4.1 安装SVN

1
2
3
4
5
# mod_dav_svn是与httpd相关的svn模块,必须安装
yum install subversion mod_dav_svn -y
# 重启apache,让模块重新加载
service httpd restart

4.2 检查Apache的svn模块

1
2
3
4
ls /etc/httpd/modules/ | grep svn
mod_authz_svn.so
mod_dav_svn.so

4.3 查看SVN版本

1
2
3
[root@localhost ~]# svn --version
svn,版本 1.6.11 (r934486)
编译于 Aug 17 2015,08:37:43

4.4 配置SVN仓库

4.4.1 创建SVN主库目录

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

1
mkdir -p /data/svn

4.4.2 编辑配置文件subversion.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost conf.d]# cd /etc/httpd/conf.d/ && ls
php.conf README subversion.conf welcome.conf
[root@localhost conf.d]# tail -12 subversion.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/

4.4.3 创建主库文件

1
2
3
4
5
6
7
8
# 登录验证及权限管理
touch /data/svn/authz
# 用户和密码管理
touch /data/svn/passwd.http
# 重启Apache,加载相关模块和文件
service httpd restart

5 部署MySQL

5.1 安装MySQL

1
2
3
4
5
6
7
8
9
10
11
12
# 直接使用yum安装服务端、客户端和依赖包
yum -y install mysql-server mysql mysql-devel
# 设置开机自动启动
chkconfig mysqld on
# 添加防火墙规则
vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
service iptables restart

5.2 设置MySQL权限

1
2
3
4
5
6
7
8
9
10
11
12
13
# 修改mysql的root密码
mysqladmin -u root password 'mypassword'
# 授权root账户远程访问mysql
mysql -u root -pmypassword
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

6 部署Tomcat

6.1 安装JDK

1
2
3
4
5
6
# 下载jdk源码包
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz -P /usr/local/src/
# 解压安装包
cd /usr/local/src/
tar zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/

6.2 配置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim /etc/profile
# Java_Home
JAVA_HOME=/usr/local/jdk1.8.0_161
JRE_HOME=/usr/local/jdk1.8.0_161/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
# 立即生效
source /etc/profile
# 检验是否生效
java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

6.3 安装Tomcat

1
2
3
4
5
6
7
# 下载Tomcat源码包
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.82/bin/apache-tomcat-7.0.82.tar.gz
# 解压安装包
tar -zxvf apache-tomcat-7.0.82.tar.gz -C /usr/local/
cd /usr/local/
mv apache-tomcat-7.0.82 svnadmin-tomcat

6.4 调整Tomcat配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 末尾增加URIEncoding参数为UTF-8
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"/>
# 添加防火墙规则
vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
service iptables restart

7 部署jsvnadmin

7.1 安装jsvnadmin

1
2
3
4
5
6
7
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/jsvnadmin/svnadmin-3.0.5.zip -P /usr/local/src
cd /usr/local/src/
unzip svnadmin-3.0.5.zip -d svnadmin
cd svnadmin

7.2 部署svnadmin项目文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
rm -rf /usr/local/svnadmin-tomcat/webapps/*
unzip svnadmin.war -d /usr/local/svnadmin-tomcat/webapps/svnadmin
# 修改相关配置文件
vim /usr/local/svn-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

7.3 初始化svnadmin数据库

7.3.1 创建svnadmin数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

7.3.2 导入sql文件

1
2
mysql -u root -p svnadmin < /usr/local/src/svnadmin/db/mysql5.sql
mysql -u root -p svnadmin < /usr/local/src/svnadmin/db/lang/en.sql

7.3.3 启动tomcat服务

1
2
3
4
5
6
7
8
cd /usr/local/tomcat/
sh 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

8 参考资料

-------------本文结束 感谢您的阅读-------------