跳至主要内容

部署到 Deno Deploy

通过本指南,您可以学习如何构建和部署一个简单的应用程序到Deno Deploy。该应用程序使用 Prisma ORM 将每个请求的日志保存到 PostgreSQL 数据库中。

本指南涵盖了 Prisma CLI 与 Deno CLI、Deno Deploy、Prisma Client 和 Prisma Accelerate 的使用。

信息

本指南演示了如何将应用程序部署到 Deno Deploy 以及 PostgreSQL 数据库,但您可以使用Prisma ORM 支持的任何数据库类型

先决条件

  • 一个免费的账户
  • 一个免费的 Deno Deploy 账户
  • 一个 PostgreSQL 数据库
  • 已安装 Node.js 和 npm
  • 已安装 Deno v1.29.4 或更高版本。 了解更多
  • (推荐)最新版本的 Prisma ORM。
  • (推荐)VS Code 的 Deno 扩展。 了解更多

1. 设置你的应用程序

首先,你需要为你的项目创建一个目录,然后使用 deno run 初始化你的应用程序,使用 prisma init 作为带有 npm 说明符的 npm 包

设置你的应用程序

  1. 打开你的终端并导航到一个你选择的路径。

  2. 运行以下命令来设置你的应用程序。

    mkdir prisma-deno-deploy
    cd prisma-deno-deploy
    deno run -A npm:prisma init
  3. 编辑 prisma/schema.prisma 文件来定义数据模型并启用 deno 预览功能标记。

    在指南的后面,你将创建一个使用 Log 模型来存储来自应用程序的传入请求数据的应用程序。

    要使用 Deno,你需要在 schema.prisma 文件的 generator 块中添加预览功能标记 deno。此外,Deno 要求你在自定义位置生成 Prisma Client。你可以在 generator 块中的 output 参数中启用此功能。为了满足这两个要求,请将以下行添加到 generator 块中

    schema.prisma
    generator client {
    provider = "prisma-client-js"
    previewFeatures = ["deno"]
    output = "../generated/client"
    }

    datasource db {
    provider = "postgresql"
    url = env("DATABASE_URL")
    }

    model Log {
    id Int @id @default(autoincrement())
    level Level
    message String
    meta Json
    }

    enum Level {
    Info
    Warn
    Error
    }
  4. 在你的 .env 文件中,将当前占位符连接字符串 postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public 替换为你的 PostgreSQL 连接字符串。

2. 创建数据库模式

有了数据模型并配置了数据库连接后,你现在可以将数据模型应用到你的数据库中。

deno run -A npm:prisma migrate dev --name init

该命令执行两件事

  1. 它为本次迁移创建一个新的 SQL 迁移文件
  2. 它对数据库运行 SQL 迁移文件

此时,该命令还有两个额外的副作用。该命令安装 Prisma Client 并为项目创建 package.json 文件,其中包括 @prisma/client 包作为依赖项。

3. 为 Prisma Accelerate 生成 Prisma Client

接下来,使用 --no-engine 标记为 Prisma Accelerate 生成 Prisma Client。稍后,你将使用Prisma Accelerate 通过 HTTP 连接到你的数据库。

deno run -A --unstable npm:prisma generate --no-engine
信息

在 Prisma ORM 5.2.0 之前,--no-engine 标记不可用。请改用 --accelerate 标记。

deno run -A npm:prisma generate --accelerate

你现在拥有了一个数据库模式和一个为 Prisma Accelerate 本地生成的 Prisma Client。

4. 创建你的应用程序

你现在可以创建一个本地 Deno 应用程序。在项目根文件夹中创建 index.ts 并添加以下内容

import { serve } from 'https://deno.land/[email protected]/http/server.ts'
import { PrismaClient } from './generated/client/deno/edge.ts'

const prisma = new PrismaClient()

async function handler(request: Request) {
const log = await prisma.log.create({
data: {
level: 'Info',
message: `${request.method} ${request.url}`,
meta: {
headers: JSON.stringify(request.headers),
},
},
})
const body = JSON.stringify(log, null, 2)
return new Response(body, {
headers: { 'content-type': 'application/json; charset=utf-8' },
})
}

serve(handler)
信息

VS Code 错误:导入路径不能以 '.ts' 扩展名结尾

