部署到 Render
本指南介绍如何将使用 Prisma ORM 和 PostgreSQL 的 Node.js 服务器部署到 Render。
该 Prisma Render 部署示例 包含一个带有 REST 端点和简单前端的 Express.js 应用程序。此应用程序使用 Prisma Client 从其数据库中获取、创建和删除记录。
关于 Render
Render 是一个云应用程序平台,允许开发人员轻松部署和扩展全栈应用程序。对于此示例,了解以下内容很有帮助
- Render 允许您部署长期运行的“有服务器”全栈应用程序。您可以将 Render 服务配置为 自动扩展,以基于 CPU 和/或内存使用情况进行。这是您可以选择的几种 部署范式 之一。
- Render 原生支持 常用运行时,包括 Node.js 和 Bun。在本指南中,我们将使用 Node.js 运行时。
- Render 与 Git 存储库集成,以便在提交后自动部署。您可以从 GitHub、GitLab 或 Bitbucket 部署到 Render。在本指南中,我们将从 Git 存储库进行部署。
先决条件
- 注册 Render 帐户
获取示例代码
将 示例代码 下载到您的本地计算机。
curl https://codeload.github.com/prisma/prisma-examples/tar.gz/latest | tar -xz --strip=2 prisma-examples-latest/deployment-platforms/render
cd render
了解示例
在部署应用程序之前,让我们看一下示例代码。
Web 应用程序
Express 应用程序的逻辑位于两个文件中
src/index.js
:API。端点使用 Prisma Client 从数据库中获取、创建和删除数据。public/index.html
:Web 前端。前端调用了一些 API 端点。
Prisma 模式和迁移
此应用程序的 Prisma 组件位于两个文件中
prisma/schema.prisma
:此应用程序的数据模型。此示例定义了两个模型,User
和Post
。此文件的格式遵循 Prisma 模式。prisma/migrations/<migration name>/migration.sql
:在 PostgreSQL 数据库中构建此模式的 SQL 命令。您可以通过运行prisma migrate dev
来自动生成这样的迁移文件。
Render 蓝图
render.yaml
文件是 Render 蓝图。蓝图是 Render 的基础设施即代码格式。您可以使用蓝图以编程方式创建和修改 Render 上的服务。
render.yaml
定义了将由蓝图在 Render 上启动的服务。在此 render.yaml
中,我们看到
- **使用 Node 运行时的 Web 服务**:这是 Express 应用程序。
- **PostgreSQL 数据库**:这是 Express 应用程序使用的数据库。
此文件的格式遵循 蓝图规范。
Render 部署如何与 Prisma Migrate 协同工作
通常,您希望在 Web 应用程序启动之前运行所有数据库迁移。否则,当应用程序查询不包含预期表和行的数据库时,可能会遇到错误。
您可以使用 Render 部署中的“预部署命令”设置来运行任何命令(例如数据库迁移),然后再启动应用程序。
有关“预部署命令”的更多详细信息,请参阅 Render 的部署指南。
在我们的示例代码中,render.yaml
显示了 Web 服务的构建命令、预部署命令和启动命令。值得注意的是,npx prisma migrate deploy
(预部署命令)将在 npm run start
(启动命令)之前运行。
命令 | 值 |
---|---|
构建命令 | npm install --production=false |
预部署命令 | npx prisma migrate deploy |
启动命令 | npm run start |
部署示例
1. 初始化你的 Git 仓库
- 将 示例代码 下载到你的本地机器。
- 在 GitHub、GitLab 或 BitBucket 上创建一个新的 Git 仓库。
- 将示例代码上传到你的新仓库。
2. 手动部署
- 在 Render 仪表盘中,点击 新建 > PostgreSQL。提供一个数据库名称,并选择一个套餐。(此演示使用免费套餐即可。)
- 数据库准备就绪后,查找其 内部 URL。
- 在 Render 仪表盘中,点击 新建 > Web 服务,并连接包含示例代码的 Git 仓库。
- 在服务创建过程中提供以下值
设置 | 值 |
---|---|
语言 | Node |
构建命令 | npm install --production=false |
预部署命令(注意:这可能在“高级”选项卡中) | npx prisma migrate deploy |
启动命令 | npm run start |
环境变量 | 将 DATABASE_URL 设置为数据库的内部 URL |
就是这样。构建完成后,你的 Web 服务将在其 onrender.com
URL 上上线。
3. (可选)使用基础设施即代码进行部署
你也可以使用 Render Blueprint 部署示例。按照 Render 的 [Blueprint 设置指南] 并使用示例中的 render.yaml
。
额外:填充数据库
Prisma ORM 包含一个用于 使用初始数据填充数据库 的框架。在我们的示例中,prisma/seed.js
定义了一些测试用户和帖子。
要将这些用户添加到数据库中,我们可以:
- 将种子脚本添加到我们的预部署命令中,或者
- 通过 SSH shell 在我们的服务器上手动运行该命令
方法 1:预部署命令
如果你手动部署了 Render 服务
- 在 Render 仪表盘中,导航到你的 Web 服务。
- 选择 设置。
- 将预部署命令设置为:
npx prisma migrate deploy; npx prisma db seed
如果你使用 Blueprint 部署了 Render 服务
- 在你的
render.yaml
文件中,将preDeployCommand
更改为:npx prisma migrate deploy; npx prisma db seed
- 将更改提交到你的 Git 仓库。
方法 2:SSH
Render 允许你通过 SSH 连接到你的 Web 服务。
- 按照 Render 的 SSH 指南 连接到你的服务器。
- 在 shell 中,运行:
npx prisma db seed