首頁 > 資料庫 > mysql教程 > 在 Raspberry Pi 上使用 MySQL 和 Prisma 部署 Node.js 應用程式

在 Raspberry Pi 上使用 MySQL 和 Prisma 部署 Node.js 應用程式

Linda Hamilton
發布: 2025-01-06 04:06:38
原創
484 人瀏覽過

Deploy a Node.js Application Using MySQL and Prisma on a Raspberry Pi

部署應用程式變得越來越容易,有一系列免費和付費託管選項,例如 Render、AWS 和 DigitalOcean。然而,對於想要學習、實驗和部署應用程式而無需重複託管費用的開發人員來說,Raspberry Pi 提供了一個絕佳的替代方案。這款小巧但功能強大的裝置可讓您建立自己的基於 Linux 的伺服器來託管 Web 應用程式。

在本部落格中,我們將探索如何使用MySQL(Raspberry Pi 上的MariaDB)和Prisma ORM 部署TypeScript Node.js 應用程式一個樹莓派。此外,我們將設定 NGINX 進行反向代理,並使用 Ngrok 將應用程式公開到網路。讓我們開始吧!


工具概述

樹莓派

運行基於 Linux 的作業系統的低成本單板計算機。它非常適合為 IoT 或 Web 應用程式建立您自己的伺服器。

Node.js 和 TypeScript

Node.js 是在伺服器上執行 JavaScript 的執行時間環境,而 TypeScript 則為 JavaScript 新增了靜態類型,使程式碼庫更易於維護。

MySQL(Raspberry Pi 上的 MariaDB)

MariaDB 是一種流行的關聯式資料庫系統,是 MySQL 的兼容替代品,並且對於 Raspberry Pi 來說足夠輕量。

Prisma ORM

物件關聯映射 (ORM) 工具,可透過類型安全的查詢語言和架構遷移簡化資料庫互動。

NGINX

高效能 HTTP 伺服器和反向代理伺服器。它有助於將流量路由到您的 Node.js 應用程式。

恩格洛克

一種隧道工具,無需複雜的網路配置即可安全地將本地託管的應用程式公開到網路。


先決條件

  1. 一個正在運行的 Raspberry Pi - 確保 Raspberry Pi 上啟用了 SSH,並且您可以遠端存取它。
  2. Github 儲存庫 - 您的 Node.js TypeScript 應用程式應託管在 GitHub 儲存庫中以便於部署。
  3. Ngrok 帳戶 - 在 Ngrok 上建立免費帳戶以獲得授權令牌,以便將您的 Raspberry Pi 應用程式公開到網路。

設定樹莓派

  1. 安裝作業系統

    使用 Raspberry Pi OS 等作業系統設定您的 Raspberry Pi。使用 Raspberry Pi Imager 尋找與您的 Raspberry Pi 相容的其他作業系統。

  2. 找 IP 位址

    使用 Angry IP Scanner 等工具來發現 Raspberry Pi 的 IP 位址。確保 Raspberry Pi 連接到與本機相同的網路。

  3. 檢查樹莓派狀態

    ping <IP_ADDRESS_OF_RPI>
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  4. 透過 SSH 連接到 Raspberry Pi

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    替換 ;使用您的 Raspberry Pi 的使用者名稱和 與 IP 位址,然後輸入密碼。

  5. 更新系統

    sudo apt update && sudo apt upgrade
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  6. 安裝 Git

    檢查git是否安裝。如果沒有,請執行以下命令安裝 git

    sudo apt install git
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

安裝 Node.js

要安裝 Node js,我們將使用 nvm(節點版本管理器)。它允許您透過命令列快速安裝和使用不同版本的node。

  1. 安裝 NVM

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  2. 驗證安裝

    nvm --version
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  3. 安裝 Node.js 的最新 LTS 版本

    nvm install --lts
    
    登入後複製
    登入後複製
    登入後複製
  4. 驗證 Node.js 和 npm 安裝

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
    登入後複製
    登入後複製
    登入後複製

設定 MySQL (MariaDB)

對於 Raspberry Pi 作業系統,我們將安裝 MariaDB。

  1. 安裝 MariaDB SQL Server

    sudo apt install mariadb-server
    
    登入後複製
    登入後複製
    登入後複製
  2. 安全的 MariaDB 安裝

    sudo mysql_secure_installation
    
    登入後複製
    登入後複製
    登入後複製

    按照提示操作以保護您的資料庫。

    • 輸入目前 root 密碼: - 當要求輸入 root 使用者的目前密碼時按 Enter(因為尚未設定)。
    • 設定 root 密碼: - 當提示設定 root 密碼時鍵入 n(我們稍後會設定)。
    • 刪除匿名使用者: - 輸入 Y 刪除匿名使用者並提高安全性。 (出於測試目的,您可以輸入 n 保留匿名使用者。)
    • 禁止 root 遠端登入: - 輸入 n 以允許 root 遠端登入(可選,但安全性較低)。
    • 刪除測試資料庫: - 輸入 y 刪除測試資料庫並存取它。 (如果你想保留它,請輸入 n。)
  3. 登入 MariaDB 用戶端

    sudo mysql
    
    登入後複製
    登入後複製
    登入後複製
  4. 為 MariaDB 設定 Root 密碼

    首先,我們要告訴資料庫伺服器重新載入授權表。

    MariaDB [(none)]> FLUSH PRIVILEGES;
    
    登入後複製
    登入後複製
    登入後複製

    使用下列查詢來變更 root 密碼。

    MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
    
    登入後複製
    登入後複製

    替換使用您自己的密碼。

    使用 exit 指令退出 MariaDB CLI。

    MariaDB [(none)]> exit;
    Bye
    
    登入後複製
    登入後複製
  5. 使用 root 使用者登入 MariaDB 用戶端

    ping <IP_ADDRESS_OF_RPI>
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    輸入root用戶的密碼。

設定資料庫和用戶

讓我們建立一個新的資料庫和使用者。我們將向新用戶授予我們創建的新資料庫的所有權限。

  1. 建立資料庫

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  2. 使用密碼建立新使用者

    sudo apt update && sudo apt upgrade
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  3. 授予建立的新使用者權限

    sudo apt install git
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  4. 刷新權限表

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  5. 使用 exit 指令退出 mysql 用戶端。

  6. 使用新使用者登入

    nvm --version
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    輸入您在建立使用者時使用的密碼。

  7. 驗證使用者是否可以列出資料庫

    nvm install --lts
    
    登入後複製
    登入後複製
    登入後複製

就是這樣!我們將在我們的應用程式中使用此資料庫和使用者。


設定您的 Node.js 應用程式

  1. 複製您的 Github 儲存庫

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
    登入後複製
    登入後複製
    登入後複製
  2. 導覽至您的專案儲存庫

    sudo apt install mariadb-server
    
    登入後複製
    登入後複製
    登入後複製
  3. 安裝專案依賴項

    sudo mysql_secure_installation
    
    登入後複製
    登入後複製
    登入後複製
  4. 編譯 TypeScript 程式碼

    sudo mysql
    
    登入後複製
    登入後複製
    登入後複製

確保您已在 tsconfig.json 檔案中配置了 outDir 屬性。這指定了將產生已編譯的 JavaScript 程式碼的目錄。預設情況下,它通常設定為 dist,但您可以根據您的專案結構對其進行自訂。

設定環境變數(可選)

如果您的專案使用環境變量,您需要在 Raspberry Pi 上設定它們。您可以在專案根目錄下建立一個 .env 檔案來儲存所有環境變數。

  1. 建立 .env 檔案

    MariaDB [(none)]> FLUSH PRIVILEGES;
    
    登入後複製
    登入後複製
    登入後複製
  2. 更新 .env 檔案

    MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
    
    登入後複製
    登入後複製
  3. 輸入您的環境變數

    MariaDB [(none)]> exit;
    Bye
    
    登入後複製
    登入後複製

    替換、和 與您在前面步驟中建立的那個一起使用。

    按 Ctrl O 儲存文件,然後按 Enter,然後使用 Ctrl X 退出編輯器。

遷移 Prisma 架構

如果您使用 Prisma,所有模式檔案將位於 prisma/schema 目錄中。我們現在將這些模式部署到資料庫。

執行以下指令

sudo mysql -u root -p
登入後複製

此指令將使用 .env 檔案中提供的 DATABASE_URL 將架構部署到資料庫。您可以透過登入MySQL客戶端並使用命令SHOW TABLES來驗證部署;列出所有表。


設定 PM2

PM2 是 Node.js 應用程式的生產流程管理器,有助於管理和保持應用程式在線。安裝 PM2 來管理您的 Node.js 應用程式。

ping <IP_ADDRESS_OF_RPI>
登入後複製
登入後複製
登入後複製
登入後複製

配置 NGINX

  1. 安裝 NGINX

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  2. 建立網站設定

    sudo apt update && sudo apt upgrade
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  3. 加入以下程式碼

    sudo apt install git
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    以下是每個部分的細分:

    listen 80; 該指令告訴 NGINX 監聽連接埠 80,這是 HTTP 流量的預設連接埠。

    server_name ; 這指定您的 Raspberry Pi 的網域或 IP 位址。替換為您的 Raspberry Pi 的實際 IP 位址。 NGINX 將回應傳送到此位址的請求。

    location / { ... } 此區塊定義 NGINX 應如何處理根 URL (/) 的請求。本質上,這告訴 NGINX 每當向根發出請求時,都應該將其轉發到在指定連接埠上執行的後端(您的 Node.js 應用程式)。

    proxy_pass http://localhost:YOUR_NODE_JS_PORT; 這是將傳入請求轉送到 Node.js 應用程式的關鍵行。將 YOUR_NODE_JS_PORT 替換為 Node.js 應用程式運行的實際連接埠(例如 5000)。請求將傳送到在同一台電腦 (localhost) 上執行的 Node.js 應用程式。

    proxy_http_version 1.1; 這將代理連接的 HTTP 版本設為 1.1,以確保更好地處理 WebSocket 等某些功能。

    proxy_set_header Upgrade $http_upgrade;此標頭允許升級 WebSocket 連接,這對於即時應用程式很重要。

    proxy_set_header Connection 'upgrade'; 此標頭與 Upgrade 標頭一起使用來管理 WebSocket 連接,確保連接正確地從 HTTP 升級到 WebSocket。

    proxy_set_header Host $host; 這會將原始 Host 標頭從客戶端請求傳遞到後端伺服器。這對於依賴原始主機標頭的應用程式非常有用(例如,用於路由或虛擬託管)。

    proxy_cache_bypass $http_upgrade; 這可確保 WebSocket 連線繞過任何快取機制,從而允許即時通訊在不受快取幹擾的情況下進行。

    按 Ctrl O 儲存文件,然後按 Enter,然後使用 Ctrl X 退出編輯器。

  4. 啟用網站設定

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  5. 測試 NGINX 配置

    nvm --version
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    如果測試成功,您將看到以下內容:

    ping <IP_ADDRESS_OF_RPI>
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  6. 重新啟動 NGINX 伺服器以套用變更

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製
  7. 檢查 NGINX 伺服器狀態

    sudo apt update && sudo apt upgrade
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

運行應用程式

  1. 導覽至您的專案

  2. 使用 PM2 啟動您的應用程式

    如果您在 package.json 中設定了腳本,請使用以下命令:

    sudo apt install git
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    或者,您可以使用 dist 目錄中的 index.js 檔案直接執行應用程式:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    您也可以使用以下指令檢查日誌:

    nvm --version
    
    登入後複製
    登入後複製
    登入後複製
    登入後複製

現在,透過在本機上的瀏覽器中輸入 Raspberry Pi 的 IP 位址來檢查您的應用程式。它應該有效。確保您的本機電腦和 Raspberry Pi 連接到同一網路;否則,它將無法運作。


使用 Ngrok 向世界展示您的應用程式

現在您已將應用程式部署到 Raspberry Pi,您只能從執行 Raspberry Pi 的相同網路存取該應用程式。為了將其公開到互聯網,我們需要使用連接埠轉送。

您可以使用路由器設定來設定連接埠轉發,但在本例中,我將使用 ngrok。 Ngrok 對於開發很有用,允許我們免費運行我們的應用程式以進行測試。

確保透過造訪 https://dashboard.ngrok.com/login 建立帳戶。您將需要身份驗證令牌才能在 Raspberry Pi 上設定 ngrok。

  1. 安裝 Ngrok

    nvm install --lts
    
    登入後複製
    登入後複製
    登入後複製
  2. 將您的驗證令牌新增至 ngrok 設定檔

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
    登入後複製
    登入後複製
    登入後複製
  3. 停用預設的 nginx 設定檔

    sudo apt install mariadb-server
    
    登入後複製
    登入後複製
    登入後複製
  4. 測試 NGINX 配置

    sudo mysql_secure_installation
    
    登入後複製
    登入後複製
    登入後複製
  5. 重新啟動 NGINX 伺服器以套用變更

    sudo mysql
    
    登入後複製
    登入後複製
    登入後複製
  6. 線上部署您的應用程式

    MariaDB [(none)]> FLUSH PRIVILEGES;
    
    登入後複製
    登入後複製
    登入後複製

    這應該提供類似 https://xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx.ngrok-free.app/ 的 URL,將流量轉送到您的 Node.js 應用程式。您可以從任何其他網路導航到此 URL 並存取您的應用程式。


概括

在本指南中,我們成功在 Raspberry Pi 上部署了帶有 MySQL 和 Prisma 的 TypeScript Node.js 應用程式。我們將 NGINX 配置為反向代理,並使用 Ngrok 使應用程式可以透過網際網路存取。透過此設置,您將擁有自己的經濟高效的自架開發伺服器。

這種方法非常適合學習和試驗全端應用程式部署,同時獲得伺服器管理的寶貴經驗。

如果您使用本指南部署應用程序,請告訴我 - 我很想聽聽您的體驗! ?

以上是在 Raspberry Pi 上使用 MySQL 和 Prisma 部署 Node.js 應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板