部署到 Heroku
在本指南中,你將設定一個使用 Prisma ORM 和 PostgreSQL 的 Node.js 伺服器並將其部署到 Heroku。該應用程式暴露了一個 REST API,並使用 Prisma Client 來處理從資料庫中獲取、建立和刪除記錄的操作。
Heroku 是一個雲平臺即服務 (PaaS)。與流行的無伺服器部署模型相比,Heroku 上的應用程式即使沒有請求也會持續執行。由於 PostgreSQL 資料庫的連線限制,這帶來了幾個好處。有關更多資訊,請查閱通用部署文件
通常,Heroku 與 Git 倉庫整合,以便在提交時自動部署。你可以從 GitHub 倉庫部署到 Heroku,或者將你的原始碼推送到 Heroku 為每個應用建立的 Git 倉庫。本指南採用後一種方法,你將程式碼推送到 Heroku 上的應用倉庫,這會觸發構建並部署應用程式。
該應用程式包含以下元件:
- 後端:使用 Express.js 構建的 Node.js REST API,其資源端點使用 Prisma Client 處理針對 PostgreSQL 資料庫(例如託管在 Heroku 上)的資料庫操作。
- 前端:用於與 API 互動的靜態 HTML 頁面。

本指南的重點是展示如何使用 Prisma ORM 將專案部署到 Heroku。起點將是Prisma Heroku 示例,它包含一個帶有幾個預配置 REST 端點和一個簡單前端的 Express.js 伺服器。
注意:指南中的各種檢查點可讓你驗證操作步驟是否正確。
關於將 GraphQL 伺服器部署到 Heroku 的說明
雖然示例使用的是 REST,但相同的原則也適用於 GraphQL 伺服器,主要區別在於 GraphQL 伺服器通常只有一個 GraphQL API 端點,而不是像 REST 那樣為每個資源提供一個路由。
先決條件
- Heroku 賬戶。
- 已安裝 Heroku CLI。
- 已安裝 Node.js。
- 已安裝 PostgreSQL CLI
psql。
注意:Heroku 不提供免費計劃,因此需要提供賬單資訊。
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 遷移。
你將使用 Heroku 的釋出階段 來執行 prisma migrate deploy 命令,以便在應用程式啟動之前應用遷移。
要了解有關如何使用 Prisma Migrate 建立遷移的更多資訊,請查閱從零開始指南
1. 下載示例並安裝依賴項
開啟你的終端並導航到你選擇的位置。建立將儲存應用程式程式碼的目錄並下載示例程式碼
mkdir prisma-heroku
cd prisma-heroku
curl https://codeload.github.com/prisma/prisma-examples/tar.gz/latest | tar -xz --strip=3 prisma-examples-latest/deployment-platforms/heroku
檢查點:ls -1 應顯示
ls -1
Procfile
README.md
package.json
prisma
public
src
安裝依賴項
npm install
注意:
Procfile告訴 Heroku 啟動應用程式所需的命令(即npm start)以及在釋出階段執行的命令(即npx prisma migrate deploy)
2. 為應用程式建立 Git 倉庫
在上一步中,你下載了程式碼。在本步中,你將從程式碼建立一個倉庫,以便你可以將其推送到 Heroku 進行部署。
為此,在原始碼資料夾中執行 git init
git init
> Initialized empty Git repository in /Users/alice/prisma-heroku/.git/
要將 main 分支用作預設分支,請執行以下命令
git branch -M main
倉庫初始化後,新增並提交檔案
git add .
git commit -m 'Initial commit'
檢查點:git log -1 應顯示提交記錄
git log -1
commit 895534590fdd260acee6396e2e1c0438d1be7fed (HEAD -> main)
3. Heroku CLI 登入
確保你已使用 CLI 登入 Heroku
heroku login
這將允許你從終端部署到 Heroku。
檢查點:heroku auth:whoami 應顯示你的使用者名稱
heroku auth:whoami
> your-email
4. 建立 Heroku 應用
要將應用程式部署到 Heroku,你需要建立一個應用。你可以使用以下命令來完成:
heroku apps:create your-app-name
注意:請使用你選擇的唯一名稱,而不是
your-app-name。
檢查點:你應該會看到你的 Heroku 應用的 URL 和倉庫
heroku apps:create your-app-name
> Creating ⬢ your-app-name... done
> https://your-app-name.herokuapp.com/ | https://git.heroku.com/your-app-name.git
建立 Heroku 應用會將 Heroku 建立的 Git 遠端倉庫新增到你的本地倉庫。向此遠端倉庫推送提交將觸發部署。
檢查點:git remote -v 應顯示你的應用程式的 Heroku Git 遠端倉庫
heroku https://git.heroku.com/your-app-name.git (fetch)
heroku https://git.heroku.com/your-app-name.git (push)
如果你沒有看到 Heroku 遠端倉庫,請使用以下命令新增它
heroku git:remote --app your-app-name
5. 為你的應用程式新增 PostgreSQL 資料庫
Heroku 允許你為應用程式預置 PostgreSQL 資料庫。
使用以下命令建立資料庫
heroku addons:create heroku-postgresql:hobby-dev
檢查點:要驗證資料庫是否已建立,你應該看到以下內容
Creating heroku-postgresql:hobby-dev on ⬢ your-app-name... free
Database has been created and is available
! This database is empty. If upgrading, you can transfer
! data from another database with pg:copy
Created postgresql-parallel-73780 as DATABASE_URL
注意:當應用程式在 Heroku 上執行時,Heroku 會自動設定
DATABASE_URL環境變數。Prisma ORM 使用此環境變數,因為它在 Prisma schema (prisma/schema.prisma) 的 datasource 塊中透過env("DATABASE_URL")宣告。
6. 推送部署
透過將更改推送到 Heroku 應用倉庫來部署應用
git push heroku main
這將觸發構建並將你的應用程式部署到 Heroku。Heroku 還將執行 npx prisma migrate deploy 命令,該命令在部署應用之前執行遷移以建立資料庫 schema(如 Procfile 的 release 步驟中定義)。
檢查點:git push 將輸出構建和釋出階段的日誌,並顯示已部署應用的 URL
remote: -----> Launching...
remote: ! Release command declared: this new release will not be available until the command succeeds.
remote: Released v5
remote: https://your-app-name.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
remote: Running release command...
remote:
remote: Prisma schema loaded from prisma/schema.prisma
remote: Datasource "db": PostgreSQL database "your-db-name", schema "public" at "your-db-host.compute-1.amazonaws.com:5432"
remote:
remote: 1 migration found in prisma/migrations
remote:
remote: The following migration have been applied:
remote:
remote: migrations/
remote: └─ 20210310152103_init/
remote: └─ migration.sql
remote:
remote: All migrations have been successfully applied.
remote: Waiting for release.... done.
注意:Heroku 還會設定你的應用程式繫結的
PORT環境變數。
7. 測試你已部署的應用程式
你可以使用靜態前端透過預覽 URL 與你部署的 API 進行互動。
在瀏覽器中開啟預覽 URL,URL 應類似於:https://APP_NAME.herokuapp.com。你應該會看到以下內容:

