跳至主要内容

部署到 Deno Deploy

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

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

info

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

先决条件

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

1. 设置你的应用程序

首先,你为你的项目创建一个目录,然后使用 `deno run` 以 具有 npm 规范的 npm 包 的形式用 `prisma init` 初始化你的应用程序。

要设置你的应用程序

  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 连接字符串替换当前的占位符连接字符串 `postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public`。

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
info

在 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)
info

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 Client 查询通过 Prisma Accelerate 发送到数据库了。

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

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

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

在 Web 浏览器中,打开 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. 对于**密钥**,请输入DATABASE_URL
    2. 对于**值**,粘贴 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 数据库。