部署應用程式變得越來越容易,有一系列免費和付費託管選項,例如 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中文網其他相關文章!

mysqlviewshavelimitations:1)他們不使用Supportallsqloperations,限制DatamanipulationThroughViewSwithJoinsOrsubqueries.2)他們canimpactperformance,尤其是withcomplexcomplexclexeriesorlargedatasets.3)

porthusermanagementinmysqliscialforenhancingsEcurityAndsingsmenting效率databaseoperation.1)usecReateusertoAddusers,指定connectionsourcewith@'localhost'or@'%'。

mysqldoes notimposeahardlimitontriggers,butacticalfactorsdeterminetheireffactective:1)serverConfiguration impactactStriggerGermanagement; 2)複雜的TriggerSincreaseSySystemsystem load; 3)largertablesslowtriggerperfermance; 4)highConconcConcrencerCancancancancanceTigrignecentign; 5); 5)

Yes,it'ssafetostoreBLOBdatainMySQL,butconsiderthesefactors:1)StorageSpace:BLOBscanconsumesignificantspace,potentiallyincreasingcostsandslowingperformance.2)Performance:LargerrowsizesduetoBLOBsmayslowdownqueries.3)BackupandRecovery:Theseprocessescanbe

通過PHP網頁界面添加MySQL用戶可以使用MySQLi擴展。步驟如下:1.連接MySQL數據庫,使用MySQLi擴展。 2.創建用戶,使用CREATEUSER語句,並使用PASSWORD()函數加密密碼。 3.防止SQL注入,使用mysqli_real_escape_string()函數處理用戶輸入。 4.為新用戶分配權限,使用GRANT語句。

mysql'sblobissuitableForStoringBinaryDataWithInareLationalDatabase,而ilenosqloptionslikemongodb,redis和calablesolutionsolutionsolutionsoluntionsoluntionsolundortionsolunsonstructureddata.blobobobissimplobisslowdeperformberbutslowderformandperformancewithlararengedata;

toaddauserinmysql,使用:createUser'username'@'host'Indessify'password'; there'showtodoitsecurely:1)choosethehostcarecarefullytocon trolaccess.2)setResourcelimitswithoptionslikemax_queries_per_hour.3)usestrong,iniquepasswords.4)Enforcessl/tlsconnectionswith

toAvoidCommonMistakeswithStringDatatatPesInMysQl,CloseStringTypenuances,chosethirtightType,andManageEngencodingAndCollationsEttingSefectery.1)usecharforfixed lengengtrings,varchar forvariable-varchar forbariaible length,andtext/blobforlargerdataa.2 seterters seterters seterters


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

記事本++7.3.1
好用且免費的程式碼編輯器