部署應用程式變得越來越容易,有一系列免費和付費託管選項,例如 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 - 確保 Raspberry Pi 上啟用了 SSH,並且您可以遠端存取它。
- Github 儲存庫 - 您的 Node.js TypeScript 應用程式應託管在 GitHub 儲存庫中以便於部署。
- Ngrok 帳戶 - 在 Ngrok 上建立免費帳戶以獲得授權令牌,以便將您的 Raspberry Pi 應用程式公開到網路。
設定樹莓派
-
安裝作業系統
使用 Raspberry Pi OS 等作業系統設定您的 Raspberry Pi。使用 Raspberry Pi Imager 尋找與您的 Raspberry Pi 相容的其他作業系統。
-
找 IP 位址
使用 Angry IP Scanner 等工具來發現 Raspberry Pi 的 IP 位址。確保 Raspberry Pi 連接到與本機相同的網路。
-
檢查樹莓派狀態
ping <ip_address_of_rpi> </ip_address_of_rpi>
-
透過 SSH 連接到 Raspberry Pi
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
替換 ;使用您的 Raspberry Pi 的使用者名稱和
與 IP 位址,然後輸入密碼。 -
更新系統
sudo apt update && sudo apt upgrade
-
安裝 Git
檢查git是否安裝。如果沒有,請執行以下命令安裝 git
sudo apt install git
安裝 Node.js
要安裝 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
設定 MySQL (MariaDB)
對於 Raspberry Pi 作業系統,我們將安裝 MariaDB。
-
安裝 MariaDB SQL Server
sudo apt install mariadb-server
-
安全的 MariaDB 安裝
sudo mysql_secure_installation
按照提示操作以保護您的資料庫。
- 輸入目前 root 密碼: - 當要求輸入 root 使用者的目前密碼時按 Enter(因為尚未設定)。
- 設定 root 密碼: - 當提示設定 root 密碼時鍵入 n(我們稍後會設定)。
- 刪除匿名使用者: - 輸入 Y 刪除匿名使用者並提高安全性。 (出於測試目的,您可以輸入 n 保留匿名使用者。)
- 禁止 root 遠端登入: - 輸入 n 以允許 root 遠端登入(可選,但安全性較低)。
- 刪除測試資料庫: - 輸入 y 刪除測試資料庫並存取它。 (如果你想保留它,請輸入 n。)
-
登入 MariaDB 用戶端
sudo mysql
-
為 MariaDB 設定 Root 密碼
首先,我們要告訴資料庫伺服器重新載入授權表。
MariaDB [(none)]> FLUSH PRIVILEGES;
使用下列查詢來變更 root 密碼。
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>'; </new_password>
替換使用您自己的密碼。
使用 exit 指令退出 MariaDB CLI。
MariaDB [(none)]> exit; Bye
-
使用 root 使用者登入 MariaDB 用戶端
ping <ip_address_of_rpi> </ip_address_of_rpi>
輸入root用戶的密碼。
設定資料庫和用戶
讓我們建立一個新的資料庫和使用者。我們將向新用戶授予我們創建的新資料庫的所有權限。
-
建立資料庫
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
使用密碼建立新使用者
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
就是這樣!我們將在我們的應用程式中使用此資料庫和使用者。
設定您的 Node.js 應用程式
-
複製您的 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>'; </new_password>
-
輸入您的環境變數
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> </ip_address_of_rpi>
配置 NGINX
-
安裝 NGINX
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
建立網站設定
sudo apt update && sudo apt upgrade
-
加入以下程式碼
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 退出編輯器。
-
啟用網站設定
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
-
測試 NGINX 配置
nvm --version
如果測試成功,您將看到以下內容:
ping <ip_address_of_rpi> </ip_address_of_rpi>
-
重新啟動 NGINX 伺服器以套用變更
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
檢查 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 連接到同一網路;否則,它將無法運作。
使用 Ngrok 向世界展示您的應用程式
現在您已將應用程式部署到 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中文網其他相關文章!

在MySQL中創建和管理用戶賬戶的步驟如下:1.創建用戶:使用CREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';2.分配權限:使用GRANTSELECT,INSERT,UPDATEONmydatabase.TO'newuser'@'localhost';3.修正權限錯誤:使用REVOKEALLPRIVILEGESONmydatabase.FROM'newuser'@'localhost';然後重新分配權限;4.優化權限:使用SHOWGRA

MySQL適合快速開發和中小型應用,Oracle適合大型企業和高可用性需求。 1)MySQL開源、易用,適用於Web應用和中小型企業。 2)Oracle功能強大,適合大型企業和政府機構。 3)MySQL支持多種存儲引擎,Oracle提供豐富的企業級功能。

MySQL相比其他關係型數據庫的劣勢包括:1.性能問題:在處理大規模數據時可能遇到瓶頸,PostgreSQL在復雜查詢和大數據處理上表現更優。 2.擴展性:水平擴展能力不如GoogleSpanner和AmazonAurora。 3.功能限制:在高級功能上不如PostgreSQL和Oracle,某些功能需要更多自定義代碼和維護。

MySQL支持四種JOIN類型:INNERJOIN、LEFTJOIN、RIGHTJOIN和FULLOUTERJOIN。 1.INNERJOIN用於匹配兩個表中的行並返回符合條件的結果。 2.LEFTJOIN返回左表的所有行,即使右表沒有匹配。 3.RIGHTJOIN與LEFTJOIN相反,返回右表的所有行。 4.FULLOUTERJOIN返回兩表中所有符合或不符合條件的行。

MySQL在高負載下的性能與其他RDBMS相比各有優劣。 1)MySQL通過InnoDB引擎和優化策略如索引、查詢緩存和分區表在高負載下表現良好。 2)PostgreSQL通過MVCC機制提供高效並發讀寫,Oracle和MicrosoftSQLServer則通過各自的優化策略提升性能。通過合理的配置和優化,MySQL可以在高負載環境中表現出色。

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具