跳到主要内容

配置Web类应用

前提条件

请确保在需要运行应用的计算节点上安装有需要的软件包。

配置示例

下面以使用coder/code-server启动VSCode的配置为例来讲解如何配置一个服务器类应用。

创建config/apps目录,在里面创建vscode/config.ymlvscode.yml文件,其内容如下:

config/apps/vscode/config.yml
# 这个应用的ID
id: vscode

# 这个应用的名字
name: VSCode

# 指定应用类型为web
type: web

# Web应用的配置
web:

# 指定反向代理类型
proxyType: relative

# 准备脚本
beforeScript: |
export PORT=$(get_port)
export PASSWORD=$(get_password 12)

# 运行任务的脚本。可以使用准备脚本定义的变量
script: |
PASSWORD=$PASSWORD code-server -vvv --bind-addr 0.0.0.0:$PORT --auth password

# 如何连接应用
connect:
method: POST
path: /login
formData:
password: "{{ PASSWORD }}"

增加了此文件后,刷新即可。

配置解释

proxyType

用户通过以下格式的URL访问Web类的交互式应用

http[s]://${域名或者IP}/${OpenSCOW系统的base path}/api/proxy/${运行应用的集群ID}/${这个应用的proxyType}/${计算节点的IP或者主机名}/${应用所在的端口号}/${...应用所需要的path}

对于web类型的应用,需要配置proxyType。不同的交互式应用使用了不同的nginx proxy方式,通过配置proxyType,可以允许应用携带不同类型的uri到后端计算节点。

proxyType可以配置为relative或者absolute,如果不配置默认是relative

beforeScriptscript

beforeScript部分为准备脚本。这个脚本用来准备运行任务的环境。这个脚本要求必须export两个变量:

  • PORT:程序将会运行在的端口
  • PASSWORD: 连接程序用的密码

connectformData项需要使用的变量也需要在此处export。

准备脚本中的export的变量可以在script中使用。

script部分为如何启动这个应用的脚本。

beforeScriptscript中可以使用以下辅助函数:

函数名作用参数返回值
get_port获得一个可用的TCP端口一个调用时可用的TCP端口
get_password生成一个包含A-Za-z0-9的随机密码$1: 密码长度密码

还可以使用以下变量。如果自定义属性中出现了和这里同名的变量,这里的变量将会被覆盖。

变量名
PROXY_BASE_PATH这个应用在被访问时,其URL中位于计算节点IP之前的内容,不以/结尾。对OpenSCOW来说,为${OpenSCOW的base path}/api/proxy/${集群ID}/${此应用的proxyType}

这些脚本,以及一些辅助的脚本将会被作为一个作业提交给调度系统,并最终在某个计算节点上运行。

connect

connect部分定义如何连接到应用。系统将会给可以连接的应用创建一个用于连接应用的a标签。点击a标签之后,系统将会打开一个新标签页,打开新标签页时实际进行的动作将可以在这里自定义。

配置如下:

属性类型是否必填解释
path字符串新标签页所访问的相对路径
method"GET" 或者 "POST"发起一个什么的HTTP请求
query字符串到字符串的字典连接时附带的query
formData字符串到字符串的字典如果method是POST,这个请求将会带的form data

我们推荐将应用使用密码方式进行加密,所以一般在连接时需要将密码输入给应用。path, query的值和formData的值部分可以使用{{ PASSWORD }}代替应用在创建时生成的密码。

此外,如果formData需要使用其他变量,可以在准备脚本beforeScript中export需要的变量,然后以{{ 变量名 }}的形式使用。

attributes

如果需要指定应用版本,可以通过attributes配置项添加自定义HTML表单,具体配置示例请参考attributes配置