3个不稳定版本
0.5.0 | 2019年4月18日 |
---|---|
0.4.1 | 2019年3月29日 |
0.4.0 | 2019年3月7日 |
#2082 in Web编程
60KB
1K SLoC
JSaaS
概述
使用Duktape JavaScript引擎在沙盒环境中安全执行JavaScript的HTTP服务。
入门
使用Docker(AMD64/ARM)开始
使用Docker启动服务(请确保替换以下<version>
)
docker run -e JSAAS_BIND_ADDR=0.0.0.0:9412 -p 9412:9412 --rm -ti titanclass/jsaas:<version>
您可以在DockerHub上找到最新版本
使用Cargo开始
如果您有Rust,您可以选择使用Cargo
cargo install jsaas
jsaas
定义和执行
JSaaS服务启动后,定义一个添加两个数字的程序
curl -XPOST --data 'function(a, b) { return a + b; }' https://127.0.0.1:9412/scripts
得到以下结果
{"id":"af15791e-e9c1-4750-8a44-60222ef88c7c"}
然后,通过提供数字来执行程序
curl -XPOST --data '[4, 5]' https://127.0.0.1:9412/scripts/af15791e-e9c1-4750-8a44-60222ef88c7c
得到以下结果
9
在实际场景中,您还可以返回一个JS对象或任何其他可序列化为JSON的值。
单次执行
您还可以提供一个在单个请求中评估然后立即丢弃的函数。
curl -XPOST --data 'function() { return 8 * 2; }' https://127.0.0.1:9412/execute
得到以下结果
16
配置
JSaaS通过环境变量进行配置。以下表格列出了变量
名称 | 描述 |
---|---|
JSAAS_BIND_ADDR | 声明要绑定到的地址。默认:"127.0.0.1:9412" |
JSAAS_SCRIPT_DEFINITION_EXPIRATION_TIME | 如果脚本在此期间(毫秒)未执行,则从服务器中删除。默认:"86400000" |
JSAAS_SCRIPT_EXECUTION_THREAD_POOL_SIZE | 用于执行JavaScript的工作者数量。0表示可用CPU数量。默认:"0" |
JSAAS_SCRIPT_EXECUTION_COMPLETION_TIME | 等待脚本执行完成前的超时时间。默认:"10000" |
JSAAS_TLS_BIND_ADDR | 如果指定,并且已配置TLS,则将绑定单独的端口用于TLS,而不是使用默认端口。 |
JSAAS_TLS_PUBLIC_CERTIFICATE_PATH | TLS公钥路径,PEM格式。请注意,TLS目前仅在Linux上支持。 |
JSAAS_TLS_PRIVATE_KEY_PATH | TLS私钥路径,PEM格式。请注意,TLS目前仅在Linux上支持。 |
开发
该项目目前需要符合POSIX规范的操作系统和bash,这主要是由于其构建设置。首次编译该项目可能需要一些时间,因为构建会下载Duktape并进行配置。
您需要以下软件
- cargo
- curl
- gcc
- python2
- python2-yaml
- rustc
环境准备完毕后,执行以下操作
cargo build
可以生成静态二进制文件
cargo build --release --target=x86_64-unknown-linux-musl
可以启动一个用于开发的web服务器
cargo run
变更日志
0.5.0 - 2019-04-18
- JSaaS现在已发布到DockerHub,支持AMD64和ARM架构。
0.4.1 - 2019-03-29
- 修复了在
atob
中存在的错误,导致某些输入结果不正确。
0.4.0 - 2019-03-07
- 为了更好地集成Tokio,使用
futures::sync::mpsc
。 - Rust 1.33.0。
- 第一个版本发布到Crates.io(除DockerHub外)。
0.3.0 - 2019-02-20
- 修复了一个问题,如果提供的JS代码返回无效值,会导致崩溃。
- 添加了
atob
、btoa
的实现以支持Base64。 - 在适当的地方使用HTTP状态码400。
- Rust 1.32.0。
0.2.0 - 2019-02-04
- 添加了一个
/execute
路由,可以执行代码而无需保存。
0.1.0 - 2019-01-10
- 初始版本发布。
发布
要发布,推送一个以“v”开头的标签——例如“v0.2.0”——CircleCI将构建项目,将镜像推送到DockerHub,并在Crates.io上发布。
(c)版权所有 2019,Titan Class P/L
依赖关系
~11–25MB
~357K SLoC