回家之前在实验室的服务器上成功安装了ReviewBoard,为项目组今后的代码审查提供了很好的一个平台。一个多月过去了,现在终于有时间把安装过程做个记录,以备忘。
1. 背景介绍和安装目标
关于ReviewBoard的介绍,详见我的前一篇日志,这里不再赘述。我们服务器的操作系统是Ubuntu Server,已经安装了MySQL和apache,此次安装的目的是在实验室局域网内安装ReviewBoard,要求支持Git格式的代码审查。
2. 准备工作
ReviewBoard是用Django开发的,所以要首先安装Django.Django其实就是一系列的Python软件包,安装命令如下:
$ sudo apt-get install build-essential subversion python-imaging python-flup python-dev memcached libmemcache-dev
然后手动安装cmemcache(Python的memcached绑定):
由于服务器上原来的mysql没有python模块,所以要安装之:
$ sudo apt-get install python-mysqldb
此外,还要安装Git:
$ sudo apt-get install git-core
到现在,准备工作已经完成了.
3. 安装ReviewBoard
使用python-setuptools这个工具,安装ReviewBoard变得非常容易:
$ sudo apt-get install python-setuptools
$ sudo easy_install ReviewBoard
这里需要提到一个时区问题.第一次安装ReviewBoard的时候,安装过程很顺利,但是最后创建出来的站点的时区是默认的美国太平洋时间,而不是北京时间.当我尝试在站点配置页面修改时区的时候,整个站点就挂了.后来重装了几次,仍然如此.最后找到一个临时的解决办法,就是在创建站点之前,先手动修改这个文件:/usr/lib/python2.5/site-packages/ReviewBoard-0.9.dev_20090115-py2.5.egg/reviewboard/settings.py(注意该目录中的ReviewBoard_xxx.egg部分因你的ReviewBoard版本和安装时间而异),将其中的
TIME_ZONE = 'US/Pacific'
改为
TIME_ZONE = 'Asia/Shanghai'
注意,这里填Asia/Beijing会出错,因为似乎现有的时区名称列表是49年之前制订的,而北京时区则是在伟大祖国成立之后才有的.所以这里你可以填Asia/Shanghai, Asia/Chongqing, 甚至Asia/Urumqi, 但就是不能填Asia/Beijing.修改之后,你就可以继续下面的工作了.
4. 创建ReviewBoard站点
创建你的ReviewBoard站点很容易,只需要一条命令:
$ sudo rb-site install /var/www/reviews.cgcad.com
其中,最后的目录名是你要存放网站相关文件的目录,可以自行选择.该命令会弹出一系列的提示框,指导你一步一步的填写网站信息,如网站名,网站网址,使用何种数据库,数据库名,使用何种缓存机制,等等.其中,重要的一条是数据库,要确保你在运行这条命令之前已经为你的ReviewBoard站点创建了一个数据库实例,而且你所填的用户名和密码对该数据库实例有写权限.
5. 配置ReviewBoard站点
站点创建好了,接下来是相关的配置工作.首先,要保证你的web服务器对网站有关目录有写权限:
$ chown -R www-data:www-data /var/www/reviews.cgcad.com/htdocs/media/uploaded
其中,www-data分别是apache默认的用户名和用户组名,/xx/media/uploaded目录则是存放网站上传文件的目录名.
接下来,将ReviewBoard为你生成的配置文件拷贝到apache目录下:
$ sudo cp /var/www/reviews.cgcad.com/conf/apache_modpython.conf /etc/apache2/conf.d/reviews.conf
这里为了方便,把配置文件的名字改为了reviews.conf,你完全可以保留原来的配置文件名字.
一般情况下,默认的配置文件已经能使一个网站正常工作了.具体到我的情况,由于我想把ReviewBoard站点作为我们实验室一个主站点的分目录的形式(在rb-site install的时候我填的网址也是主站点的网址,而不是一个专门为ReviewBoard建立的新的网址),所以需要修改一下配置文件:
原配置文件:
view plaincopy to clipboardprint?
<VirtualHost *:80>
ServerName reviews.cgcad.com
DocumentRoot /var/www/reviews.cgcad.com/htdocs
# Error handlers
ErrorDocument 500 /errordocs/500.html
# Serve django pages
<Location "/">
PythonPath "['/var/www/reviews.cgcad.com/conf'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE reviewboard.settings
SetHandler mod_python
PythonHandler django.core.handlers.modpython
PythonAutoReload Off
PythonDebug Off
# Used to run multiple mod_python sites in the same apache
PythonInterpreter reviewboard_reviews_cgcad_com
</Location>
# Serve static media without running it through mod_python
# (overrides the above)
<Location "/media">
SetHandler None
</Location>
<Location "/errordocs">
SetHandler None
</Location>
# Alias static media requests to filesystem
Alias /media /var/www/reviews.cgcad.com/htdocs/media
Alias /errordocs /var/www/reviews.cgcad.com/htdocs/errordocs
</VirtualHost>
<VirtualHost *:80>
ServerName reviews.cgcad.com
DocumentRoot /var/www/reviews.cgcad.com/htdocs
# Error handlers
ErrorDocument 500 /errordocs/500.html
# Serve django pages
<Location "/">
PythonPath "['/var/www/reviews.cgcad.com/conf'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE reviewboard.settings
SetHandler mod_python
PythonHandler django.core.handlers.modpython
PythonAutoReload Off
PythonDebug Off
# Used to run multiple mod_python sites in the same apache
PythonInterpreter reviewboard_reviews_cgcad_com
</Location>
# Serve static media without running it through mod_python
# (overrides the above)
<Location "/media">
SetHandler None
</Location>
<Location "/errordocs">
SetHandler None
</Location>
# Alias static media requests to filesystem
Alias /media /var/www/reviews.cgcad.com/htdocs/media
Alias /errordocs /var/www/reviews.cgcad.com/htdocs/errordocs
</VirtualHost>
修改后的配置文件: