免费部署您的 Node.js 后端

Deploy Your Node.js Backend for Free
Deploy Your Node.js Backend for Free

部署应用程序后端可以让您的目标用户访问您的应用程序。但是,如果没有适当的知识和工具,从本地主机到云的过程可能会很困难。

在本文中,您将了解如何在各种平台上部署 Node.js 后端,每个平台都有免费层级或免费信用点数,让您可以先探索其平台,而无需支付费用。

1.Back4app 容器

Back4app是一个平台即服务(PaaS)云平台,通过直观的用户界面、专用 CLI 工具和人工智能代理,您可以创建和托管各种堆栈的网络应用程序。

该平台提供各种服务,包括一个名为 Back4app Containers 的容器即服务(CaaS)平台。

Back4app 容器是 Back4app 提供的 CaaS 服务,可让您使用 Docker 容器管理和部署网络应用程序。

Back4app 容器提供实时应用程序监控功能,包括 CPU、RAM、Bandwith 和应用程序日志等关键指标,帮助您识别瓶颈并优化应用程序性能。

它还提供自动部署功能,更新时零停机时间。它们通过确保在部署新提交或更改容器配置时,新容器已准备就绪,从而避免在部署过程中出现任何服务中断。

使用 Back4app 容器进行部署的过程非常简单,只需将应用程序的 GitHub 资源库(包括 Dockerfile)连接到 Back4app Github 应用程序,添加环境变量,然后点击部署按钮即可。

如何在 Back4app 容器上部署 Node.js 后端?

在 Back4app 容器上部署 Node.js 应用程序,您需要

登录 Back4app 账户并在 GitHub 上安装 GitHub 应用程序后,授予 Back4app 应用程序访问要部署的仓库的权限。

确保您的版本库包含一个 Dockerfile;下面是一个示例 Dockerfile,您可以将其用于 Node.js 应用程序:

# Specify base image
FROM node:18-alpine

# Specify working directory
WORKDIR /app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy source code
COPY . .

# Expose port 8080
EXPOSE 8080

# Run the app
CMD ["npm", "start"]

接下来,点击屏幕右上角的 “NEW APP “按钮,创建一个新的 Back4app 应用程序。然后,选择 “容器即服务“选项,如下图所示。

在 Back4app 上创建新应用程序

从授予 Back4app GitHub 应用程序访问权限的应用程序列表中选择要部署的应用程序。

选择 GitHub 仓库

填写与应用程序相关的环境变量,然后单击 “创建应用程序“按钮。

填写环境变量 Back4app

单击 “创建应用程序“按钮将启动部署过程,并显示实时部署日志,帮助您监控部署过程。

如果在部署过程中出现错误,您可以让 Back4app AI 代理分析日志中的错误并提供可能的解决方案。或者,您也可以查阅Back4app 的故障排除指南

应用程序部署完成后,您可以通过仪表板左上角的实时 URL 进行访问。

部署 Back4app 容器

Back4app 容器的免费层为您提供 0.25 CPU、256 MB 内存和 100GB 传输,非常适合开发和学习。如果是生产应用程序,最好升级到现有的付费计划

2.Render

Render 是一个云平台,为部署包括 Node.js 在内的各种开发堆栈的网络应用程序提供平台即服务(PaaS)解决方案。

有了Render功能,您的服务可根据 CPU 和/或内存的平均使用情况进行增减,从而无需预测或过度配置服务来满足高流量需求。

Render 还支持零停机时间部署,即使在构建出现问题时,也能确保应用程序永不停机。

为此,它在每次部署新版本应用程序时都会进行健康检查,只有在新版本通过健康检查时才会替换旧版本。

Render 还包括许多功能,其中一些包括预览环境、专用 REST API、持久磁盘、专用网络等。

在 Render 上部署应用程序需要将 GitHub/GitLab 账户连接到平台,并配置部署细节,包括应用程序的环境变量。

如何在 Render 上部署 Node.js 后端

要在 Render 上部署应用程序,您需要一个有效账户;如果您没有账户,可以免费注册

登录您的账户并导航至仪表板。在仪表板上单击 “网络服务“。

创建新的网络服务

接下来,系统会要求你将 GitHub/GitLab 账户连接到 Render 或提供一个公共 Git 仓库。

在 Render 上连接 GitHub/GitLab

