部署到 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 schema 和遷移
此應用程式的 Prisma 元件在兩個檔案中
prisma/schema.prisma:此應用程式的資料模型。此示例定義了兩個模型:User和Post。此檔案的格式遵循 Prisma schema。prisma/migrations/<migration name>/migration.sql:在 PostgreSQL 資料庫中構建此 schema 的 SQL 命令。你可以透過執行prisma migrate dev自動生成此類遷移檔案。
Render Blueprint
render.yaml 檔案是 Render Blueprint。藍圖是 Render 的基礎設施即程式碼格式。你可以使用藍圖以程式設計方式在 Render 上建立和修改服務。
一個 render.yaml 檔案定義了藍圖將在 Render 上啟動的服務。在此 render.yaml 中,我們看到
- 使用 Node 執行時的 Web 服務:這是 Express 應用程式。
- PostgreSQL 資料庫:這是 Express 應用程式使用的資料庫。
此檔案的格式遵循藍圖規範。
Render 部署如何與 Prisma Migrate 協同工作
通常,你希望所有資料庫遷移都在 Web 應用程式啟動之前執行。否則,應用程式在查詢不包含預期表和行的資料庫時可能會遇到錯誤。
你可以在 Render 部署中使用“部署前命令”(Pre-Deploy Command)設定,在應用程式啟動之前執行任何命令,例如資料庫遷移。
有關部署前命令的更多詳細資訊,請參閱 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 setup guide] 並使用示例中的 render.yaml。
額外:填充資料庫
Prisma ORM 包含一個用於填充資料庫的框架。在我們的示例中,prisma/seed.js 定義了一些測試使用者和帖子。
要將這些使用者新增到資料庫,我們可以選擇
- 將填充指令碼新增到我們的部署前命令,或者
- 透過 SSH shell 在我們的伺服器上手動執行命令
方法 1:部署前命令
如果你手動部署了 Render 服務
- 在 Render 控制面板中,導航到你的 Web 服務。
- 選擇設定。
- 將部署前命令設定為:
npx prisma migrate deploy; npx prisma db seed
如果你使用藍圖部署了 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