部署到 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` 以 具有 npm 规范的 npm 包 的形式用 `prisma init` 初始化你的应用程序。
要设置你的应用程序
-
打开你的终端并导航到你选择的某个位置。
-
运行以下命令来设置你的应用程序。
mkdir prisma-deno-deploy
cd prisma-deno-deploy
deno run -A npm:prisma init -
编辑 `prisma/schema.prisma` 文件以定义数据模型并启用 `deno` 预览功能标志。
在本指南的后面,你将创建一个使用 `Log` 模型来存储来自应用程序的传入请求数据的应用程序。
要使用 Deno,你需要在你的 `schema.prisma` 文件的 `generator` 块中添加预览功能标志 `deno`。此外,Deno 要求你在自定义位置生成 Prisma Client。你可以在 `generator` 块的 `output` 参数中启用此功能。为了满足这两个要求,请将以下几行添加到 `generator` 块中
schema.prismagenerator 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
} -
在你的 `.env` 文件中,用你的 PostgreSQL 连接字符串替换当前的占位符连接字符串 `postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public`。
2. 创建数据库架构
有了数据模型和你的数据库连接配置,你现在可以将数据模型应用到你的数据库了。
deno run -A npm:prisma migrate dev --name init
该命令做了两件事
- 它为此次迁移创建一个新的 SQL 迁移文件
- 它对数据库运行该 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
- 注册一个免费的
- 创建一个项目
- 导航到创建的项目
- 启用 Accelerate
- 生成一个 Accelerate 连接字符串并将其复制到剪贴板
6. 在你的环境中配置 Prisma Accelerate
复制了 Accelerate 连接字符串后,你可以用它来替换你在 `.env` 文件中用来创建数据库架构的现有连接字符串。
Prisma Client 在 Deno 上默认不会读取 `.env` 文件,因此你必须在本地安装 `dotenv-cli`。
要配置 Prisma Accelerate
-
安装 `dotenv-cli`。
npm install dotenv-cli
-
将 Prisma Accelerate 连接字符串添加到 `.env` 文件中。此外,请注释掉直接连接字符串。
.envDATABASE_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 仓库
-
在本地初始化你的仓库并将更改推送到 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
- 访问 https://dash.deno.com/new.
- 选择一个 GitHub 组织或用户,然后选择一个仓库。
- 选择一个生产分支,并选择**自动**模式,这样 Deno Deploy 就可以在每次将更改推送到仓库时进行部署。
- 选择
index.ts
作为项目的入口点。 - 要定义 Accelerate 连接字符串,请点击**添加环境变量**。
- 对于**密钥**,请输入
DATABASE_URL
。 - 对于**值**,粘贴 Accelerate 连接字符串。
- 对于**密钥**,请输入
- 点击**链接**。
等待第一次 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 数据库。