连接 GitHub 账户并选择要部署的版本库后,系统会引导你进入一个配置表单,要求你输入应用程序名称、构建命令、环境变量等详细信息。

配置渲染

填写所需详细信息并点击 “创建 Web 服务“按钮。这将启动部署流程,并带您进入一个屏幕,在这里您可以实时监控部署状态和应用程序日志。

渲染部署日志

如果在部署过程中出现任何错误,您可以从部署日志中分析错误并排除故障,以便成功部署。

Render 的免费计划为您的网络服务提供 512 MB 内存和 0.1 CPU。如果您的应用程序需要更多资源,您可以考虑他们的付费计划。

3.Fly

Fly是一个提供全球应用交付网络的云平台。

通过利用分布式服务器网络,您可以在全球用户附近部署和运行应用程序,从而大大减少延迟并提高服务器性能。

Fly 提供被称为 “Fly Machines “的全 Linux 微型虚拟机。Fly 机器的启动时间相对较短,约为 300 毫秒。您还可以在机器休眠时暂停其运行,确保您只需为所使用的服务付费。

在 Fly 上部署应用程序只需使用其专用 CLI 工具运行几条命令即可。

如何Fly部署 Node.js 后端?

要在 Fly 上部署 Node.js 应用程序,您需要

  • Fly 账户,如果您没有,可以免费注册
  • 在本地计算机上安装的flyctl命令行工具。

如果系统中没有安装flyctlCLI 工具,可以使用下面的命令进行安装:

#macOS/Linux
curl -L https://fly.io/install.sh | sh

#windows
pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"

接下来,运行下面的命令登录 Fly 账户:

fly auth login

运行上述命令将打开默认浏览器,并提示您登录 Fly 账户。

登录成功后,导航到要部署的应用程序目录,然后运行下面的命令:

fly launch

运行上述命令后,Fly 会自动检测到您正试图部署 Node.js 应用程序,并设置部署。

Fly CLI 工具

CLI 工具将显示应用程序配置,供您在部署应用程序前审批。如果您对配置感到满意,可以在提示符下回复“Y”,或者回复 “N”。

回复 “N“将打开浏览器并带您进入一个页面,您可以在该页面上配置您的应用程序,而不是使用 Fly 提供的默认配置,如下图所示。

飞行配置

不过,与本文介绍的其他选项不同,Fly 要求您在部署应用程序前添加银行卡信息。不过,在您使用的资源价值超过 5 美元之前,您不会被收取任何费用。

4. Amazon Web Services (AWS)

Amazon Web Services (AWS)是一家基础设施即服务(IaaS)提供商,通过互联网提供基本的计算基础设施组件。

AWS 允许您构建和管理虚拟化环境,而无需投资和维护物理硬件。

在其他云服务提供商中,AWS 拥有最多的功能,从计算和数据库等基础设施技术到人工智能和 ML 等新兴技术。

它也是目前最安全的云计算环境,由一套深度云安全工具提供支持,具有 300 多种安全、合规性和治理服务和功能,并支持 143 种安全标准和合规性认证。

此外,AWS 是一个成熟的平台,在可靠性、安全性和性能方面有着良好的记录(17 年)。

不过,在 AWS 上部署应用程序要比在 Back4app 和 Render 等其他平台上复杂得多。

您可以通过多种方式实现这一目标;不过,本教程将介绍最常用的亚马逊弹性计算云(Amazon EC2)。

如何在 AWS 上部署 Node.js 后端?

EC2 是亚马逊提供的一项网络服务,允许您在云中租用虚拟服务器(称为实例)。

要创建 EC2 实例,您需要一个 AWS 账户;如果没有,可以免费注册

登录亚马逊账户后,创建 EC2 实例(您可以跳过上面链接文章中的最后一步,该步骤要求您使用 SSH 连接到 EC2 实例)。

您可以在 EC2 控制面板的 “实例 “下查看新创建的实例。

AWS EC2 实例

接下来,使用 EC2 实例控制台连接到EC2 实例。按照上面链接的说明中的步骤操作后,浏览器中应该会打开一个网络终端。

AWS EC2 控制台

然后,运行以下命令更改为 root 用户:

sudo su -

运行上述命令会将用户上下文切换为具有高级权限的 root 用户。

该命令由表示超级用户功能的 “sudo”、表示用户切换的 “su “和连字符(”-“)组成,可确保加载 root 用户的环境变量和配置。

