跳至主要内容

部署到 Koyeb

在本指南中,您将设置和部署一个 Node.js 服务器,该服务器使用 Prisma ORM 和 PostgreSQL 到 Koyeb。该应用程序公开了一个 REST API,并使用 Prisma Client 处理从数据库中获取、创建和删除记录。

Koyeb 是一个开发者友好的无服务器平台,用于在全球范围内部署应用程序。该平台允许您无缝运行 Docker 容器、Web 应用程序和 API,并提供基于 Git 的部署、TLS 加密、原生自动扩展、全局边缘网络以及内置的服务网格和发现功能。

当使用 Koyeb 基于 Git 的部署 方法时,每次您将代码更改推送到 GitHub 存储库时,都会在 Koyeb 无服务器平台上自动触发应用程序的新构建和部署。本指南使用后一种方法,即您将代码推送到 GitHub 上应用程序的存储库。

该应用程序具有以下组件

  • **后端**: 使用 Express.js 构建的 Node.js REST API,具有使用 Prisma Client 处理针对 PostgreSQL 数据库(例如,托管在 Heroku 上)的数据库操作的资源端点。
  • **前端**: 用于与 API 交互的静态 HTML 页面。

architecture diagram

本指南的重点是如何将使用 Prisma ORM 的项目部署到 Koyeb。起点将是 Prisma Koyeb 示例,其中包含一个带有几个预配置 REST 端点和简单前端的 Express.js 服务器。

**注意**: 指南中的各个**检查点**使您能够验证是否正确执行了步骤。

先决条件

  • 托管的 PostgreSQL 数据库和一个可从中访问它的 URL,例如 postgresql://username:password@your_postgres_db.cloud.com/db_identifier(您可以使用 Supabase,它提供了一个 免费计划)。
  • GitHub 帐户,并具有一个我们将用于推送代码的空公共存储库。
  • Koyeb 帐户。
  • 已安装 Node.js。

Prisma ORM 工作流程

Prisma ORM 的核心是 Prisma 模式 – 一个声明式配置,您可以在其中定义数据模型和其他与 Prisma ORM 相关的配置。Prisma 模式也是 Prisma Client 和 Prisma Migrate 的单一事实来源。

在本指南中,您将使用 Prisma Migrate 创建数据库模式。Prisma Migrate 基于 Prisma 模式,并通过生成将针对数据库执行的 .sql 迁移文件来工作。

Migrate 带有两个主要工作流程

  • 使用 prisma migrate dev 创建迁移并在本地开发过程中应用它们
  • 使用 prisma migrate deploy 将生成的迁移应用到生产环境

为简洁起见,本指南不涵盖如何使用 prisma migrate dev 创建迁移。相反,它重点关注生产工作流程,并使用示例代码中包含的 Prisma 模式和 SQL 迁移。

您将使用 Koyeb 的 构建步骤 运行 prisma migrate deploy 命令,以便在应用程序启动之前应用迁移。

要了解有关如何使用 Prisma Migrate 创建迁移的更多信息,请查看 从头开始指南

1. 下载示例并安装依赖项

打开您的终端并导航到您选择的某个位置。创建将保存应用程序代码的目录并下载示例代码

mkdir prisma-on-koyeb
cd prisma-on-koyeb
curl https://github.com/koyeb/example-prisma/tarball/main/latest | tar xz --strip=1

**检查点**: 执行 tree 命令应该显示以下目录和文件

.
├── README.md
├── package.json
├── prisma
│   ├── migrations
│   │   ├── 20210310152103_init
│   │   │   └── migration.sql
│   │   └── migration_lock.toml
│   └── schema.prisma
├── public
│   └── index.html
└── src
└── index.js

5 directories, 8 files

安装依赖项

npm install

2. 初始化 Git 存储库并将应用程序代码推送到 GitHub

在上一步骤中,您下载了代码。在此步骤中,您将从代码创建存储库,以便您可以将其推送到 GitHub 存储库以进行部署。

为此,请从源代码文件夹运行 git init

git init
> Initialized empty Git repository in /Users/edouardb/prisma-on-koyeb/.git/

存储库初始化后,添加并提交文件

git add .
git commit -m 'Initial commit'

**检查点**: git log -1 应该显示提交

git log -1
commit 895534590fdd260acee6396e2e1c0438d1be7fed (HEAD -> main)

然后,通过添加远程将代码推送到您的 GitHub 存储库

git remote add origin [email protected]:<YOUR_GITHUB_USERNAME>/<YOUR_GITHUB_REPOSITORY_NAME>.git
git push -u origin main