如果你使用 VS Code 并看到 index.ts 开头的 import 语句出现错误 导入路径不能以 '.ts' 扩展名结尾,你需要安装VS Code 的 Deno 扩展,选择**视图** > **命令面板**并运行命令**Deno:初始化工作区配置**。这会告诉 VS Code 当前项目中的 TypeScript 文件需要使用 Deno 运行,然后触发正确的验证。

下一步

你暂时还无法运行此脚本,因为你还没有使用 Prisma Client 连接数据库所需的 Prisma Accelerate 连接字符串。在本指南的后面,你将在下次将应用程序添加到 Prisma Data Platform 时获得所需的凭据。

之后,你将在本地测试你的应用程序。

5. 在 Prisma Data Platform 中启用 Accelerate

开始使用 Prisma Accelerate

  1. 注册一个免费账户
  2. 创建一个项目
  3. 导航到您创建的项目
  4. 启用 Accelerate
  5. 生成一个 Accelerate 连接字符串并将其复制到剪贴板

6. 在你的环境中配置 Prisma Accelerate

复制了 Accelerate 连接字符串后,你可以将其替换为在 .env 文件中创建数据库模式时使用的现有连接字符串。

Prisma Client 在 Deno 上默认不读取 .env 文件,因此你还需要在本地安装 dotenv-cli

配置 Prisma Accelerate

  1. 安装 dotenv-cli

    npm install dotenv-cli
  2. 将 Prisma Accelerate 连接字符串添加到 .env 文件中。此外,请注释掉直接连接字符串。

    .env
    DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"
    # Previous database connection
    # DATABASE_URL="postgres://..."

现在,你的本地环境配置已准备好通过 Prisma Accelerate 将 Prisma Client 查询发送到数据库。

7. 在本地测试你的应用程序

你现在可以在本地启动你的应用程序并测试日志条目的创建。

npx dotenv -- deno run -A ./index.ts

在网络浏览器中,打开https://127.0.0.1:8000/。此页面将你的请求写入数据库。

{
"id": 3,
"level": "Info",
"message": "GET https://127.0.0.1:8000/",
"meta": {
"headers": "{}"
}
}

刷新页面几次。

每次刷新时,脚本都会生成一个新的日志条目,并且当前日志条目的 ID 会递增。

这确认了你的应用程序在从本地环境运行时可以正常工作。

8. 创建一个仓库并推送到 GitHub

你需要一个 GitHub 仓库才能将你的项目添加到 Deno Deploy,并在每次推送更改时启用自动部署。

设置 GitHub 仓库

  1. 创建一个私有的 GitHub 仓库.

  2. 使用以下命令在本地初始化你的代码仓库,并将更改推送到 GitHub

    git init -b main
    git remote add origin https://github.com/<username>/prisma-deno-deploy
    git add .
    git commit -m "initial commit"
    git push -u origin main

9. 部署到 Deno Deploy

使用 GitHub 代码仓库将你的应用程序添加到 Deno Deploy

  1. 访问 https://dash.deno.com/new
  2. 选择一个 GitHub 组织或用户,然后选择一个代码仓库。
  3. 选择一个生产分支,并选择**自动**模式,以便每次你将更改推送到代码仓库时,Deno Deploy 都会进行部署。
  4. 选择index.ts作为项目的入口点。
  5. 要定义 Accelerate 连接字符串,请点击**添加环境变量**。
    1. 对于**KEY**,输入DATABASE_URL
    2. 对于**VALUE**,粘贴 Accelerate 连接字符串。 Deno Deploy - 项目参数
  6. 点击**链接**。
    等待第一次 Deno 部署完成。

第一次部署完成后,你的浏览器将重定向到项目视图。

后续步骤

点击右上角的蓝色**查看**按钮,打开已部署的 Deno 应用程序。

应用程序显示的结果与你在本地测试时类似,并且新的Log记录 ID 编号会递增。

{
"id": 5,
"level": "Info",
"message": "GET https://prisma-deno-deploy.deno.dev/",
"meta": {
"headers": "{}"
}
}

总结

你已成功部署了一个使用 TypeScript 创建的 Deno 应用程序,该应用程序使用 Prisma Client for Prisma Accelerate 连接到 PostgreSQL 数据库。