部署应用程序变得越来越容易,有一系列免费和付费托管选项,例如 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中文网其他相关文章!