--- title: 规划你的实现 --- :::warning 2026 年 7 月 20 日停止支持 subhosting v1 API 将于 2026 年 7 月 20 日关闭。请迁移到 v2 API。详情请参阅 API 迁移指南。 ::: 例如,假设你正在构建一个类似 Salesforce 的 SaaS CRM 平台。你希望让你的客户能够编写 JavaScript 代码,并在每次捕获到新线索时执行这些代码。 如果你打算使用 Deno Deploy 实现这个功能,以下是你可能会考虑的构建方式: - 创建一个 **项目**,并将该项目与数据库中的客户账户关联。这将允许你跟踪每个客户产生的使用情况,并可能基于该使用情况通过项目的分析信息向他们收费。 - 创建一个 **部署**,其中包含最终用户提供的代码,该代码应该在创建新客户时运行。 - 使用同一项目中的多个部署,你可以实现事件处理逻辑的“预发布”或“生产”版本。 - 你的 CRM 软件将通过向部署发送 HTTP 请求并等待响应与最终用户的代码进行通信。 - 将来,如果你想支持为 CRM 中的其他事件编写代码(例如创建新联系人或每晚发送自动报告),你可以为这些事件创建一个项目,并对每个事件使用上述描述的流程。 让我们看一个实现此操作所需的 API 端点的示例。 ## 为项目创建部署 在[上一章](./quick_start.md)中,你创建了一个新项目并记录了它的 `id` 属性。在上一章的示例中,ID 是: ```console f084712a-b23b-4aba-accc-3c2de0bfa26a ``` 你可以使用项目标识符来[为该项目创建部署](https://apidocs.deno.com/#get-/projects/-projectId-/deployments)。创建一个名为 `create_deployment.ts` 的新文件,并包含以下代码以为你的项目创建一个新的“Hello World”部署。 ```ts title="create_deployment.ts" const accessToken = Deno.env.get("DEPLOY_ACCESS_TOKEN"); const API = "https://api.deno.com/v1"; // 用你所需的项目 ID 替换 const projectId = "your-project-id-here"; // 创建一个新的部署 const res = await fetch(`${API}/projects/${projectId}/deployments`, { method: "POST", headers: { Authorization: `Bearer ${accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({ entryPointUrl: "main.ts", assets: { "main.ts": { "kind": "file", "content": `export default { async fetch(req) { return new Response("Hello, World!"); } }`, "encoding": "utf-8", }, }, envVars: {}, }), }); const deployment = await res.json(); console.log(res.status); console.log( "访问你的站点:", `https://${project.name}-${deployment.id}.deno.dev`, ); ``` 如果你使用以下命令运行此脚本: ```bash deno run -A --env create_deployment.ts ``` 你应该很快会在公共 URL 上拥有一个简单的“Hello World!”服务器,可以从你的 Deno Deploy 仪表板上查看。 ## 部署的组成部分 上面的示例展示了一个非常简单的部署。一个更复杂的部署可能包含以下某些或全部组件,详细描述见[这里的 API 文档](https://apidocs.deno.com/#get-/projects/-projectId-/deployments)。 - **资产:** TypeScript 或 JavaScript 源文件、图像、JSON 文档 - 使你的部署运行的代码和静态文件。这些文件可以使用 `utf-8`(用于纯源文件)或 `base64` 编码上传到服务器的 JSON 中。除了实际文件外,你还可以包含指向其他文件的符号链接。 - **入口点 URL:** 从上面的集合中执行的资产(TypeScript 或 JavaScript 文件)的文件路径,应该在你的部署中启动服务器时执行。 - **环境变量:** 你可以指定应存在于系统环境中的值,以便通过 `Deno.env.get` 获取。 - **数据库 ID:** 应该可以在此部署中使用的 Deno KV 数据库的标识符。 - **编译器选项:** 应用于解析 TypeScript 代码的一组选项。 ## 自定义域名 部署创建后,将分配一个生成的 URL。这在某些场景下可能是可以的,但通常你会想要将自定义域名与部署关联起来。 [查看域的 API 参考](https://apidocs.deno.com/#get-/organizations/-organizationId-/domains)。