svn nginx

服务器系统总体规划:1、Apache 负责SVN 具体事务,端口802,SVN 相关业务由域名 svn.opensoce.com 承担,来自svn.opensoce.com 的请求全部转发至802端口

服务器系统总体规划:

1、Apache 负责SVN 具体事务,端口802,SVN 相关业务由域名 svn.opensoce.com 承担,来自svn.opensoce.com 的请求全部转发至802端口交由802端口给Apache 处理

2、Nginx 做主体Web 服务,对外开放80端口,负责普通网站业务和svn 业务转发

安装部署过程:

一、支持包安装及相关用户、用户组创建

tar zxf libiconv-1.13.tar.gz

cd libiconv-1.13

./configure --prefix=/usr/local

make

mak install

tar zxf zlib-1.2.3.tar.gz

cd zlib-1.2.3

./configure

make

make install

#最好不要让root 用户参与到svn 的权限管理和日常的运行和维护工作中来, 所以我们建立一个用户(如svn)

同时为了处理好权限的问题,我们可以建立一个组(如www ),其他希望使用svn 的用户加入这个组

在root 权限下用下面的命令创建用户和组:

groupadd www

useradd svn -g www

useradd www -g www

二、Apache 安装

Apache 官网: http://httpd.apache.org/

wget http://labs.renren.com/apache-mirror/httpd/httpd-2.2.16.tar.bz2 tar jxf httpd-2.2.16.tar.bz2

cd httpd-2.2.16.tar.bz2

./configure --enable-dav --enable-so --enable-ssl

--prefix=/usr/local/webserver/apache2 --enable-mods-shared=all make

make install

,

删除httpd 的调试符号

cp httpd httpd.old

strip httpd

删除调试符号

