部署到 Koyeb
在本指南中,你将搭建一个使用 Prisma ORM 和 PostgreSQL 的 Node.js 服务器并将其部署到 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 页面。
本指南的重点是展示如何将使用 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 schema – 一个声明性配置,你可以在其中定义数据模型和其他 Prisma ORM 相关配置。Prisma schema 也是 Prisma Client 和 Prisma Migrate 的唯一事实来源。
在本指南中,你将使用Prisma Migrate创建数据库 schema。Prisma Migrate 基于 Prisma schema,通过生成针对数据库执行的 .sql
迁移文件来工作。
Migrate 提供两种主要工作流程
- 使用
prisma migrate dev
在本地开发期间创建和应用迁移 - 使用
prisma migrate deploy
将生成的迁移应用到生产环境
为简洁起见,本指南不涵盖如何使用 prisma migrate dev
创建迁移。相反,它专注于生产工作流程,并使用示例代码中包含的 Prisma schema 和 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)
然后,通过添加 remote 将代码推送到你的 GitHub 仓库
git remote add origin git@github.com:<YOUR_GITHUB_USERNAME>/<YOUR_GITHUB_REPOSITORY_NAME>.git
git push -u origin main
3. 在 Koyeb 上部署应用
在Koyeb 控制面板上,点击 Create App 按钮。
你将进入 Koyeb 应用创建页面,其中要求你提供要部署的应用信息,例如使用的部署方法、仓库 URL、要部署的分支、要执行的构建和运行命令。
选择 GitHub 作为部署方法,并选择包含你应用的 GitHub 仓库,将要部署的分支设置为 main
。
注意:如果这是你第一次使用 Koyeb,系统将提示你在 GitHub 账户中安装 Koyeb 应用。
在 Environment variables 部分,创建一个新的环境变量 DATABASE_URL
,类型为 Secret。在 value 字段中,点击 Create Secret,将你的 secret 命名为 prisma-pg-url
,并将 PostgreSQL 数据库连接字符串设置为 secret 值,其格式应如下所示:postgresql://__USER__:__PASSWORD__@__HOST__/__DATABASE__
。Koyeb Secrets允许你安全地存储和检索敏感信息,如 API 令牌、数据库连接字符串。它们通过移除硬编码凭据来保护你的代码,并允许你将环境变量安全地传递给应用。
最后,给你的应用起一个名字,然后点击 Create App 按钮。
检查点:点击已部署应用的截图打开已部署的应用。页面加载后,点击 Check API status 按钮,应该返回:{"up":true}
恭喜!你已成功将应用部署到 Koyeb。
Koyeb 将构建和部署应用。向你的 GitHub 仓库提交额外的代码将触发 Koyeb 上的新构建和部署。
检查点:构建和部署完成后,你可以通过点击 Koyeb 控制面板中以 koyeb.app 结尾的应用 URL 来访问你的应用。页面加载后,点击 Check API status 按钮,应该返回:{"up":true}
4. 测试你部署的应用
你可以使用静态前端通过预览 URL 与你部署的 API 交互。
在浏览器中打开预览 URL,该 URL 应该类似于:https://APP_NAME-ORG_NAME.koyeb.app
。你应该会看到以下内容
这些按钮允许你向 REST API 发送请求并查看响应
- Check API status:将调用 REST API 状态端点,返回
{"up":true}
。 - Seed data:将使用测试
user
和post
初始化数据库。返回创建的用户。 - Load feed:将加载数据库中所有
users
及其相关的profiles
。
要更深入地了解 Prisma Client 的 API,请查看 src/index.js
文件中的路由处理程序。
你可以通过点击 Koyeb 控制面板中应用服务的 Runtime logs
标签页来查看应用的日志。
node-72d14691 stdout > prisma-koyeb@1.0.0 start
node-72d14691 stdout > node src/index.js
node-72d14691 stdout 🚀 Server ready at: http://localhost: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 构建期间(如 package.json
中的 build
脚本所定义)的 prisma migrate deploy
命令应用的。
其他说明
在本指南中,我们保留了区域、实例大小和水平扩缩容的预设值。你可以根据需要进行自定义。
注意:Ports 部分用于告知 Koyeb 你的应用正在监听哪个端口,以便正确路由传入的 HTTP 请求。创建新应用时,默认设置一个
PORT
环境变量为8080
,并将传入的 HTTP 请求路由到/
路径。如果你的应用监听其他端口,你可以定义另一个端口来路由传入的 HTTP 请求。
总结
恭喜!你已成功将使用 Prisma ORM 的 Node.js 应用部署到 Koyeb。
你可以在这个 GitHub 仓库找到示例的源代码。
要更深入地了解 Prisma Client 的 API,请查看 src/index.js
文件中的路由处理程序。