N SPACE

Thinking,Technology&Life Recording...
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Ubuntu 8.10 Server Apache + SVN + SSL配置

Posted on 2008-11-16 16:37  Huntercat  阅读(2986)  评论(1编辑  收藏  举报

由于部门项目开发的需要,要求搭建一个SVN版本控制平台。上网搜了好多相关资料,在虚拟机上也做了好多的测试,有成功也有失败。然后我采用逐个击破的方法,柔和ApacheSSL,在Ubuntu8.10Serve服务器上搭建了一个Apache+SVN+SSL模式的版本控制系统。希望本文对您的实际需求有所帮助。

Ubuntu8.10Server系统如果您选择安装了Apache2,这里你就可以不用安装了,如果没有安装,也不要紧,按着下面的步骤来,相信您一定会配置成功。此方法对于Ubuntu8.10桌面系统同样适用。

一、安装准备(安装模块):

#sudo apt-get install apache2

#sudo apt-get install apache2-common

#sudo apt-get install apache2-mpm-prefork

#sudo apt-get install apache2-utils

#sudo apt-get install libapache2-svn

#sudo apt-get install libapache2-mod-auth-pam(可选,用于PAM

#sudo apt-get install libapache2-mod-auth-sys-group(可选,用于PAM

#sudo apt-get install subversion

#sudo apt-get install subversion-tools

二、SVN配置

这里可参考:http://wiki.ubuntu.org.cn/index.php?title=SubVersion

创建 SVN 仓库

许多位置都可以放置 Subversion 文件仓库,其中两个最常用的是:/usr/local/svn 以及 /home/svn。我的 Subversion 文件仓库放在 /usr/local/svn,并且我的项目名称是简单的“myproject”

同样的,也有许多常用的方式设置文件仓库的访问权限。然而,这也是安装过程中最经常出现错误的地方,因此我们会对此进行一个详细说明。典型的情况下,您应该创建一个名为“Subversion”的组来拥有文件仓库所在的目录。下面是一个快速的操作说明,有关内容请参考相关文档的详细说明:

*       Ubuntu 菜单上选择系统->系统管理->用户和组

*       切换到标签;

*       点击添加组按钮;

*       组名为“subversion”

*       将您自己和“www-data”(Apache 用户)加入组成员中;

*       点击“OK”以确认修改,关闭该程序。

或者直接使用命令"sudo vi /etc/group",增加组和成员:

 

# sudo vi /etc/group

结果看上去,像这样。

# cat /etc/group|grep subversion

subversion:x:1001:www-data,svnx

您需要注销然后再登录以便您能够成为 subversion 组的一员,然后就可以执行签入文件(Check in,也称提交文件)的操作了。

现在执行下面的命令

# sudo mkdir /usr/local/svn

# cd /usr/local/svn

#/usr/local/svn# sudo mkdir myproject

#/usr/local/svn# sudo chown -R root:subversion myproject

#/usr/local/svn# sudo chmod -R g+rws myproject

最后的一条命令赋予组成员对所有新加入文件仓库的文件拥有相应的权限。

下面的命令用于创建 SVN 文件仓库:

 

#/usr/local/svn# sudo svnadmin create /usr/local/svn/myproject

三、Apache配置

先备份一下Apache2的配置文件

#/usr/local/svn# sudo ap -R /etc/apache2 /etc/apache2_backup

通过 WebDAV 协议访问 SVN 文件仓库,您必须配置您的 Apache 2 Web 服务器。您必须加入下面的代码片段到您的 /etc/apache2/mods-available/dav_svn.conf中:(加在文件最后面即可)

<Location /svn/myproject>
DAV svn
SVNPath /home/svn/myproject
AuthType Basic
AuthName "myproject subversion repository"
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>

如果需要用户每次登录时都进行用户密码验证,请将<LimitExcept GET PROPFIND OPTIONS REPORT></LimitExcept>两行注释掉。

当您添加了上面的内容,您必须重新起动 Apache 2 Web 服务器,请输入下面的命令:

sudo /etc/init.d/apache2 restart

接下来,您需要创建 /etc/subversion/passwd 文件,该文件包含了用户授权的详细信息。要添加用户,您可以执行下面的命令:

sudo htpasswd -c /etc/subversion/passwd user_name

它会提示您输入密码,当您输入了密码,该用户就建立了。您可以通过下面的命令来访问文件仓库:

# svn co http://hostname/svn/myproject myproject --username user_name

它会提示您输入密码。您必须输入您使用 htpasswd 设置的密码。当通过验证,项目的文件就被签出了。

这样,就可以通过Web方式访问版本库了,不过这样的密码传输是纯文本方式的,基于安全方面的考虑,我建议你使用SSL

四、SSL配置

这里可以参考:http://www.cnblogs.com/passos/archive/2006/02/18/332992.html

 

关于SSL的配置很多,这里我根据实际情况,做了一个简单实用的SSL加密机制。方法如下:

Apache2
Ubuntu系统内的基本情况如下
默认站点在 /var/www/
配置文件在 /etc/apache2/
日志在 /var/log/apache/
启动脚本是 /usr/sin/apache2ctl 或者 /etc/init.d/apache2
Apache2
已经在前面安装好了下面安装SSL模块:
安装SSL模块

#a2enmod ssl

创建默认的SSL证书(默认证书不是很好用)

#apache2-ssl-certificate

 

我们可以使用openssl来创建,这里我就是此方法创建SSL证书的

 

#sudo openssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 999 

注:在要求输入Common Name (eg, YOUR name) 时,输入你的主机名。

示例过程如下:

#/usr/local/svn# sudo openssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 365
Generating a 1024 bit RSA private key
.....................++++++
..++++++
writing new private key to 'apache.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:China
string is too long, it needs to be less than  2 bytes long
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Jiangxi
Locality Name (eg, city) []:Nanchang
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nanchang Unversity
Organizational Unit Name (eg, section) []:Information Center
Common Name (eg, YOUR name) []:LinuxServer
Email Address []:111@gmail.com


复制一份站点配置做为SSL配置的原型

#cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
#ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl

 

编辑SSL的配置
#vi /etc/apache2/sites-enabled/ssl
把端口改为443
加入SSL认证配置
其它的根据需要自己定制 与普通配置无异

 

<VirtualHost *:443>
        ServerSignature On
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem
 
        ServerAdmin webmaster@localhost
 
        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
 
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
"/etc/apache2/sites-enabled/ssl" 45L, 1055C

 

修改普通http方式的配置(apache2这里好像不用改,默认的已经是80端口)

#vi /etc/apache2/sites-enabled/000-default


把端口改为80

 

NameVirtualHost *:80
<VirtualHost *:
80>
    ServerAdmin webmaster@localhost
#[......]

 

编辑Apache端口配置,加入443端口(SSL的)

 

#vi /etc/apache2/ports.conf:
Listen 80
Listen 443

 

源文件内容:

 

NameVirtualHost *:80
Listen 80
#Listen 443
<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
</IfModule>


这里可以不用加“Listen 443因为SSL默认认证的443端口已经打开。

别忘了把前面生成的SSL密钥文件拷贝过来

#/usr/local/svn# sudo cp /proc/14646/cwd/apache.pem


重新载入Apache的配置
#/etc/init.d/apache2 force-reload
或者

#/etc/init.d/apache2 restart


以下是SSL的配置文件的示例

NameVirtualHost *:443
<VirtualHost *:443>
        ServerSignature On
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem

        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/
        
<Directory />
                Options FollowSymLinks
                AllowOverride None
        
</Directory>
        
<Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                # This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
                # Commented out for Ubuntu
                #RedirectMatch ^/# /apache2-default/
        
</Directory>

 

五、总结

以上是我个人查阅相关资料及实践测试的基础上总结出来的Ubuntu8.10Server上搭建

Apache+SVN+SSL模式版本控制系统的经验,安装和配置过程中注意细心仔细,重要的配置文件注意先备份再修改,以备配置失败还原之用。

 

参考资料:http://wiki.ubuntu.org.cn/index.php?title=SubVersion

http://www.cnblogs.com/passos/archive/2006/02/18/332992.html

http://fanqiang.chinaunix.net/app/web/2005-05-18/3257.shtml

http://www.lupaworld.com/action_viewstutorial_itemid_4671.html

http://www.svn8.com/

http://www.svn.org/

http://svnbook.red-bean.com/