服务器系统总体规划: 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: http://www.oracle.com/technology/software/products/berkeley-db/index.html #如果需要创建版本库为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 http://subversion.tigris.org/downloads/subversion-deps-1.6.12.tar.bz2 tar jxf subversion-1.6.12.tar.bz2 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 applicabl

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配置就变为 <Location /svn11> <Location /svn>     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 </Location> 这里设置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] http://svn_server_address/svn/myproject #说明: #[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.nethttp://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服务了。比如: http://localhost:8000/myproject 如果可以看到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.再访问 http://localhost/trac 看看是不是可以得到trac的默认首页,然后点击”browse source”,你应该可以看到svn仓库里的资源. 这里需要注意的是: SetEnv TRAC_ENV "/var/trac/myproject"     #单个项目时用这样写 SetEnv TRAC_ENV_PARENT_DIR "/var/trac"    #多个项目时这样写 还有如果多个项目使用一个密码文件可以这样配置”trac/*/login”,单个的话就”tra/login” 对于多个项目的话当在浏览器里输入 http://localhost/trac 时显示的是一个简单的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

Powered by Trac 0.10.4 By Edgewall Software. Visit the Trac open source project at  http://trac.edgewall.org/ 上述只是一个例子,个人可以根据需要修改。 管理Trac访问许可 Trac的许可权限管理简单而有效,它可通过trac-admin命令来管理。用trac-admin可管理用户的许可权限,但用户的管理是通过 Apache的htpasswd命令设置的,根据上面的Apache CGI配置,用户名和密码是存放在/etc/svn/passwd文件中。下面这个命令可用来列出当前有效的许可权限和已设置的许可权限。  trac-admin /var/trac/myproject permission list User    Action -------------------------- anonymous   BROWSER_VIEW anonymous   CHANGESET_VIEW anonymous   FILE_VIEW anonymous   LOG_VIEW anonymous   MILESTONE_VIEW anonymous   REPORT_SQL_VIEW anonymous   REPORT_VIEW anonymous   ROADMAP_VIEW anonymous   SEARCH_VIEW anonymous   TICKET_CREATE anonymous   TICKET_MODIFY anonymous   TICKET_VIEW anonymous   TIMELINE_VIEW anonymous   WIKI_CREATE anonymous   WIKI_MODIFY anonymous   WIKI_VIEW Available actions: BROWSER_VIEW, CHANGESET_VIEW, CONFIG_VIEW, FILE_VIEW, LOG_VIEW, MILESTONE_ADMIN, MILESTONE_CREATE, MILESTONE_DELETE, MILESTONE_MODIFY, MILESTONE_VIEW, REPORT_ADMIN, REPORT_CREATE, REPORT_DELETE, REPORT_MODIFY, REPORT_SQL_VIEW, REPORT_VIEW, ROADMAP_ADMIN, ROADMAP_VIEW, SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE, TICKET_MODIFY, TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE,

WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW 上面列出的内容是还没进行许可权限设置时的情况,Available actions段的内容就是有效许可权限的列表,每个权限的解析可查询TracGuide中的TracPermission节的内容。其中 TRAC_ADMIN许可相当于Linux中的root用户,拥有最高的权限。如果我们要把TRAC_ADMIN许可授予jims用户,则可这样设置:  trac-admin /var/trac/myproject permission add jims TRAC_ADMIN WIKI_ADMIN是WIKI系统的管理员,具有WIKI_CREATE,WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW权限。也就是WIKI页面的创建、删除、修改和查看四种权限,授予方式同上。 删除用户的许可可用remove关健字,如:  trac-admin /var/trac/myproject permission remove jims TRAC_ADMIN 在Trac的权限管理中可以设置组以简化权限配置,下例将设置一个admin组,具有TRAC_ADMIN许可权限,把jims和ringkee两个用户加入到该组中,使他们也具有TRAC_ADMIN许可权限:  trac-admin /var/trac/myproject permission add admin TRAC_ADMIN  trac-admin /var/trac/myproject permission add jason admin  trac-admin /var/trac/myproject permission add jims admin 在Trac的用户中,有两个默认的用户,一个是anonymous,表示匿名用户;一个是authenticated,表示所有已通过验证的用户。我们可以把许可权赋予这两个用户,从而简化我们的许可权限配置。 备份和恢复Trac Trac系统的备份和恢复也可使用trac-admin工具来完成,还可支持热备份。备份命令如下:  trac-admin /var/trac/myproject hotcopy ~/backup 执行该命令时,Trac会自动锁住SQLite数据库,并把/var/trac/myproject目录拷贝到~/backup目录。恢复备份也很简 单,只需停止Trac进程,如Apache服务器或tracd服务器。接着把~/backup整个目录恢复回/data/trac目录就可以了。 到此trac也配完了。 关于svn的备份可以参考 http://hi.baidu.com/zhangwf/blog/item/f94ca8518a5aa38a8d54305b.html

我因为是要从一台原来的svn server 更换到新的server, 所以我是把原来svn server上的svn 仓库直接进行备份动作后拷贝到新的svn server的仓库中来的 七、Nginx安装 Nginx安装较简单,其注意事项见我的另一篇文章 LNMP(Linux+Nginx+MySQL+PHP)部署详解(二)  八、Nginx配置 添加如下配置:   server   {     listen       80;     server_name  svn.opensoce.com;     index index.html index.htm index.php;     root  /var/svndata;      location ~ .*$ {   proxy_pass   http://127.0.0.1:802;   proxy_set_header Host $host;   proxy_set_header X-Real-IP $remote_addr;   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     }      access_log  /data1/logs/svn.log  alog;   } 九、Eclipse(php,java,c++,etc..)插件 Subclipse安装 Eclipse下默认安装的团队开发插件是cvs的,非svn,实现svn开发功能的插件是Subclipse。 Eclipse3.2的Subclipse目前版本Subclipse 1.6.x 在Eclipse的Install New Software添加 名称 Subclipse和地址 http://subclipse.tigris.org/update_1.6.x/, 然后将required几项全部选中然后安装即可