跳转到内容

安装许可证并迁移到 Business

你购买了一个套餐并收到了许可证。本页说明如何处理它:文件应放在哪里、如何将其应用到 正在运行的引擎、如何查看实际安装内容,以及购买 Business 套餐后,如何在不重新安装任何内容 的情况下将 Community 二进制文件切换为 Business 二进制文件。

你购买的套餐 收到的内容 如何处理
Community 无需安装任何内容 已在运行——本页内容均不适用
Business / Enterprise,自托管 一个许可证文件和一个下载令牌 安装许可证,然后切换到 Business 二进制文件
Cloud 托管 tenant 的凭据 无需在自己的主机上安装任何内容

许可证是一个签名 blob。请将其保存为文件——customer.license 或任意其他名称——并保留 同一封邮件中的下载令牌:二者用于不同步骤,只有许可证需要安装。

终端窗口
olivares license install ./customer.license --data-dir /var/lib/olivares

该命令会使用构建中嵌入的 Ed25519 公钥,在写入任何内容之前验证 blob,因此被截断的 复制粘贴内容会在这里失败,而不是等到下次启动时才失败。成功后,它会写入 <data-dir>/license.key,模式为 0600——这是引擎默认读取的规范静态许可证。

传入 - 而不是路径,即可从标准输入读取 blob:

终端窗口
pbpaste | olivares license install - --data-dir /var/lib/olivares

在现有许可证上执行安装会以原子方式替换它,并输出被替换的是哪一个。

应用到正在运行的引擎——无需重启

Section titled “应用到正在运行的引擎——无需重启”

正在运行的引擎会原地获取新许可证。以下任一方式均可完成:

终端窗口
kill -HUP "$(pidof olivares)" # signal the running process
curl -X POST .../v1/console/runtime/reload # the API half

……也可以使用控制台自身的重新加载控件。重启同样有效,只是没有必要。

如果你已通过其他方式注入许可证,请注意,数据目录文件在四种来源中优先级最低。 引擎按以下顺序解析,优先级从高到低:

  1. --license <path>(或配置文件中的 LicenseFile)
  2. OLIVARES_LICENSE_PATH=<path>
  3. OLIVARES_LICENSE=<blob>——直接放在环境中的许可证
  4. <data-dir>/license.key——license install 写入的内容

当 license install 能够发现某个 override 的优先级高于其即将写入的文件时,它就会拒绝执行: 在这种 override 之下安装会留下一个引擎永远不会读取的文件,你会看到 exit 0,却没有任何变化。 命令会指出它发现的 override。--force 仍会暂存该文件——合理场景是你即将移除 override。

终端窗口
olivares license status --data-dir /var/lib/olivares

status 离线运行,并按引擎使用的相同优先级解析许可证,因此它回答的是关键问题—— 实际生效的是哪一个许可证——而不是“是否存在一个文件”。它会报告解析到的来源、持有者、 套餐和到期时间。

每次安装后以及移除 override 后都应运行它。

3 · Community → Business,原地切换

Section titled “3 · Community → Business,原地切换”

在 Community 构建上安装有效的 Business 或 Enterprise 许可证,该构建会继续运行。 会话驾驶舱(session cockpit)和其他商业页面只有在你把这个安装切换到 Business 之后才会出现。 控制台的 Edition & license 视图会把已安装的许可证与构建分开显示。Expires 是付费期限; Lease until(显示时)是另一个独立的临时实例租约。在 Docker 中运行?请看下面的 Docker 与 Compose。

安装许可证后,下载 Business 二进制文件即可。无需重新安装任何内容,也不会移动任何数据:

终端窗口
export OLIVARES_UPGRADE_TOKEN=<TOKEN> # not needed once this installation is connected
olivares upgrade --edition business

olivares license install 和 olivares license status 会按这套安装的安装方式打印确切的命令,控制台的 Edition & license 视图也以一个按钮 切换到 Business 显示同一步骤:引擎下载构建、验证、原地替换并在其上重启。下载令牌在许可下载门户的 Downloads 页面(https://licenses.olivares.ai/portal/downloads)中,与这些命令并列,也在您的许可邮件里;如上按名称传递,以免它出现在进程列表中。已连接的安装(olivares license connect start)不需要令牌。--enterprise 是同一路由的旧写法。控制台按钮需要二者之一:引擎自身环境中的令牌,或这次连接;两者都没有时,视图会改为显示命令。

该命令会获取适用于你所在平台的已签名 Business 构建,并离线验证签名——遭篡改的制品会 中止升级,正在运行的二进制文件保持原样——然后以原子方式完成替换,并保留上一个文件的 备份。Business 与 Community 的版本号相同,因此即使你已在运行该版本,此命令同样有效。如果希望先查看 计划而不执行,请先使用 --check,它会将此变更显示为 edition: community -> enterprise:

终端窗口
olivares upgrade --edition business --check

重启服务,然后启用模块:

终端窗口
olivares enterprise enable <preset> # starter | regulated | full

该命令和预设名称是 Business 二进制文件所接受的写法。预设不是版本,也不与 Business 的四个能力系列一一对应。 启用过程受到治理并会被审计:它会先显示 diff;任何需要机密或审查的模块都会进入 暂存状态,而不是只启用一部分。olivares enterprise status 会报告哪些内容处于活动状态。 这些命令仅存在于 Business 二进制文件中——如果 olivares enterprise 不是一个命令, 说明你仍在运行 Community 构建,上述切换尚未发生。

公开的 docker.io/olivaresai/olivares 镜像是 Community 版。在容器中,olivares upgrade 会把该版本安装到数据卷而不是镜像中,因此重新创建容器会再次启动它。当 Business 版本比镜像新或与镜像版本相同时(--check 会将此变更显示为 edition: community -> enterprise), 这会应用该版本;也可以按下文自行构建镜像。 安装好许可证后(第 2 节),在运行中的容器内执行升级并重启它。令牌在你的交付邮件中; 请按名称传递它,使其不会出现在进程列表中:

终端窗口
export OLIVARES_UPGRADE_TOKEN=<TOKEN>
docker compose exec -e OLIVARES_UPGRADE_TOKEN olivares olivares upgrade --edition business --yes
docker compose restart olivares

该版本保存在数据目录下的 ota/(随附镜像中为 /var/lib/olivares/ota),与用于验证它的 已签名清单和制品放在一起。当该版本比镜像新,或版本相同但构建不同(例如你作为 Business 应用的 版本所对应的 Community 镜像)时,镜像中的二进制文件会启动它。数据卷中的内容本身不被信任: 每次启动都会用镜像中内嵌的 OTA 密钥验证清单签名,并用清单所签名的摘要校验制品。验证证明保存在 容器的临时目录中(随附的 Compose 文件会在那里挂载 tmpfs),而不是数据卷中;重新创建容器会将其 清空。如果镜像比已应用的版本新,则运行镜像,启动日志会说明;请再次运行升级。无法通过验证的内容 会被忽略并给出提示,随后运行镜像。数据卷不保留旧二进制文件的备份:要回到镜像中的二进制文件, 请删除 ota/。这需要允许执行文件的数据卷(命名卷允许;在 noexec 挂载上,olivares serve 会停止并说明原因,而不是悄悄运行镜像中的二进制文件)。

你也可以自行构建镜像。请通过 授权下载门户下载 Business 二进制文件的相同版本和相同 Linux 架构, 并按下载页面的说明验证其签名和校验和。然后你可以在自己的主机上,把这个已验证的二进制文件叠加到匹配的 Community 运行时镜像上。在包含名为 olivares 的已验证二进制文件的目录中,使用这个 Dockerfile:

ARG COMMUNITY_IMAGE
FROM ${COMMUNITY_IMAGE}
COPY --chmod=0755 olivares /usr/local/bin/olivares

使用该版本 Community 镜像的摘要(digest)来构建,并按验证你下载的内容中的方法验证它。 结果会保留该镜像的非 root 用户、入口点(entrypoint)和端口,因此 Dockerfile 不需要 USER 行:

终端窗口
docker build --build-arg COMMUNITY_IMAGE=docker.io/olivaresai/olivares@sha256:<digest> \
--tag olivares-business-local:X.Y .

请将此镜像保持私有,并保留下载内容随附的商业许可证和声明。不要把你的许可证文件或下载令牌放进构建上下文。 把你的 Compose 服务的 image 设为 olivares-business-local:X.Y,然后用 docker compose up -d --no-deps --force-recreate olivares 重新创建该服务。对于独立的 Docker, 请用这个镜像以及相同的数据卷和参数重新创建容器。保留数据卷:不要使用 down --volumes。

重启后请检查 Edition & license:版本应显示为 Business,已安装的许可证仍保存在数据卷中。 Enterprise 合同也使用这个商业构建;合同特定的制品按其下载说明处理。

终端窗口
olivares license uninstall --data-dir /var/lib/olivares --yes

该命令会删除 <data-dir>/license.key 并报告移除的内容。与 install 一样,只要它能看到 OLIVARES_LICENSE* override,就会拒绝执行——实际生效的并不是该文件,因此删除它不会改变任何内容—— 并且它也有相同的盲区:传给另一个进程中运行的引擎的 --license flag 对它不可见。这是控制台自身 DELETE /v1/console/license 的离线一侧。

移除许可证不会禁用你正在运行的任何内容。它只是撤回存证;在切换回原版本之前, Business 二进制文件仍会按 Business 二进制文件的方式运行。

  • 签发许可证(license keygen / sign)是同一命令的供应商侧操作。客户无需使用它。
  • 每个套餐包含的内容位于定价页面,而不在这里。
  • 该模式如何运作——为什么订阅提供的是制品访问权限,而不是一个开关——请参阅 开放内核与授权许可。
  • 购买 → 退款的演练(使用沙箱夹具,而非真实卡片)请参阅 演练商业周期。