這些按鈕允許你向 REST API 傳送請求並檢視響應
- 檢查 API 狀態:將呼叫 REST API 狀態端點,該端點返回
{"up":true}。 - 填充資料:將使用測試
user和post填充資料庫。返回建立的使用者。 - 載入動態:將載入資料庫中所有
users及其相關的profiles。
要深入瞭解 Prisma Client 的 API,請檢視 src/index.js 檔案中的路由處理程式。
你可以使用 heroku logs --tail 命令檢視應用程式的日誌
2020-07-07T14:39:07.396544+00:00 app[web.1]:
2020-07-07T14:39:07.396569+00:00 app[web.1]: > prisma-heroku@1.0.0 start /app
2020-07-07T14:39:07.396569+00:00 app[web.1]: > node src/index.js
2020-07-07T14:39:07.396570+00:00 app[web.1]:
2020-07-07T14:39:07.657505+00:00 app[web.1]: 🚀 Server ready at: https://:12516
2020-07-07T14:39:07.657526+00:00 app[web.1]: ⭐️ See sample requests: http://pris.ly/e/ts/rest-express#3-using-the-rest-api
2020-07-07T14:39:07.842546+00:00 heroku[web.1]: State changed from starting to up
Heroku 特定注意事項
本指南涉及一些與 Heroku 相關的實現細節,值得重申:
- 埠繫結:Web 伺服器繫結到埠以便能夠接受連線。部署到 Heroku 時,Heroku 會設定
PORT環境變數。請確保你繫結到process.env.PORT,以便你的應用程式部署後可以接受請求。一個常見模式是嘗試繫結process.env.PORT,並回退到預設埠,如下所示:
const PORT = process.env.PORT || 3000
const server = app.listen(PORT, () => {
console.log(`app running on port ${PORT}`)
})
- 資料庫 URL:作為 Heroku 預置過程的一部分,一個
DATABASE_URL配置變數會新增到你的應用配置中。它包含你的應用用於訪問資料庫的 URL。請確保你的schema.prisma檔案使用env("DATABASE_URL"),以便 Prisma Client 能夠成功連線到資料庫。
總結
恭喜!你已成功將使用 Prisma ORM 的 Node.js 應用部署到 Heroku。
你可以在此 GitHub 倉庫中找到示例的原始碼。
要深入瞭解 Prisma Client 的 API,請檢視 src/index.js 檔案中的路由處理程式。