demo:http://115.28.170.176:9000/problem_list 账号密码是 zhuzekun a12345678
oj2.0是由一群大神学长发起的、几个弱菜学长实现的Online Judge系统。(请允许我做一个悲伤的表情) oj2.0基于linux系统(测试环境ubuntu12.04-server-64),目前与老OJ对比还差很多功能,例如user搜索、比赛模块、about us等。已经工作的学长们精力有限,所以诚邀各位来继续搞一搞我们的oj2.0,整体架构已经搭建起来了,往里面填就可以了。
oj2.0虽然很渣,不过对于本科阶段的大家应该算是一个不错的试验品,如果整个OJ搞懂的话,你会学到linux基础、nginx服务器搭建和使用、django web开发、js、html、python、数据库应用、rabbitMQ+celery消息异步传递架构,足够拿一个好offer了。(简历上可以这么写,具有linux系统下开发经验、熟练使用python、shell等脚本语言、了解nginx服务器的使用、有django框架下的web开发经验balabala……秒杀90%的acmer没问题)。当然,上面都是尚未解锁的成就,如何解锁上述成就:
- 看看linux入门书籍,比如鸟哥私房菜,学会mkdir、chmod、cd、ll、vim等一些基础命令、了解linux文件系统、权限系统,会在命令行下使用linux系统就可以了。
- django框架,网上有中文教程和视频教程,如果没有MVC经验的话,入门需要一段时间,请坚持。
- python学习,相信大家已经有了一两年的c++使用时间,学语言的速度应该很快,python学习应该不成问题。
- 前端学习,w3c+bootstrap,你们懂得。
- 数据库,计算机、软件专业必修课。
- rabbitMQ+celery,考察你们英语的时刻到了,官方文档都是英文的,如果英语很好,官方文档你会读得得心应手。否则,有道翻译吧,或者看csdn cugb1004101218,最好还是去官网看。
- git入门学习。
- 这些都可以谷歌百度得到。上述的列表不一定要学完之后再去搞OJ2.0,各个模块可以单独学习,例如你学完python后,可以搞一搞判题内核;学过前端,就直接可以搞一搞我们OJ的web界面了。不要在意这些细节,这块试验田随便搞的(反正也没人用,呵~呵 -_-!)。
+--------+ +--------+ +---------------+ +--------+ +--------+
| nginx |<------->| django |<------->|rabbitMQ+celery|<------->| core |<------->| data |
+--------+ +--------+ +---------------+ +--------+ +--------+
↑
|
↓
+--------+
| mysql |
+--------+
- web框架使用的是django,木有接触过的可以自行百度之。主要特点是灵活性、高复用性、与其他组件接口完善且丰富。
- web服务器是nginx,一种高性能服务器。
- rabbitMQ消息传递中间件,用来传递判题消息至判题内核。
- core判题内核,qiang.he负责的,感兴趣的童鞋找他。
- data本地题库,放题目数据的。
- mysql存oj信息,user、problem、submit等。
- 还有个bootstrap没有写到架构图上,这个是一个前端的框架。
- 上述的几个模块,官网都有安装步骤,不赘述。(可能过程比较痛苦会遇到各种坑)
- 将代码git下来。
- 搞吧。
- 安装
sudo apt-get install nginx
- 查看nginx 状态
ps -ef | grep nginx
其中 master是主进程号 - 查看nginx.conf是否配置正确
nginx -t -c /etc/nginx/nginx.conf
- 启动
nginx -c /etc/nginx/nginx.conf//就是主进程的路径
还有好几种启动方法。 - 关闭
kill -QUIT 主进程号
或者pkill -9 nginx
主进程号可以通过步骤2查到。 - 重启
/usr/sbin/nginx -s reload
7.查看版本
nginx -v
注意:以上如果出错,就加sudo即可。
另外:nignx 1.1.9的版本太低(ubuntu 12.04 apt-get 源安装的版本),需要升级 参考:http://www.cnblogs.com/terrysun/archive/2012/11/22/2782472.html
默认路径 `/etc/nginx/nginx.conf`
oj路径 `/usr/local/openresty/nginx/conf/nginx.conf`
# 运行用户
user www-data;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#全局错误日志及PID文件
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
#工作模式及连接数上限
events {
use epoll;
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024;#单个后台worker process进程的最大并发链接数
# multi_accept on;
}
这里是django的配置,使用django渲染
location /{
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
}
匹配/index/login最后一个/后面的内容,如果是problemList则跳转到/index/problemList。
location = / {
rewrite ^ ip/index/login ;
}
###nginx调优
##django ###django部署
- 下载安装django
方法1:
pip install Django==1.6.5
测试是否安装成功
:~$python
import django
django.VERSION
(1, 6, 5, 'final', 0) 方法2: 大多数人会考虑从 http://www.djangoproject.com/download/ 下载安装最新的官方发布版。Django 使用了 Python 标准的 distutils 安装法,在 Linux 平台可能包括如下步骤:
下载 tar 安装包,其文件名可能会是 Django-0.96.tar.gz 。
tar xzvf Django-.tar.gz 。 cd Django- 。
sudo python setup.py install 。
配置过程可以参考:http://my.oschina.net/u/240562/blog/127298
note:可能涉及下面几个坑,同时如果有问题可以看下uwsgi.log文件,也许可以更快的找到解决办法
-
配置django的时候要安装django-celery模块,否则在运行 python manage.py syncdb(生成数据库)的时候会报错 apt-get install django-celery
如果报错,可以用pip安装
pip install django-celery -
对于OJ2.0还需要安装django-pagination模块,否则出现进入登录页面,但是不能进入problemList界面,安装方法
pip install django-pagination
安装mysql-server
sudo apt-get install mysql-server
常用的指令:
- 修改mysql最大连接数
vim my.cnf,增加或修改max_connections=1024 my.cnf默认路径:/usr/bin - 本机登陆mysql:mysql -u root -p
- 建库:create database oj;
- 改变数据库:use oj;
- 显示数据库:show databases ;
- 显示表: show tables;
其他的参考:http://www.cnblogs.com/wuhou/archive/2008/09/28/1301071.html 或者百度 启动不起来的错误解决:$/usr/bin/mysql_install_db //重建授权表 $ /usr/bin/mysqld_safe &
$/usr/bin/mysql //测试
在创建的项目中的settings.py进行修改就行了。
note:mysql root的密码最好设置为cugbacm,否则可能出现问题,不然需要修改setting.py里面的相关内容
SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据,支持”双主”架构(SSDB分布式架构: https://github.com/ideawu/ssdb/wiki/Replication), 两个或者更多的主服务器. 当其中一部分出现故障时, 剩余的主服务器仍然能正常接受写请求, 从而保证服务正常可用, 再将DNS解析修改之后, 就能在机房故障后立即恢复100%可用. SSDB 的建议安装⽅方式是源码编译安装, 建议运⾏行环境是主流 Linux 发⾏行版,我的环境是ubuntu 12.04。步骤如下:
$ sudo wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip
$ sudo unzip master
$ cd ssdb-master
$ sudo make
$ sudo make install
ssdb 默认会安装在/usr/local/ssdb目录之下
启动和停止ssdb的命令
启动主库 ./ssdb-server ssdb.conf
或者启动为后台进程 ./ssdb-server -d ssdb.conf
启动 ssdb 命令行 ./tools/ssdb-cli -p 8888
停止 ssdb-server
kill cat ./var/ssdb.pid
##rabbitMQ
###rabbitMQ部署
sudo apt-get install rabbitmq-server
测试:
参考:http://www.rabbitmq.com/tutorials/tutorial-one-python.html
###rabbitMQ配置
##celery ###celery部署 ###celery+django+rabbitMQ配置
测试+部署:
参考:http://blog.csdn.net/dipolar/article/details/22162863
配额:直接从服务器上看吧
##core
判题内核采用Lo_runner
安装方法
1.git clone https://github.com/lodevil/Lo-runner.git
2.cd 到仓库 cd Lo_runner
3.python setup.py install
###判题流程
参考:http://blog.csdn.net/caoxiaoran1202/article/details/41719523
###判题内核对外接口
##前端 ###js ###html ###bootstrap
设置vim,实现每次tab自动空4格 参考:http://www.2cto.com/os/201306/217523.html cd /root vim .vimrc 复制下面文本 set tabstop=4 set softtabstop=4 set shiftwidth=4 set noexpandtab set nu set autoindent set cindent