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