接下来,运行下面的命令安装节点版本管理器(NVM):

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

接下来,在当前终端会话中运行以下命令激活 NVM:

. ~/.nvm/nvm.sh

然后,运行以下命令使用 NVM 安装 Node.js:

nvm install node

接下来,运行下面的命令安装 Git:

sudo yum update
sudo yum install git

您可以通过运行以下命令确认 Node.js 和 Git 已成功安装到 EC2 实例:

node -v && git -v

如果安装成功,控制台上就会显示版本号,如下图所示。

成功安装 Git 和 Node.js

接下来,将GitHub SSH 密钥连接到 EC2 实例。成功配置并添加 SSH 密钥后,运行下面的命令将仓库克隆到 EC2 实例中:

git clone <YOUR_APPLICATION_URL>

上述命令将把应用程序克隆到 EC2 实例中。

AWS:添加 github ssh

cd进入 EC2 上的应用程序目录,运行以下命令安装所有项目依赖项。

npm install

接下来,运行以下命令添加环境变量:

nano .env

上面的命令将创建并打开一个空的.env文件,复制你的环境变量并粘贴到文件中,然后按control + X,再按Y保存并关闭文件。

最后,运行应用程序的启动脚本,通常应使用下面的命令:

npm start

运行上述命令即可启动应用程序。您可以使用公共 DNS 地址访问已部署的应用程序,您可以在实例仪表板上找到该地址。

AWS EC2 实例的免费层为运行 Linux、RHEL 或 SLES 的 t2.micro 或 t3.micro 实例提供每月 750 小时的服务,具体取决于地区。

同样,对于 Windows 实例,它根据地区为 t2.micro 或 t3.micro 实例提供每月 750 小时的服务。

此外,无论实例类型如何,都包括每月 750 小时的公共 IPv4 地址。

不过,免费层级仅适用于 AWS 新客户,有效期为 AWS 注册日期后的 12 个月。

5. DigitalOcean

DigitalOcean是一个基础设施即服务(IaaS)平台,提供对支持应用程序的底层虚拟机的访问权限,允许您配置磁盘空间、分配内存和设置网络。

DigitalOcean 提供各种云计算产品,如液滴(Linux 虚拟机)。除液滴外,他们还提供托管的 Kubernetes 服务和无服务器功能。

DigitalOcean 还通过云防火墙、负载平衡器、虚拟私有云、浮动 IP、DNS、IPv6 和 DDoS 保护提供网络安全。

与其他 IaaS 选项相比,在 DigitalOcean 上部署 Node.js 应用程序的过程相对简单。

它包括创建 Droplet、配置 Droplet、设置虚拟 Linux 机器和反向代理,以满足您的需求。

在 DigitalOcean Droplet 上部署 Node.js 后端?

在该平台上部署 Node.js 应用程序需要一个 DigitalOcean 账户;如果没有,可以免费注册

接下来,登录并创建一个新项目(或使用现有项目)。

创建新项目 DigitalOcean

在项目仪表板上,点击屏幕右上角的 “创建“下拉菜单,然后选择 “液滴“来创建一个新的液滴。

创建新液滴

接下来,选择离您最近的部署区域来部署您的液滴。

接下来,选择 “Ubuntu “操作系统作为镜像,并选择 “Basic “作为您的软件包类型。

接下来,选择您喜欢的 CPU 选项。

然后,选择 “密码 “作为身份验证方法。或者,也可以选择 SSH 作为身份验证方法

最后,选择 “1 “作为您的液滴编号,并为其命名。

填写所需详细信息后,点击 “创建 Droplet“按钮。这将重定向到您的仪表板。

在仪表板上,选择刚刚创建的液滴,然后启动液滴控制台液滴,如下图所示。

启动液滴控制台

启动液滴控制台将在浏览器上打开一个 Ubuntu 网络终端,如下图所示。

DigitalOcean Droplet 控制台

接下来,运行下面的命令安装 Node.js 安装脚本:

curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -

然后,运行以下命令安装 Node.js:

apt-get install nodejs -y

接下来,使用下面的命令克隆你的 GitHub 仓库:

git clone <YOUR_GITHUB_REPOSITORY_LINK>

运行以下命令安装项目依赖项:

npm install

接下来,运行以下命令添加环境变量:

