Deno Deploy 应用的程序化管理
除了提供 microVM,SDK 还提供了用于在组织内部创建和管理 Deploy 应用的 API。自动化这些工作流程在以下情况下非常有用:
- 启动隔离的应用用于预览或质量保证
- 保持多个环境同步
- 将 Deploy 资源配置直接集成进 CI/CD
- 按计划清理过时或未使用的应用
SDK 封装了 Deno Deploy REST API。
快速开始 Jump to heading
认证 Jump to heading
你需要一个具有相应权限的 Deno Deploy API 令牌来管理应用。你可以在 Deno Deploy 控制台的 沙箱 (Sandboxes) > 集成到你的应用中 (Integrate into your app) 下找到你的令牌。
如果还没有令牌,可以点击 + 创建令牌 (+ Create Token) 按钮生成一个新令牌。
在实例化客户端或创建沙箱管理应用时,应传入作用域限定为你的组织的 DENO_DEPLOY_TOKEN 环境变量。Client 类为该令牌作用域内的组织中的每个应用暴露了创建、列出、获取、更新和删除方法。
初始化客户端 Jump to heading
import { Client } from "@deno/sandbox";
const client = new Client();
from deno_sandbox import DenoDeploy
sdk = DenoDeploy()
from deno_sandbox import AsyncDenoDeploy
sdk = AsyncDenoDeploy()
SDK 使用相同的 DENO_DEPLOY_TOKEN 环境变量进行认证。请提供作用域限定为你希望管理的组织的令牌。
创建应用 Jump to heading
const app = await client.apps.create({
slug: "my-app-from-sdk",
});
console.log(app);
// {
// id: "4416a358-4a5f-45b2-99b5-3ebcb4b63b5f",
// slug: "my-app-from-sdk",
// updated_at: "2025-11-25T05:29:08.777Z",
// created_at: "2025-11-25T05:29:08.777Z"
// }
app = sdk.apps.create(slug="my-app-from-sdk")
print(app)
# {
# "id": "4416a358-4a5f-45b2-99b5-3ebcb4b63b5f",
# "slug": "my-app-from-sdk",
# "updated_at": "2025-11-25T05:29:08.777Z",
# "created_at": "2025-11-25T05:29:08.777Z"
# }
app = await sdk.apps.create(slug="my-app-from-sdk")
print(app)
# {
# "id": "4416a358-4a5f-45b2-99b5-3ebcb4b63b5f",
# "slug": "my-app-from-sdk",
# "updated_at": "2025-11-25T05:29:08.777Z",
# "created_at": "2025-11-25T05:29:08.777Z"
# }
slug 为必填项,且必须在组织内唯一。随着 API 的演进,你还可以提供诸如 name 和 description 等可选元数据。
列出应用 Jump to heading
const list = await client.apps.list();
console.log(list.items); // 第一页(最近的 30 个应用)
for await (const app of list) {
console.log(app.slug); // 分页迭代器
}
page = sdk.apps.list()
print(page.items) # 第一页(最近的 30 个应用)
for item in page.items:
print(item["slug"])
page = await sdk.apps.list()
print(page.items) # 第一页(最近的 30 个应用)
async for item in page:
print(item["slug"]) # 分页迭代器
通过迭代可以遍历组织中的所有应用,无需自行管理游标。
获取应用详情 Jump to heading
const appBySlug = await client.apps.get("my-app-from-sdk");
const appById = await client.apps.get("bec265c1-ed8e-4a7e-ad24-e2465b93be88");
app_by_slug = sdk.apps.get("my-app-from-sdk")
app_by_id = sdk.apps.get("bec265c1-ed8e-4a7e-ad24-e2465b93be88")
app_by_slug = await sdk.apps.get("my-app-from-sdk")
app_by_id = await sdk.apps.get("bec265c1-ed8e-4a7e-ad24-e2465b93be88")
获取应用支持通过 slug 或 UUID,方便使用你手头上已有的任意标识符。
更新应用元数据 Jump to heading
const updated = await client.apps.update(
"bec265c1-ed8e-4a7e-ad24-e2465b93be88",
{ slug: "my-cool-app" },
);
console.log(updated.slug); // "my-cool-app"
updated = sdk.apps.update(
"bec265c1-ed8e-4a7e-ad24-e2465b93be88",
slug="my-cool-app"
)
print(updated["slug"]) # "my-cool-app"
updated = await sdk.apps.update(
"bec265c1-ed8e-4a7e-ad24-e2465b93be88",
slug="my-cool-app"
)
print(updated["slug"]) # "my-cool-app"
当团队重命名服务或你想在组织内统一 slug 规则时,这个功能很实用。
删除应用 Jump to heading
await client.apps.delete("legacy-chaotic-app");
await client.apps.delete("bec265c1-ed8e-4a7e-ad24-e2465b93be88");
sdk.apps.delete("legacy-chaotic-app")
sdk.apps.delete("bec265c1-ed8e-4a7e-ad24-e2465b93be88")
await sdk.apps.delete("legacy-chaotic-app")
await sdk.apps.delete("bec265c1-ed8e-4a7e-ad24-e2465b93be88")
删除时可使用任意一种标识符。移除后,相关的构建和路由会被自动清理。
从沙箱发布到 Deploy 应用 Jump to heading
sandbox.deno.deploy() 方法可用于将资源从沙箱发布到已有的 Deno Deploy 应用。这允许你将沙箱用作托管在 Deno Deploy 上的应用的部署流水线。
await using sandbox = await Sandbox.create();
// ... 构建你的应用 ...
const app = await sandbox.deno.deploy("my-app", {
options: {
path: "build-output", // 可选:包含要部署的应用的目录路径
production: true, // 可选:部署到生产环境
build: {
entrypoint: "server.ts", // 可选:部署入口文件
},
},
});
console.log(`已部署到 ${app.slug}`);
sdk = DenoDeploy()
with sdk.sandbox.create() as sandbox:
# ... 构建你的应用 ...
build = sandbox.deno.deploy(
"my-app",
path="build-output", # 可选:包含要部署的应用的目录路径
production=True, # 可选:部署到生产环境
entrypoint="server.ts", # 可选:部署入口文件
)
print(f"已部署的修订版 ID: {build.id}")
sdk = AsyncDenoDeploy()
async with sdk.sandbox.create() as sandbox:
# ... 构建你的应用 ...
build = await sandbox.deno.deploy(
"my-app",
path="build-output", # 可选:包含要部署的应用的目录路径
production=True, # 可选:部署到生产环境
entrypoint="server.ts", # 可选:部署入口文件
)
print(f"已部署的修订版 ID: {build.id}")