2012年11月23日星期五

SCUTOJ 建站手记(2)

由于这一段时间一直在忙各种实验和课设,而且目测还要忙到差不多期末,然后又差不多要考试,所以总体来说项目进度比较慢,还是断断续续的。目前只能说把网站搭起来了,但是还需要继续深入进行二次开发,而前提是需要先大概过一遍源代码,某些关键的地方还要多加留意才是。
目前主要的问题是没有专业的web前端人员啊!只能是在下先大体改了一下界面,但是毕竟不是专业美工,效果肯定不咋的。。。今天刚好有时间,就收拾了一下界面,顺便把域名弄好了(上次注册到的tk域名竟然被回收了,完全不明所以啊 = =希望这次没事。。。)

=========================
由于在理想规划中是不止一个子域名的,这就需要用到基于域名的virtualhost配置了。关于apache虚拟主机的配置网上有很多,这里就简单说一下。

#环境:ubuntu 10.04 LTS 
#创建virtualhost配置文件
cd /etc/apache2/sites-available/
copy default scutoj      //copy一份默认的配置再修改,比较方便

其实要改的只有几处:

<VirtualHost *:80>        //服务器只有单IP的情况下这里不需要修改(个人理解)
ServerName www.example.com              //自定域名
DocumentRoot /var/www/                //这个有需要的话可以该,我将它指向OJ的根目录了,也就是直接访问IP的话就进入OJ的根目录index页面,以前要手工输入目录名,不然就是默认apache的index.html
其他貌似没什么改动了,还有一个ErrorDocument的参数可以添加,可以自定义出错页面,比如diy的404...


然后就是启用域名:
sudo a2ensite scutoj    //apache2 enable site的缩写,其实就是在sites-enable/里创建symbol link,指向VH的配置文件
sudo service apache2 restart

关闭网站服务: sudo a2dissite scutoj
====================

