Linux(CentOS6.3 x64) 安装配置Apache2.4.3 + SVN1.7 + MySQL完整版

时间:2022-03-01 09:17:12

 首先下载将要用的软件

    apr, apr-util: http://apr.apache.org/

    pcre: http://www.pcre.org/

    zlib: http://www.zlib.net/

    sqlite: http://www.sqlite.org/

   编译安装上述软件, 然后继续

 

2. 开始安装Apache

  检查系统是否已安装了Apache, 有的话先卸载: yum remove httpd

  前往Apache官方网站下载: http://httpd.apache.org/

  解压:tar -xvf httpd-x.x.x.tar

  进入httpd-x.x.x,  执行 

./configure --prefix=指定Apache将要被安装到的目录 

--with-apr=apr安装目录

--with-apr-util=apr-util安装目录

--with-zlib=zlib安装目录

--with-pcre=pcre安装目录

  如果执行上述命令提示还缺少依赖软件则自己再下载加上,我在Red Hat 5.5, Ubuntu12, CentOS 6.3上测试是没问题了。 

    编译: 

make



   安装: 

make install


  如果没有错误发生。至此,Apache就算安装完成了,假设您已经安装到了Apache_Home目录。

  测试一下Apache是否安装成功,

  进入Apache_Home/bin, 

  启动Apache服务器:

sudo apachectl restart

 

  浏览器访问: http://localhost,  如果能打开则Apache安装成功。

 

3. 安装Subversion

  前往Subversion官网下载: http://subversion.apache.org/download/

  解压:tar -xvf subversion-x.x.x.tar

  进入suversion-x.x.x, 执行 

./configure --prefix=指定Subversion将要被安装到的目录 

--with-apr=apr安装目录

--with-apr-util=apr-util安装目录

--with-zlib=zlib安装目录

--with-sqlite=sqlite安装目录

--with-apxs=Apache_Home/bin/apxs


   注意这句是SVN与Apache整合的关键: --with-apxs=Apache_Home/bin/apxsapache ,  不加上不会安装SVN的modules到Apache

   编译: 

make


   安装: 

make install


   如果没有错误发生, 那么Subversion就算安装完成了, 假设您的Subversion安装在Svn_Home目录

   可以测试一下SVN:

           进入Svn_Home/bin, 执行svn, svnadmin命令试试,没问题就可以跳过了。

                      我的64位Linux操作系统出现: /usr/lib64/libz.so.1: no version information available (required by ....) 错误, 原因是zlib1.2.3的版本有问题, 需要升级即可。

                      解决办法: su使用root帐号, 执行删除命令:rm /lib64/libz.so.1  /lib64/libz.so.1.2.3, 

                                                                      复制文件: cp /ZLib_Home/lib/libz.so.1 /lib64/libz.so.1

                                                                      复制文件: cp /Zlib_Home/lib/libz.so.1.x.x /lib64/libz.so.1.x.x

           

 

4. 配置Apache加载SVN

   执行: vi apache安装目录/conf/httpd.conf

    将        
 #LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so

    修改为:

        

 LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_module modules/mod_dav.so

    完了再看看apache svn的相关模块有没有加载!如下!(没有则手动加上)     
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

 

 

5. 新建版本仓库, 并由Apache管理

    创建版本仓库

   
     svnadmin create /Program/Server/subversion/repos/javaee        --用于存储JavaEE项目的仓库
svnadmin create /Program/Server/subversion/repos/javase --用于存储JavaSE项目的仓库
svnadmin create /Program/Server/subversion/repos/android --用于存储Android项目的仓库

    执行上述三条命令,创建了三个svn仓库,目录可以改为你本机的目录。  注意三个仓库父文件夹要相同。

 

   执行命令:  vi apache安装目录/conf/httpd.conf

   在文件末尾加上   
  <Location/svn>        #意味着可以通过像这样的URL(http://MyServer/svn)来访问Subversion版本库           
DAV svn # 告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块 SVNListParentPath on
SVNParentPath /Program/Server/subversion/repos #告诉Subversion在目录/Program/Server/subversion/repos 下寻找版本库;只有一个版本仓库就用SVNPath, 直接指向仓库具体目录。
AuthType Basic #启用基本的验证,使用用户名/密码验证
AuthName "please input username/password" # 弹出用户验证对话框时的提示信息
AuthUserFile /Program/Server/subversion/repos/passwd #passwd问密码和用户文件,用来验证用户的用户名及密码
AuthzSVNAccessFile /Program/Server/subversion/repos/access #权限控制文件,限定各个用户或组在版本库中目录的访问权限
Require valid-user #限定用户只有输入正确的用户名及密码后才能访问这个路径
</Location>

 
  6. 用户权限管理    创建passwd文件     AuthUserFile 指向的是passwd的策略文件, 系统用户账户密码保存该文件里    前往apache httpd安装目录    bin\htpasswd -c passwd<username>       
    比 如: bin\htpasswd
-c /Program/Server/subversion/repos/passwd admin
    命令分析:
    c:\svn\passwd 表示会在/Program/Server/subversion/repos/passwd 目录下创建一个passwd文件
    admin 表示用户名
    要添加更多用户可以htpasswd /Program/Server/subversion/repos/passwd <username>    创建access文件  AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定。
[groups]
committers = paulex, richard
developers = jimmy, michel, spark, sean

[/]
* = r
@committers = rw

[javaee:/]
@developers = rw

[javase:/]
tony = rw
[android:/]
* =
@committers= r
使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中 tony 将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法: 
[groups]
  project1_committers = paulex, richard
project2_committers = jimmy, michel, spark, tony, Robert

  [repos1:/]
  * = r
  @ project1_committer = rw

  [repos2:/]
  * = r
  @ project2_committer = rw

这样项目1的 project1_committer 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2 ,同样项目2的 project2_commiter 组也不能修改 repos1 版本库的文件。

7.  用MySQL认证Subversion
一般情况下,subversion的用户密码文件是以文本文件形式存放在文件系统中的。出于安全性的需要或者单点登陆等可扩展性的考虑,文本文件的管理方式都不能满足需求了。通过 Apache 的 module_auth_mysql 模块,我们可以用 MySQL 来保存用户信息。该模块的主页在 http://modauthmysql.sourceforge.net/,你也可以在 http://modules.apache.org/ 找到它的发行版本。安装方法同其它 Apache 的模块一样,拷贝至 modules 目录并在 httpd.conf 文件中添加如下语句: 
LoadModule mysql_auth_module modules/mod_auth_mysql.so
相应的 Location 区域改写为:  
<Location /repos/>
 AuthName "MySQL Testing"
 AuthType Basic
 AuthMySQLHost db.kysf.net
 AuthMySQLUser svnadmin
 AuthMySQLPassword PaSsWoRd    #必填项
 AuthMySQLDB svn
 AuthMySQLUserTable users
 AuthMySQLNameField user_name
 AuthMySQLPasswordField user_password
 AuthMySQLGroupField user_group
 AuthMySQLPwEncryption none    #必填项
 require valid-user
</Location>
其中,
AuthMySQLHost db.kysf.netAuthMySQLUser svnadminAuthMySQLDB svnAuthMySQLUserTable usersAuthMySQLNameField user_nameAuthMySQLPasswordField user_passwordAuthMySQLGroupField user_group

这7项可以省略。如果省略系统采用默认的值,其默认值如下:

默认值:

 AuthMySQLHost localhost

  AuthMySQLUser ODBC

  AuthMySQLDB test

  AuthMySQLUserTable user_info

  AuthMySQLNameField user_name

  AuthMySQLPasswordField user_password

  AuthMySQLGroupField user_group
然后在 mysql 中添加名为 svn 的数据库,并建立 users 数据表: 
 create database svn;  use svn;  CREATE TABLE users (  user_name CHAR(30) NOT NULL,  user_password CHAR(20) NOT NULL,  user_group CHAR(10),  PRIMARY KEY (user_name)  );

在 users 表中插入用户信息 
insert into users values('username','password','group');
重新启动 Apache,在访问版本库的时候 Apache 就会用 mysql 数据表中的用户信息来验证了。

8. 集成用户文件(UserFile)认证和MySQL数据库认证

更改Location 区域:

<Location /repos/>
 DAV svn
 SVNListParentPath on
 #SVNPath e:/svn/repos1
 SVNParentPath e:/svn

 AuthzSVNAccessFile E:/usr/Apache2.2/bin/accesspolicy.conf

 Satisfy Any
 Require valid-user

 AuthType Basic
 AuthName "MySQL Auth"


 AuthMySQLEnable on
 AuthMySQLPwEncryption md5
 AuthMySQLAuthoritative off
 AuthMySQLHost localhost
 AuthMySQLUser svnslt
 AuthMySQLPassword list
 AuthMySQLDB svn_auth
 AuthMySQLUserTable users
 AuthMySQLNameField user_name
 AuthMySQLPasswordField user_passwd
 AuthMySQLGroupTable groups
 AuthMySQLGroupField user_group

 AuthUserFile E:/usr/Apache2.2/bin/passwd.conf
</Location>

说明:

既可以用数据库中的用户名认证,也可以用文件中的用户名认证。如果数据库认证失败,就由用户文件认证。不过最好把用户文件和数据库中的用户名设为一致,防止单点失败。