nano .env

上面的命令将创建并打开一个空的.env文件,复制你的环境变量并粘贴到文件中,然后按control + X,再按Y保存并关闭文件。

接下来,安装 PM2 以保持服务器在后台运行:

sudo npm i pm2 -g

然后,运行以下命令用 PM2 启动服务器:

pm2 start main.js

接下来,运行下面的命令,确保每次应用程序重启时服务器都会重启:

pm2 startup ubuntu

现在,您的应用程序正在运行,并监听您的 droplet(localhost)。为使其公开可用,您需要将 Nginx 设置为反向代理。

运行以下命令安装 Nginx:

sudo apt install nginx

在使用 Nginx 之前,必须调整 Ubuntu ufw(不复杂防火墙),以确保应用程序的安全,并确保只有经过授权的流量才能到达网络服务器。

运行以下命令启用 ufw:

ufw enable

然后,运行下面的命令允许 SSH、HTTP 和 HTTPS:

ufw allow ssh && ufw allow http && ufw allow https

上述命令将启用 Ubuntu 服务器上的防火墙 (UFW),允许 22 端口(SSH)、80 端口(HTTP)和 443 端口(HTTPS)的传入连接。

接下来,运行下面的命令打开默认的 Nginx 配置文件:

sudo nano /etc/nginx/sites-available/default

在配置文件中找到位置对象,并用下面的代码块替换:

location / {
    try_files $uri $uri/ =404;
    proxy_pass http://localhost:5050;#Replace with the port your app is running on
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

注意:对于proxy_pass,您可以用应用程序运行的任何端口来替换该值。

关闭并保存文件(control+X,Y,ENTER)。用上面的代码块编辑配置文件,设置反向代理,这样当你向 80 端口(HTTP)发出请求时,运行在 5050 端口(或默认端口)上的应用程序就会处理这些请求。

接下来,运行下面的命令测试 Nginx 配置文件是否设置正确。

sudo nginx -t

如果配置文件设置正确,就会得到下图所示的响应。

Nginx 测试

最后,运行下面的命令重启 Nginx,确保对配置文件的更改生效:

sudo service nginx restart

现在,您可以使用 Droplet 的公共 IPv4 地址向应用程序发出请求。

DigitalOcean 的免费层为新用户提供 200 美元的信用点数,供其使用所有可用服务。

比较部署选项

本文介绍了 Node.js 应用程序的五种部署选项。下面是所有平台的比较表。

平台类别开发工具免费层级资源付款信息
Back4app 容器PaaSDocker、GitHub 应用程序、Back4app 人工智能代理。– 0.25 CPU
– 256 MB 内存
– 100GB 传输速率
不需要
RenderPaaSGitHub/GitLab 应用程序,公共存储库链接– 512 MB 内存
– 0.1 CPU
不需要
FlyPaaSFly CLI 工具价值 5 美元的资源/使用需要
Amazon Web Services (AWS)IaaSAWS EC2 实例– Linux、RHEL 或 SLES t2.micro 或 t3.micro 实例每月 750 小时。
– Windows t2.micro 或 t3.micro 实例(视地区而定)每月 750 小时。
– 公共 IPv4 地址每月 750 小时。
需要
DigitalOceanIaaSDigitalOcean Droplet为新用户提供 200 美元的免费点数。需要

总体而言,Back4app、Render 和 Fly 等 PaaS 平台最适合需要可扩展性、灵活性以及快速开发和部署周期的应用程序。

另一方面,DigitalOcean 和 AWS 等 IaaS 平台最适合需要对底层基础架构、定制配置和可扩展性进行更多控制的应用程序,而无需管理物理硬件。

结论

在本文中,您探索并学习了如何使用 Back4app 容器、Render、Fly、AWS 和 DigitalOcean 部署 Node.js 应用程序。

所讨论的每种方案都有其优势和利弊。就 PaaS 平台而言,部署过程更简单。

但是,您会失去对底层基础设施的大部分控制权。在 IaaS 平台上,部署过程比较复杂;但是,您可以完全控制底层基础设施,而无需物理服务器。

无论您最终选择哪种方案,您都需要购买并连接一个自定义域名,以便用户能够真正访问该域名

如果您喜欢这篇文章,请同时了解如何使用 PostgresSQL 数据库创建网络应用程序


Leave a reply

Your email address will not be published.