KodeRunr 基于Docker 的 Code Runner KodeRunr

jaxihe@gmail.com2016-04-15 19:27:34 • 2140 次点击    
这是一个分享于 2016-04-15 19:27:34 的项目,其中的信息可能已经有所发展或是发生改变。

简介

KodeRunr (读作 code runner) 是款我在闲暇时间用Go语言编写的应用。顾名思义,你可以用它在网页上、命令行里写程序,贴代码,与此同时无需在本地安装任何编程语言。

网址:http://koderunr.tech/ Github: https://github.com/jaxi/koderunr

截图

命令行分享代码

命令行版本 KodeRunr

KodeRunr 具有以下几个特色:

持编程多种流行编程语言

  • Ruby - 2.3.0
  • Ruby - 1.9.3-p550
  • Python - 2.7.6
  • Python - 3.5.0
  • Swift - 2.2
  • C - GCC 4.9
  • Go - 1.6
  • Elixir - 1.2.3

Unbuffered IO

支持即使输入输出 - 在截图中你可以看到 stdin 和 stdout 都是异步发生的 (无需像 Online Judge 平台那样一次性输入 input)

跨平台

  • 可在 Chrome, Firefox, Safari 中流畅运行 (因为使用 EventSource 的浏览器技术,现暂不支持 IE 浏览器)
  • 跨平台命令行 - 采用了 Go 强大的交叉编译技术,即使在你的电脑上没有安装编程语言,也可以通过 kode 在命令行中即时运行各种程序。现支持在 OS X, Linux (x86 & ARM), FreeBSD, OpenBSD 下的二进制命令行,可以在 https://github.com/jaxi/koderunr/releases 上找到打包的二进制文件

基于 Docker

使用Docker容器作为untrusted code的运行环境。其原理是,在程序运行前创建相对应编程语言的Docker容器,然后在Docker中运行相对应的代码,同时通过 Docker API的streaming和Redis队列,将stdin, stdout, stderr 在 Docker容器和宿主之间传导,与此同时通过Server Sent Events将数据传输到客户端。

出于对安全和性能的考虑,限定了容器的CPU quotas和内存的使用率;在容器中禁网; 每个容器限15秒内运行;程序运行完毕后自动销毁容器。

现使用 Docker 1.11 和 4.3.0-040300-generic 内核对 pids 数量进行限定,以此应对 fork bombing.

现只支持4台容器同时运行(毕竟部署在低配 DigitalOcean 服务器上)

部署环境

  • DigitalOcean $ 5/mo VPS
  • Nginx 做静态页面服务,以及 Go web 应用的代理服务
Latest commit to the undefined branch on unknown
Download as zip
授权协议:
MIT
开发语言:
Go 查看源码»
操作系统:
Linux, OS X, OpenBSD 以及FreeBSD
2140 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传