接下来的计划其实蛮激动人心的 = =!!
因为自从我在SJUT-NIC回来之后,就对web application产生了相当大的兴趣,对web架构,web服务器,数据库以及众多的web开源框架与应用之类的都有莫名的冲动~希望能自己亲手实现一下。
在目前OJ的系统当中,只提供了基本的judging和contest等等服务,原生论坛太搓,所以准备自己搭一个论坛挂在主站上面,想试试Rable(基于Livid的PB2)。最近泡V2EX比较多,觉得论坛的话还是这种比较好~更重要是的想玩玩Ruby on Rails啊!(其实《python学习手册》我都借回来了,暂时还没时间看...但是ruby对我来说更有神秘感,嘛,可以都看看,到时再决定用python或者ruby或者PHP。
另外还需要一个关于ACM的文档和心得体会分享平台,用mediawiki搭一个wiki感觉上是个不错的方式。个人也很喜欢wiki的分享方式,只是不知道实际运营起来效果怎么样。

这样算下来,二级域名下面就有三个子站了,还是蛮不错的~有得折腾~

其实这些天一直在想另外一个很现实的问题,就是:OJ该由谁来负责长期运营和维护呢?在下是真心不想交给学院,事实证明无论什么东西,到了行政机关手里都会变成一堆渣渣 = =
在下希望这是一个有活力的project,以至于product。所以一个好的管理员或者管理团队是必须的,就好象Livid一个人给整个V2EX注入了灵魂,这个社区才能通过口碑吸引不少高质量的用户。这方面感觉其实SYSU做的挺不错的,他们的官方OJ是由ACMM协会负责维护的貌似,还有一个很萌的吉祥物sicily。POJ或者HDOJ都比较正式和官方的感觉,但毕竟是老牌,所以题库和用户积累是个很重要的因素。

综上所述,SCUTOJ要走的路还很远啊。。。希望不要半途夭折就好Orz

PS:近期准备学markdown,在github page上个octopress,因为blogspot实在太蛋疼了。。。希望在下次有需要写post之前能弄好吧。。。

2012年11月4日星期日

SCUTOJ 建站手记

鉴于某学院的说法:你们不做出点样子(UI)来,我怎么好给你服务器呢??。。。 = =
好吧,既然这么蛋疼就先在VPS上面搞好了。。。(一上来就吐槽学院好像不太好的样子??

主机的话,原来想选Linode的,心想咱们也好不容易可以做一回壕啊。最后考虑到毕竟是测试阶段,服务器没必要选的那么好,所以退而求其次,选了xehost(在V2EX看到的,刚好碰上搞活动的说)。XEN主机,美国机房,ChinaCache线路,电信ping值在150-200ms之间,勉强还可以接受。价格的话略贵吧,月付80大洋。

硬件配置:
Xeon E5606 @2.13GHz 双核
512M RAM
20G 空间
500G 流量
100Mbps 带宽 (实测有接近2M/s的速度
磁盘I/O 测试了一下,40M/s, 勉强吧
系统 Ubuntu 10.04

======================================

hustoj代码托管在google code,要用SVN checkout(其实我还是更喜欢github)

svn checkout http://hustoj.googlecode.com/svn/trunk/ hustoj-read-only

进入到hustoj-read-only/install 目录中,修改一下安装脚本,把yum系的去掉,注意下数据库的用户和密码就可以运行了。其实最好就是手动安装一次,这样对整个架构就有个大体的把握了。

还有web服务器关于php脚本的设置:
       sudo vim /etc/php5/apache2/php.ini 
       open_basedir =/home/judge/data:/var/www/JudgeOnline:/tmp  
       max_execution_time = 300     ; Maximum execution time of each script, in seconds
       max_input_time = 600 
       memory_limit = 256M      ; Maximum amount of memory a script may consume (16MB)
       post_max_size = 64M
       upload_tmp_dir =/tmp
       upload_max_filesize = 64M
设置完以后重启apache。

在浏览器输入IP/目录,应该可以看到页面了。如果出现网页一片空白的情况,说明php脚本有语法错误或者web文件目录权限设置不对。这时候可以打开php.ini的display_error 选项,可以方便排除错误。debug完之后建议还是关上。默认,php报错是不记录进日志文件,这很不便于排查问题。打开php的错误日志记录也很简单。编辑php.ini
log_errors = On
error_log = /usr/local/php/log/error.log

========================================

接下来就是折腾DNS了。
偶在dot.tk上面注册了scutoj.tk的域名,其实也只是实验阶段,免费东西不知道靠谱不,到时有条件还是转.me好了(其实很想注册个像中大的那种短域名啊soj.me )。其实原来想用DNS Pod的服务(据说对google DNS和open DNS有优化,不过按照最近斯巴达的网络状况,8.8.8.8都全挂了 = =),但是懒了一下,暂时没弄。

后台添加一个A record,指向VPS的IP地址,主机名就写www。但是这样的话只是指向/var/www目录,而OJ是放在其子目录下。以前没试过子目录绑定域名,又是google上一阵狂搜,折腾啊~

最后发现是需要设置apache。这里又涉及到各种linux distribution的apahce配置文件位置不同名字不同 = =!,最后还是在ubuntu wiki上面找到官方说明,是设置apahce virtualhost。具体可以看这个链接。还有就是NameVirtualHost *:80 ,这里在 /etc/apache2/port.conf 里面已经设置过了,再在default里面设的话可能会报warn。只需要注释掉其中一个即可。

我记得以前在SJTU-NIC的时候有看过下apache的配置文件,过了几个月竟然忘得七七八八了。。。哎,这记忆力,跪了。




2012年11月3日星期六

基于OpenStack的Online Judge实现构想

应该说吧,这个构想在po主接下老师项目的时候就有点思路了。当时刚好接触openstack不久,对云计算有点概念。感觉openstack和OJ是可以结合起来的,当然具体的想法是经过了解openstack以后渐渐的明朗起来。

先交代下目前的状况。某理工作为国内排得上号的211,985传统理工学校,还没有一个像样的OJ系统。所谓的不像样,就是该OJ即使是面对两个班(大概一百多号人)同时上机实验都会随时崩溃...对于校赛这种就更不用说了,我们学校的ACM集训队从来不敢用我们自己的OJ,都是到杭电上面去搞contest...

Online Judge某种程度上也算是SaaS,为用户提供在线判题服务。用户把代码提交上去,服务器经过计算将结果返还给用户,典型的B/S架构。这样说的话,其实是单节点服务器就足以应付的小型应用(对于我们大SCUT来说还真是= =!)。但是单纯从web架构方面考虑,这里面还有很多需要改进的地方。最简单直接而且立竿见影的方案是,将LAMP架构换成LNMP架构,也就是apache + mod_php 改用 nginx + fastCGI 以提高系统并发量,加快PHP解释速度。。。至于动态网页静态化,数据缓存之类的优化方案也是可以有的,而且肯定会实现。

po主的想法是,如果由openstack在其中作为IaaS层向上提供服务,可以在物理服务器有限的前提下方便的搭建分布式判题系统,对外由nginx作为web前端节点,并为后面的判题节点集群作负载均衡。由于云计算“按需分配”的特性,可以较好的实现系统资源弹性分配,避免单服务器节点在高负载下成为系统瓶颈,同时也增强了可扩展性。虽然我们的初始需求仅仅是满足教学日常用途,但是在一开始就设立架构上的大方向,考虑到以后的可扩展性的话,目光放远点还是很有必要的。

同时po主准备基于hustOJ的系统进行二次开发,添加一些个性化的模块,比如mediawiki用作管理OJ的技术记录与使用说明。看了该项目的源代码一段时间,觉得原作者真是牛逼闪闪啊。框架暂时没发现什么问题,后期管理员的优化也很不错,这不得不说是开源的一大好处。貌似我越来越喜欢open source了~(才不是什么拿来主义呢