SVN基于MYSQL认证
Subversion是一个版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。
Centos下安装SVN,整合Apache、整合MySQL认证,最大的好处就是SVN使用http 80端口检测,相对于独立SVN来说少开了一个端口,可以减少服务器风险和维护成本。
下面以Centos6.5为例子搭建SVN基于MySQL认证的例子,除了后面用户认证是在客户端上操作,其他涉及到所有命令操作都是在Centos6.5(172.18.107.176)这台机器上完成。
一、安装相关的软件包
#yum -y install mysql mysql-devel mysql-server httpd mod_auth_mysql subversion mod_dav_svn * mod_auth_mysql 实现Apache的MySQL认证 * subversion SVN软件包 * mod_dav_svn Subversion与Apache之间的接口,通过它,Apache就可以访问版本库,并且可以让客户端也使用HTTP的扩展协议WebDAV/DeltaV进行访问。
二、启动相关的服务
#service mysqld start #service httpd start *SVN是随着httpd服务启动而启动。 #service iptables stop *关闭防火墙和selinux。免得给实验造成不必要的错误。 #setenforce 0
三、创建版本库和相关授权
#mkdir -p /data/svn/ *创建测试目录。 #svnadmin create /data/svn/test *在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。 #cat /data/svn/authz *SVN访问认证文件。这里添加一个组,这个组的成员对test项目有读写的权限。这里可以根据开发人员的需求授予项目相关的权限。 [groups] admin = eelly01,eelly02,test100 [test:/] @admin = rw
四、授予项目Apache的权限
#chown apache.apache /data/svn/ -R #chmod 755 /data/svn/ -R
五、配置认证数据库
#mysql -uroot -p *登录数据库,密码为空 1) 创建认证信息的数据库 mysql>create database svn_auth; *创建一个svn_auth数据库。 mysql>use svn_auth; *切换到这个数据库上。 mysql>grant all privileges on *.* to svn@'%'identified by ‘123456’with grant option; *授予svn这个用户访问数据库的权限。 2)创建认证信息的表 mysql> CREATE TABLE users ( -> user_name CHAR(30) NOT NULL, -> user_passwd CHAR(20) NOT NULL, -> PRIMARY KEY (user_name) *数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。 -> ); 3)创建认证测试账号,密码都是123456 mysql> insert into svn_auth.users values('test100',encrypt('123456')); mysql> insert into svn_auth.users values('eelly01',encrypt('123456')); mysql> insert into svn_auth.users values('eelly02',encrypt('123456'));
六、Apache和SVN集成(请不要连右边的注释说明也复制进去,httpd有可能会报错)
#vim /etc/httpd/conf/httpd.conf *添加如下内容 <Location /svn> DAV svn *开启DAV模块支持! SVNParentPath /data/svn/ *项目的父目录 AuthzSVNAccessFile /data/svn/authz *SVN访问认证文件 AuthName "EELLY SUBVERSION" *认证名称 AuthType Basic *基本认证 AuthMYSQLEnable on *开启Mysql认证 AuthMYSQLUser svn *数据库访问用户名 AuthMySQLPassword 123456 *数据库访问的密码 AuthMYSQLDB svn_auth *存放认证信息的数据库名称 AuthMYSQLUserTable users *存放认证信息的表名称 AuthMYSQLNameField user_name *存放认证用户名的字段名称 AuthMYSQLPasswordField user_passwd *存放认证密码的字段名称 Require valid-user *表示只有认证的用户才能登陆 </Location>
七、重启Apache服务
# service httpd restart 停止 httpd: [确定] 正在启动 httpd: [确定]
八、修改my.cnf.
#cat /etc/my.cnf(下面是部分内容) [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql skip_grant_tables *启动mysql时不启动grant-tables授权表。 *不然会报[error] [client 172.18.107.176] MySQL ERROR: Access denied for user 'svn'@'localhost' (using password: YES)。这样会导致账号无法通过验证。 # service mysqld restart 停止 mysqld: [确定] 正在启动 mysqld: [确定]
九、测试(在其他机器上用两个浏览器对其中两个账号进行测试)
1)在客户端先在火狐浏览器上用test100这个用户登录test版本库。
*test100用户是可以通过认证的。由于这个是新建的版本库,里面当然是空的了。
2)在谷歌浏览器上用eelly01这个用户登陆test版本库。
*eelly01用户也是可以通过认证的,说明上面的创建的账号是可以通过认证的。
十、创建本地代码自动更新目录。(因为开发人员在客户端提交了代码,就会自动更新到指定的目录上,免得手动更新。这样比较有效率)
#mkdir -p /data/web/test *创建svn代码更新的目录 #cp /data/svn/test/hooks/post-commit.tmpl /data/svn/test/hooks/post-commit *拷贝一个钩子模板 #vim /data/svn/test/hooks/post-commit *设置svn代码更新目录路径。 EPOS="/data/web/test" REV="$2" *新提交的版本号 SVN=/usr/bin/svn export LANG=en_US.UTF-8 *防止乱码 $SVN update /data/web/test *主要是指定代码更新到/data/web/test这个目录上。 #chmod +x /data/svn/test/hooks/post-commit *授予可执行权限,否则无法更新到指定目录。 #chown apache.apache /data/web/ -R *在服务端需要将test版本库checkout到本地目录(svn代码自动更新的目录)才可以看到相关文件。 #svn checkout http://172.18.107.176/svn/test /data/web/test/ *checkout到本地目录。
认证流程如下:
本地用户认证==》svn用户认证==》登录到相关的版本库。
下面从SVN客户端提交了一个1.txt文件来进行测试。
客户端浏览器刷新即可看到更新的文件。
SVN基于MySQL的认证就这样简单搭建完成了,SVN相关操作这里不作过多的说明。