strip --strip-debug /tools/lib/*

strip --strip-unneeded /tools/{,s}bin/* #这个参数千万不可应用于库文件 rm -rf /tools/{info,man}

添加为服务

cp /usr/local/webserver/apache2/bin/apachectl /etc/init.d/apache2 chkconfig --add apache2

chkconfig --list apache2 apache #服务默认在运行级3,5启动

三、Apache 配置

vi /usr/local/webserver/apache2/conf/httpd.conf

#修改用户组

User svn

Group www

#修改端口为

Listen 802

四、Subversion 安装

BDB:

Subversion: http://subversion.apache.org/source-code.html 目前版本

1.6.12

wget http://subversion.tigris.org/downloads/subversion-1.6.12.tar.bz2 wget

tar jxf subversion-deps-1.6.12.tar.bz2

cd subversion-1.6.12

./configure --with-apxs=/usr/local/webserver/apache2/bin/apxs --prefix=/usr/local/webserver/subversion

--with-apr=/usr/local/webserver/apache2

--with-apr-util=/usr/local/webserver/apache2 --with-ssl

--with-zlib=/usr/local/lib --without-berkeley-db

,

PYTHON=/usr/bin/python --with-swig=/usr/bin/swig --enable-shared --enable-static --enable-swig-binding=python

#python和swig 可能需提前安装

在以上编译过程中可能会出现 configure: error: Subversion requires SQLite 解决方法:可以下载最新的Sqlite 版本sqlite-amalgamation-3.7.0.tar.gz wget http://www.sqlite.org/sqlite-amalgamation-3.7.0.tar.gz

tar zxvf sqlite-amalgamation-3.7.0.tar.gz

cd sqllit-3.7.0

cp sqlite3.c ../subversion-1.6.12/sqlite-amalgamation/sqlite3.c 经过上面的步骤mod_dav_svn.so and mod_authz_svn.so将会被copy 到/usr/local/webserver/apache2/modules/下;

同时在 /usr/local/webserver/apache2/conf/httpd.conf中会增加如下2行: LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

检查一下是否都正确,如果没有的话可能就要手动加进去。

注意一下运行. /configure时加的这几个参数PYTHON=/usr/bin/python –with-swig=/usr/bin/swig –enable-shared –enable-static

–enable-swig-binding=python,开始的时候编译svn 的时候没有加这几个参数,单独使用svn 都没问题,但是如果安装trac 的话就会出错,一般出现类似下面的错误:

--------------------------------------------------------------------- Python Traceback

Traceback (most recent call last):

File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 387, in dispatch_request

dispatcher.dispatch(req)

File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 191, in dispatch

chosen_handler = self._pre_process_request(req, chosen_handler) File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 263, in _pre_process_request

chosen_handler = f.pre_process_request(req, chosen_handler) File

"/usr/local/lib/python2.5/site-packages/trac/versioncontrol/api.py", line 73, in pre_process_request

self.get_repository(req.authname) # triggers a sync if applicable

,

File

"/usr/local/lib/python2.5/site-packages/trac/versioncontrol/api.py", line 92, in get_repository

self.repository_type)TracError: Unsupported version control system "svn"

--------------------------------------------------------------------- 解决方法就是在make svn的时候要加上这几个参数”PYTHON=/usr/bin/python –with-swig=/usr/bin/swig –enable-shared –enable-static

–enable-swig-binding=python”

同时执行了上面的make && make install后还要编译安装Subversion SWIG Python bindings

Swig-py 的安装说明在

subversion-1.6.12/subversion/bindings/swig/INSTALL文件里说的比较详细,安装过程如下:

cd subversion-1.6.12

make swig-py

make install-swig-py

那么你可以看到swig-py 的install 目录是

/usr/local/webserver/subversion/lib/svn-python。用如下命令讲这个扩展包扩展到python :

echo

/usr/local/webserver/subversion/lib/svn-python >/usr/lib/python2.3/site-packages/subversion.pth

剩下的就是测试svn 的swig-py 包是不是能work 了,很简单。

python

>>>import svn.repos

如果不报错,就完事大吉了。

如果报错,那么检查几件事情:

I. subversion的configure 是不是enable 了shared 和static ,是不是带–with-swig ;

II. libsvn_swig_py-x.so是否存在于/usr/local/subversion/lib目录; III. /usr/local/subversion/lib是否已经增加到ld.so.conf 文件

(/etc/ld.so.conf)

,

IV. 请使用ldconfig -v |grep swig来检查是否有swig 的下列动态库 libsvn_swig_py-1.so.0 -> libsvn_swig_py-1.so.0.0.0

如果一切正常,这个安装就完成了。

安装完成后, 运行svnserver –version 确认版本为1.6.12。

SVN 服务器安装结束.

五、Subversion 配置

切换到用户svn 来创建svn 仓库,对svn 进行配置

首选选择一个目录位置作为svn 仓库的存放位置,例如某项目以

/var/svndata/myproject 作为存放位置。

创建项目版本库”myproject”,默认指定仓库的文件格式为fsfs : /usr/local/webserver/subversion/bin/svnadmin create

/var/svndata/myproject

修改目录权限

chown -R svn:www /data0/htdocs/svn

chmod -R g w /var/svndata/myproject

chmod g s /var/svndata/myproject/db

接下来修改Apache 配置文件

vi /usr/local/webserver/apache2/conf/httpd.conf # 在文件末尾添加如下内容

# Location中的/svn只是个虚目录,用于区别普通的网站访问,

# 例如url 为 http://127.0.0.1/svn/myproject,则/svn的部分就会由下述配置去解析。

# 如果你想在url 中使用/svn11去解析,那么下面的Location 配置就变为

Dav svn

SVNListParentPath on

#----允许在网页上显示svn 父目录list --记住,注释不要和配置项写到同一行,否则会出错..

SVNParentPath "/var/svndata"

#----/var/svndata 是SVN 的父目录

AuthType Basic

#----连接类型设置

,

AuthName "Subversion Repository"

#----连接框提示

AuthUserFile /etc/svn/passwd

#----用户配置文件

AuthzSVNAccessFile /etc/svn/authz

#----svn用户配置文件

Require valid-user

这里设置SVNParentPath 而不是SVNPath 的好处是可以几个repository 同时访问

其中 /etc/svn/passwd 文件是通过htpasswd 命令来创建的,第一次设置用户时使用-c 表示新建一个用户文件 /etc/svn/authz文件内容如

[groups]

Admin = www

#admin组成员, 前面我们创建了www 组,并在该组下创建了用户svn

[myproject:/]

#版本库myproject 的权限,注意写的形式

@Admin = rw

#admin组有读写的权限

svn = rw

#svn有读写的权限

[www:/]

#版本库www 的权限

@Admin = rw

svnman = rw

[/]

#如果允许任意用户浏览svnroot 的内容,则设置下面这句

*=r

#svn父目录所有人都与读的权限

修改访问控制文件

/usr/local/webserver/apache2/bin/htpasswd -c /etc/svn/passwd svn

#这个文件名即为httpd.conf 中配置的文件名, 最后的svn 即为要添加的用户名 New password: xxxxxx

Re-type new password: xxxxxx

Adding password for user svn

#完成后执行 chmod a r /etc/svn/passwd, 以保障apache 能够读取该文件 #以后需添加用户时执行

/usr/local/webserver/apache2/bin/htpasswd -c /etc/svn/passwd newuser #反复执行此程序,将自己需要添加的用户(替换命令最后的用户名) 添加进去!

,

重启apache

/usr/local/webserver/apache2/bin/apachectl restart

打开浏览器访问 http://svn_server_address/svn , 如果有东西显示就说明成功。

接下来可以import 代码文件了,可以在其他机子上完成:

svn import -m "Hello, my project" [path]

#说明:

#[path] 是导入的路径,不写就是当前路径

#path目录下, 需要建立三个目录: trunk, tags, branches (类似CVS) 这不是必须的,但是这对今后的项目管理很有好处

#把最初的代码放在trunk 目录下!

#import之后用command "svn co http://svn_server_address/svn/myproject"就该可以check out刚才import 的代码了

六、安装配置Trac

安装配置Trac

Trac

是一个非常优秀的源代码浏览工具,现在也很流行。在安装前,需要注意的是,Trac 需要以下几个软件的支持,安装前一定要先安装好。

要预先安装的软件包在trac-0.10.4的INSTALL 文件里有列出,copy 如下: * Python, version >= 2.3.

Please keep in mind, that for RPM-based systems you will also need python-devel and python-xml packages.

* Subversion, version >= 1.0. (>= 1.1.x recommended)

* Subversion SWIG Python bindings (not PySVN).

* PySQLite, version 1.x (for SQLite 2.x) or version 2.x (for SQLite 3.x) * Clearsilver, version >= 0.9.3 (0.9.14 recommended)

* A web server capable of executing CGI/FastCGI scripts, or Apache HTTPD with

mod_python. (Trac also comes with a standalone server, but its use is not

recommended for use in a production environment.)

以上各包,一个也不能少,除非你不用apache 来做web (而使用tracd ,这是trac 本身都不建议使用的httpd ),当然我们用CGI 方式来运行python 脚本,所以省掉一个mod_python.

,

补充说明下,光有PySQLite 而没有SQLite 显然是不行的

这几个软件包可以在 http://www.rpmfind.net 和 http://www.rpmfind.com 上找到适合自己系统的版本,下载后直接安装即可。当然你也可以通过下载源码编译安装这些包。

然后开始安装trac :

tar zxvf trac-0.10.4.tar.gz

cd trac-0.10.4

python ./setup.py install

关于trac 本身的安装就这么简单,详情请参考trac-0.10.4/INSTALL文档。其中还有后续章节所涉及内容的详述,包括如何使用 trac-admin初始化一个trac 项目,如何启动tracd 服务,以及如何配置使用apache 来提供trac 的web 服务。 trac 安装的缺省路径是/usr,trac-admin 和tracd 都在/usr/bin目录,trac 的模版等都在/usr/share/trac目录。

使用trac-admin 命令可以初始化一个trac 项目,一个trac 项目对应一个SVN repository ,这是应用中应该注意的。

#trac-admin /var/trac/myproject initenv

这个命令即可启动初始化/var/trac/myproject项目的交互进程,是建立trac 项目,运行后提示如下:

Project Name [My Project]> 输入项目名称

Database connection string [sqlite:db/trac.db]> 因为前面使用的是sqlite 所以直接回车即可

Repository type [svn]>仓库类型svn 回车

Path to repository [/path/to/repos]>仓库路径 输入刚才的

/home/svn/myproject

Templates directory [/usr/share/trac/templates]> 模板路径,还是回车

初始化完成后,可以通过修改/var/trac/myproject/conf/trac.ini来改变设置,甚至可以改变svn repository的设置,你需要做的只是在改完后使用

trac-admin /var/trac/myproject resync来重新同步trac 项目和svn repository 。

更细节的配置内容请参考trac 相关文档。

顺便修改一下权限

chown -R svn:www /var/svndata

trac 有两种方式提供web 服务,其一是trac 自带的tracd ,它本身就是一个httpd ,启动方式如下:

,

tracd --port 8000 /var/trac/myproject

或者你有两个项目,则在后面加一个目录:

tracd --port 8000 /var/trac/myproject1 /var/trac/myproject2

这种方式很简单,但问题是trac 本身都不建议你用,因为tracd 不够完善. 但不管怎么样,你可以试用一下tracd ,看看你的安装配置是不是都可以work 了,毕竟加上apache ,是件相对复杂很多的事情,所以,在这之前用tracd 来检验一下还是必要的。

启动服务后,你就可以在一台客户机上使用浏览器来来浏览你开启的web 服务了。比如:

如果可以看到trac 的默认首页,就说明是OK 的,然后就开始将trac 集成到apache.

把trac 集成的到apache 有很多方法, 可以使用mod_python模块, 可以使用cgi 模块或者fast-cgi 模块

我这里使用了cgi 模式,这个方法比较简单。如果你需要速度快一点, 那使用fast-cgi 好了.

首先把trac 源代码目录中cgi-bin 目下的两个文件拷贝到你存放cgi 的地方, 比如/usr/local/webserver/apache2/cgi-bin目录下。

然后修改apache 的配置文件httpd.conf

vi /usr/local/webserver/apache2/conf/httpd.conf

然后添加以下内容:

#

### Trac settings

#

Alias /trac/chrome/common "/usr/share/trac/htdocs"

Options Indexes MultiViews

AllowOverride None

Order allow,deny

Allow from all

ScriptAlias /trac /usr/local/webserver/apache2/cgi-bin/trac.cgi SetEnv TRAC_ENV_PARENT_DIR "/var/trac"

,

AuthType Basic

AuthName "Trac Login"

AuthUserFile /etc/svn/passwd

Require valid-user

密码文件svntrac.htpasswd 我们和svn 共享, 这样就只需要管理一套密码了. 保存, 退出, 重启apache. 再访问

看看是不是可以得到trac 的默认首页, 然后点击”browse source”,你应该可以看到svn 仓库里的资源.

这里需要注意的是:

SetEnv TRAC_ENV "/var/trac/myproject" #单个项目时用这样写 SetEnv TRAC_ENV_PARENT_DIR "/var/trac" #多个项目时这样写

还有如果多个项目使用一个密码文件可以这样配置”trac/*/login”,单个的话就”tra/login”

对于多个项目的话当在浏览器里输入

时显示的是一个简单的Available Projects页面,如果希望修改这个页面,请编辑/usr/share/trac/templates/index.cs, 下面是我根据我们项目需要而更改的index.cs 文件

Available Projects Of XXX Team

Wiki Navigation

XXX Team's Projects

2.1.21 --- For ss project, release 2.1.21 ---- My example project

2.1.27 ---- My example project

2.2.0 code ---- My example project

Sol ---- Sol project

Real Case ---- Real project

XXX Team's Member

xxx

xxx

标签: