部署應用程式變得越來越容易,有一系列免費和付費託管選項,例如 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 應用程式。
恩格洛克
一種隧道工具,無需複雜的網路配置即可安全地將本地託管的應用程式公開到網路。
安裝作業系統
使用 Raspberry Pi OS 等作業系統設定您的 Raspberry Pi。使用 Raspberry Pi Imager 尋找與您的 Raspberry Pi 相容的其他作業系統。
找 IP 位址
使用 Angry IP Scanner 等工具來發現 Raspberry Pi 的 IP 位址。確保 Raspberry Pi 連接到與本機相同的網路。
檢查樹莓派狀態
ping <IP_ADDRESS_OF_RPI>
透過 SSH 連接到 Raspberry Pi
ssh <username>@<IP_ADDRESS_OF_RPI>
替換 ;使用您的 Raspberry Pi 的使用者名稱和
更新系統
sudo apt update && sudo apt upgrade
安裝 Git
檢查git是否安裝。如果沒有,請執行以下命令安裝 git
sudo apt install git
要安裝 Node js,我們將使用 nvm(節點版本管理器)。它允許您透過命令列快速安裝和使用不同版本的node。
安裝 NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
驗證安裝
nvm --version
安裝 Node.js 的最新 LTS 版本
nvm install --lts
驗證 Node.js 和 npm 安裝
node --version # v22.12.0 npm --version # 10.9.0
對於 Raspberry Pi 作業系統,我們將安裝 MariaDB。
安裝 MariaDB SQL Server
sudo apt install mariadb-server
安全的 MariaDB 安裝
sudo mysql_secure_installation
按照提示操作以保護您的資料庫。
登入 MariaDB 用戶端
sudo mysql
為 MariaDB 設定 Root 密碼
首先,我們要告訴資料庫伺服器重新載入授權表。
MariaDB [(none)]> FLUSH PRIVILEGES;
使用下列查詢來變更 root 密碼。
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
替換使用您自己的密碼。
使用 exit 指令退出 MariaDB CLI。
MariaDB [(none)]> exit; Bye
使用 root 使用者登入 MariaDB 用戶端
ping <IP_ADDRESS_OF_RPI>
輸入root用戶的密碼。
讓我們建立一個新的資料庫和使用者。我們將向新用戶授予我們創建的新資料庫的所有權限。
建立資料庫
ssh <username>@<IP_ADDRESS_OF_RPI>
使用密碼建立新使用者
sudo apt update && sudo apt upgrade
授予建立的新使用者權限
sudo apt install git
刷新權限表
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
使用 exit 指令退出 mysql 用戶端。
使用新使用者登入
nvm --version
輸入您在建立使用者時使用的密碼。
驗證使用者是否可以列出資料庫
nvm install --lts
就是這樣!我們將在我們的應用程式中使用此資料庫和使用者。
複製您的 Github 儲存庫
node --version # v22.12.0 npm --version # 10.9.0
導覽至您的專案儲存庫
sudo apt install mariadb-server
安裝專案依賴項
sudo mysql_secure_installation
編譯 TypeScript 程式碼
sudo mysql
確保您已在 tsconfig.json 檔案中配置了 outDir 屬性。這指定了將產生已編譯的 JavaScript 程式碼的目錄。預設情況下,它通常設定為 dist,但您可以根據您的專案結構對其進行自訂。
如果您的專案使用環境變量,您需要在 Raspberry Pi 上設定它們。您可以在專案根目錄下建立一個 .env 檔案來儲存所有環境變數。
建立 .env 檔案
MariaDB [(none)]> FLUSH PRIVILEGES;
更新 .env 檔案
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
輸入您的環境變數
MariaDB [(none)]> exit; Bye
替換、和
按 Ctrl O 儲存文件,然後按 Enter,然後使用 Ctrl X 退出編輯器。
如果您使用 Prisma,所有模式檔案將位於 prisma/schema 目錄中。我們現在將這些模式部署到資料庫。
執行以下指令
sudo mysql -u root -p
此指令將使用 .env 檔案中提供的 DATABASE_URL 將架構部署到資料庫。您可以透過登入MySQL客戶端並使用命令SHOW TABLES來驗證部署;列出所有表。
PM2 是 Node.js 應用程式的生產流程管理器,有助於管理和保持應用程式在線。安裝 PM2 來管理您的 Node.js 應用程式。
ping <IP_ADDRESS_OF_RPI>
安裝 NGINX
ssh <username>@<IP_ADDRESS_OF_RPI>
建立網站設定
sudo apt update && sudo apt upgrade
加入以下程式碼
sudo apt install git
以下是每個部分的細分:
listen 80; 該指令告訴 NGINX 監聽連接埠 80,這是 HTTP 流量的預設連接埠。
server_name
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 退出編輯器。
啟用網站設定
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
測試 NGINX 配置
nvm --version
如果測試成功,您將看到以下內容:
ping <IP_ADDRESS_OF_RPI>
重新啟動 NGINX 伺服器以套用變更
ssh <username>@<IP_ADDRESS_OF_RPI>
檢查 NGINX 伺服器狀態
sudo apt update && sudo apt upgrade
導覽至您的專案
使用 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 連接到同一網路;否則,它將無法運作。
現在您已將應用程式部署到 Raspberry Pi,您只能從執行 Raspberry Pi 的相同網路存取該應用程式。為了將其公開到互聯網,我們需要使用連接埠轉送。
您可以使用路由器設定來設定連接埠轉發,但在本例中,我將使用 ngrok。 Ngrok 對於開發很有用,允許我們免費運行我們的應用程式以進行測試。
確保透過造訪 https://dashboard.ngrok.com/login 建立帳戶。您將需要身份驗證令牌才能在 Raspberry Pi 上設定 ngrok。
安裝 Ngrok
nvm install --lts
將您的驗證令牌新增至 ngrok 設定檔
node --version # v22.12.0 npm --version # 10.9.0
停用預設的 nginx 設定檔
sudo apt install mariadb-server
測試 NGINX 配置
sudo mysql_secure_installation
重新啟動 NGINX 伺服器以套用變更
sudo mysql
線上部署您的應用程式
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中文網其他相關文章!