3. 在 Koyeb 上部署应用程序

Koyeb 控制面板 上,点击“**创建应用程序**”按钮。

您将进入 Koyeb 应用程序创建页面,系统会要求您提供有关要部署的应用程序的信息,例如要使用的部署方法、存储库 URL、要部署的分支以及要执行的构建和运行命令。

选择 GitHub 作为部署方法,然后选择包含您的应用程序的 GitHub 存储库,并将要部署到的分支设置为 main

**注意**: 如果您是第一次使用 Koyeb,系统将提示您在您的 GitHub 帐户中安装 Koyeb 应用程序。

在“**环境变量**”部分,创建一个名为 DATABASE_URL 的新环境变量,类型为 Secret。在值字段中,点击“**创建 Secret**”,将您的 Secret 命名为 prisma-pg-url 并将 PostgreSQL 数据库连接字符串设置为 Secret 值,它应如下所示:postgresql://__USER__:__PASSWORD__@__HOST__/__DATABASE__Koyeb Secrets 允许您安全地存储和检索敏感信息,如 API 令牌、数据库连接字符串。它们使您能够通过删除硬编码凭据来保护您的代码,并允许您安全地将环境变量传递到您的应用程序。

最后,为您的应用程序命名并点击“**创建应用程序**”按钮。

**检查点**: 通过点击已部署应用程序的屏幕截图打开已部署的应用程序。页面加载后,点击“**检查 API 状态**”按钮,它应该返回:{"up":true}

deployed-screenshot

恭喜!您已成功将应用程序部署到 Koyeb。

Koyeb 将构建并部署应用程序。对您的 GitHub 仓库进行额外提交将触发 Koyeb 上的新构建和部署。

检查点:构建和部署完成后,您可以通过点击 Koyeb 控制面板中以 koyeb.app 结尾的应用 URL 访问您的应用程序。页面加载后,点击检查 API 状态按钮,它应该返回:{"up":true}

4. 测试您已部署的应用程序

您可以使用静态前端与您通过预览 URL 部署的 API 进行交互。

在浏览器中打开预览 URL,URL 应如下所示:https://APP_NAME-ORG_NAME.koyeb.app。您应该看到以下内容

deployed-screenshot

这些按钮允许您向 REST API 发出请求并查看响应。

  • 检查 API 状态:将调用返回 {"up":true} 的 REST API 状态端点。
  • 播种数据:将使用测试 userpost 播种数据库。返回创建的用户。
  • 加载 Feed:将加载数据库中所有包含其相关 profilesusers

有关 Prisma Client API 的更多信息,请查看 src/index.js 文件中的路由处理程序。

您可以通过点击 Koyeb 控制面板中应用服务的“运行时日志”选项卡来查看应用程序的日志。

node-72d14691	stdout	> [email protected] start
node-72d14691 stdout > node src/index.js
node-72d14691 stdout 🚀 Server ready at: https://127.0.0.1:8080
node-72d14691 stdout ⭐️ See sample requests: http://pris.ly/e/ts/rest-express#3-using-the-rest-api

Koyeb 特定说明

构建

默认情况下,对于使用 Node.js 运行时的应用程序,如果 package.json 包含 build 脚本,则 Koyeb 会在依赖项安装后自动执行它。在本例中,build 脚本用于运行 prisma generate && prisma migrate deploy && next build

部署

默认情况下,对于使用 Node.js 运行时的应用程序,如果 package.json 包含 start 脚本,则 Koyeb 会自动执行它以启动应用程序。在本例中,start 脚本用于运行 node src/index.js

数据库迁移和部署

在您部署的示例中,迁移是在 Koyeb 构建期间使用 prisma migrate deploy 命令应用的(如 package.json 中的 build 脚本中所定义)。

其他说明

在本指南中,我们为区域、实例大小和水平扩展保留了预设值。您可以根据需要自定义它们。

注意:“端口”部分用于让 Koyeb 知道您的应用程序正在侦听哪个端口,并正确路由传入的 HTTP 请求。默认 PORT 环境变量设置为 8080,在创建新应用程序时,传入的 HTTP 请求将路由到 / 路径。如果您的应用程序正在侦听其他端口,则可以定义另一个端口来路由传入的 HTTP 请求。

总结

恭喜!您已成功将使用 Prisma ORM 的 Node.js 应用程序部署到 Koyeb。

您可以在此 GitHub 仓库中找到示例的源代码。

有关 Prisma Client API 的更多信息,请查看 src/index.js 文件中的路由处理程序。