构建

市场

无需编写代码,即可将现成应用安装到运行中的 ObjectOS。

ObjectOS 市场让你能够将预构建的应用安装到运行中的运行时——无需构建步骤、无需重启、无需检出源代码。这是在第一天就将真正的软件交付到用户面前的最快方式。

工作原理

市场客户端是开源的 @objectstack/cloud-connection 包。云托管环境和自托管的 ObjectOS 镜像开箱即已接好;如果是你自己组装的技术栈,用几行配置即可启用:

import {
  MarketplaceProxyPlugin,
  MarketplaceInstallLocalPlugin,
  RuntimeConfigPlugin,
  resolveCloudUrl,
} from '@objectstack/cloud-connection';

const catalogUrl = resolveCloudUrl(); // OS_CLOUD_URL; 'off' disables

plugins: [
  ...(catalogUrl ? [
    new MarketplaceProxyPlugin({ controlPlaneUrl: catalogUrl }),
    new MarketplaceInstallLocalPlugin({ controlPlaneUrl: catalogUrl }),
  ] : []),
  new RuntimeConfigPlugin({ controlPlaneUrl: '', singleEnvironment: true, installLocal: true }),
]

浏览 / 安装的机制是开放的;目录服务(组织目录、审核、付费分发)由 OS_CLOUD_URL 所指向的控制平面提供。应用一经安装就存在于你运行时自己的内核中 —— 运行时的任何部分都不依赖目录保持可达。

当你打开 ObjectOS(/_console/)时,市场标签页会查询已配置的应用目录,并展示可安装的应用。

You ─→ ObjectOS ─→ Marketplace tab ─→ pick app ─→ Install
                                                  ↓
                                       Artifact merged into kernel
                                                  ↓
                                       The page re-renders with new
                                       objects / views / permissions
                                                  ↓
                                       Done — no restart

目录

目录来源适用场景
Default与 ObjectOS 运行时镜像预先打包首次评估、演示、离线
ObjectStack public catalog公共应用注册表最新的社区应用与第一方应用
Private catalog你自己发布的产物不想公开的内部应用
Local挂载到运行时中的文件物理隔离、自定义构建

目录来源通过市场插件或环境变量配置;参见运行时配置。

默认目录中包含的内容

这些应用可以一键安装:

应用提供的能力
HelpdeskAI 优先的客户支持工单系统
HR通讯录、组织架构图、休假
Project项目 / 任务 / 里程碑跟踪

源代码位于 github.com/objectstack-ai/templates——可以克隆其中任意一个作为自定义应用的起点。

安装流程

  1. 打开 ObjectOS——http://localhost:3000/_console/
  2. 登录——如果尚不存在账户,请在 /_console/register 注册一个
  3. 进入市场标签页
  4. 选择一个应用,点击 Install
  5. 重新加载页面——新应用的对象、视图和流程将会出现

在幕后,市场会获取应用编译后的产物,将其合并到运行中的内核,并通过 ObjectQL 注册其对象。种子数据(如果应用定义了)会在首次安装时插入。

卸载

在 Marketplace → 已安装的应用 → Uninstall。该应用的对象会从内核中移除,其数据表会被标记为待清理(默认情况下数据会被保留;你可以选择是否删除数据表)。

发布你自己的应用

任何通过 os init 构建的内容都可以成为一个市场应用。

os init my-app -t app --install
cd my-app
# ... write objects, views, etc. ...
os compile                                    # → dist/objectstack.json
os package publish                            # publish to a catalog

要发布到公共目录,你需要一个注册表账户(os login)。要发布到私有目录,请将 OS_PACKAGE_REGISTRY 指向你自己的注册表。

版本管理

每个已发布的应用都是不可变的。更新会产生一个新版本。运行时会按应用跟踪已安装的版本以及可用的更新。当某个应用在用户所跟踪的目录中发布了新版本时,用户会看到一个 "Update available" 徽标。

通过 CLI 安装

市场标签页是主要的安装入口,但同一个 install-local 端点也可以脚本化,用于 CI 和物理隔离环境下的运维:

# Catalog mode — the runtime resolves the package from its configured catalog
os package install com.acme.crm --runtime http://localhost:3000 \
  --email admin@example.com --password …

# Air-gapped mode — send a compiled artifact inline, no catalog round-trip
os package install ./dist/objectstack.json --runtime http://localhost:3000 \
  --email admin@example.com --password …

凭证是目标运行时上的账户(不是你的云端登录)—— 与应用内安装使用同一套授权。

权限

安装应用需要 manage_marketplace 系统权限——默认情况下只有 Setup Administrator 权限集的成员拥有该权限。普通用户看到的市场是只读的。

物理隔离环境下的市场

对于没有公网出口的部署环境,可在你的网络内运行一个本地目录服务器,并将 ObjectOS 指向它。拓扑结构请参见物理隔离。

市场不是什么

  • 不是代码分发渠道。 已发布的应用是编译后的产物——它们以声明式方式描述数据 + UI + 流程,不会分发任意 JavaScript。
  • 不是沙箱。 已安装的应用对你数据库的访问权限与内核中的其他任何内容相同——在安装来自不可信来源的应用之前,请先审查产物。
  • (暂时)不是支付平台。 公共目录中的应用都是免费的 Apache-2.0 应用。商业 / 付费分发已列入路线图。