将 NodeJS 应用程序部署到 AWS 或 HEROKU
前提。
在 Heroku 上部署 NodeJS 应用
在 AWS 上部署 NodeJS
前提。
NodeJS 彻底革新了全球后端架构。Ryan Dahl 使服务器端 JavaScript 成为可能,进一步巩固了 JavaScript 作为当今 Web 不可或缺组成部分的地位。
从基层开始,初学者通常必须将他们的代码部署到生产服务器,例如用于 Hackathon 或一些自由职业。
Heroku和AWS是目前部署的最佳选择,它们的免费计划很好地满足了初次使用者的大部分需求。
然而,部署本身就是一个迷宫。Procfile、环境变量、代理设置、端口暴露,对于第一次尝试启动服务器的人来说,这简直是一场噩梦。
本文旨在帮助您部署 NodeJS 应用程序。
但更大的问题是部署在哪里?
Heroku 和 AWS 之间到底有什么区别?选择其中一种又有什么好处呢?
Heroku 与 AWS
Heroku 是基于容器的云平台产品(PaaS ),而 AWS 是一个提供IaaS、PaaS和SaaS 的安全云服务平台。
(基础设施/平台/软件即服务)
如果您是初学者,Heroku 是一个易于部署的解决方案。您无需担心基础设施和可扩展性。
AWS 一开始可能会非常复杂,但它能让你更好地控制网站的基础架构。所以,如果你是初学者,最好尝试 Heroku,而不是在 AWS 实例中配置那么多东西,因为 Heroku 可以为你提供一步到位的部署解决方案。
那么,我们开始吧,好吗?
在 Heroku 上部署 NodeJS 应用
我们将使用 Heroku CLI 进行部署。
从这里下载 Heroku CLI 。
成功安装 heroku cli 后运行以下命令:
heroku login
将目录更改为项目文件夹。
指定启动脚本
为了确定如何启动您的应用,Heroku 首先会查找 Procfile。如果 NodeJS 应用不存在 Procfile,我们将
尝试通过 package.json 中的启动脚本启动一个默认的 Web 进程。
Procfile 是什么?下文将详细介绍。
Web 进程类型中的命令必须绑定到 PORT 环境变量中指定的端口号。否则
,测功机将无法启动。
什么是测功机?
所有 Heroku 应用程序都在一组称为 dynos 的轻量级 Linux 容器中运行。
~ Heroku 开发中心
如果您在代码中对端口进行硬编码,部署将会失败。
确保在你的代码中使用 process.env.PORT。
添加 Procfile
什么是 Procfile?
Heroku 应用包含一个 Procfile,用于指定应用启动时执行的命令。您可以使用 Procfile 声明各种进程类型
~ Heroku开发中心
web
Procfile 是由某些关键字(例如或)定义的自定义命令列表worker
。
这些是每次应用启动时必须执行的步骤和命令。Heroku 会在不同的dynos
轻量级 Linux 容器中执行 Procfile 中的所有进程,这些容器彼此连接。
创建名为 Procfile(无扩展名)的文件并添加以下行。
web: node index.js
构建您的应用程序并在本地运行
- 在本地应用程序目录中运行“npm install”命令来安装您在 package.json 文件中声明的依赖项。
npm install
- 使用 Heroku 本地命令在本地启动您的应用程序,该命令作为 Heroku CLI 的一部分安装。
heroku local web
您的应用程序现在应该在http://localhost:5000/上运行。
将您的应用程序部署到 Heroku
将更改提交到 git 后,您可以将应用程序部署到 Heroku。
git add .
git commit -m "Added a Procfile."
heroku login
输入您的 Heroku 凭证。
...
$ heroku create
Creating arcane-lowlands-8408... done, stack is cedar
http://arcane-lowlands-8408.herokuapp.com/ | git@heroku.com:arcane-lowlands-8408.git
Git remote heroku added
git push heroku master
...
-----> Node.js app detected
...
-----> Launching... done
http://arcane-lowlands-8408.herokuapp.com deployed to Heroku
要在浏览器中打开该应用程序,请输入-
heroku open.
在 AWS 上部署 NodeJS
作为第一步,我们需要在 AWS 上创建一个 EC2 实例,并选择Amazon Linux 2作为服务器的操作系统,并通过 ssh 进入该实例。
成功 ssh 进入 EC2 实例后,我们需要按照以下步骤成功部署 NodeJS 应用程序。
- 安装 NodeJS 和 NPM
- 安装 Git 并使用您的项目文件克隆存储库。
- 安装所有依赖项
- 安装 pm2 以后台进程运行服务器,为 Ec2 实例配置安全组
步骤 1 - 安装 NodeJS 和 NPM
通过运行以下命令安装 NVM(Node 版本管理器)。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
在命令行中输入以下命令激活 nvm
. ~/.nvm/nvm.sh
使用 nvm 在命令行中输入以下内容来安装最新版本的 NodeJS。
nvm install node
安装 NodeJS 还会安装 Node 包管理器 (NPM),因此您可以根据需要安装其他模块。
通过在命令行中输入以下内容来测试 NodeJS 是否已安装并正确运行。
node -v
npm -v
步骤 2 - 安装 Git 并克隆存储库
要安装 Git,请在终端中运行以下命令
sudo yum install git
要验证 Git 是否在系统中正确安装,请运行以下命令。
git –version
运行以下命令来克隆存储库
git clone <repository link>
步骤 3 – 安装依赖项
将目录更改为克隆的 repo 文件夹并运行以下命令。
npm install
步骤 4 - 安装 PM2 并启动服务器
PM2 是一个守护进程管理器,可以帮助您管理和保持应用程序在线。
PM2 的入门非常简单,它以简单直观的 CLI 形式提供,可通过 NPM 安装。
守护进程(发音为 DEE-muhn)是一个持续运行的程序,其存在的目的是处理计算机系统预期接收的周期性服务请求。守护进程会根据需要将请求转发给其他程序(或进程)。
~ WhatIS.com
守护进程是作为后台运行的程序,无需用户通过终端或 GUI 进行交互。将 Node 应用作为守护进程运行,可让您从服务器上的 SSH 会话访问和执行其他进程,否则,您的 Node 进程将占用当前会话的终端。
要安装 pm2,请运行以下命令。
sudo npm install pm2 -g
要启动服务器运行:
sudo pm2 start build/index.js
删除 pm2 进程运行
sudo pm2 delete <index no of the process>
步骤 5 - 配置安全组
默认情况下,如果不配置 EC2 实例的入站流量配置,任何人都无法访问该应用程序。
快速解释
您的 EC2 专用的外部 IP 默认仅接收 SSH 请求。普通网页和 REST API 主要使用 TCP 协议进行数据传输。为了确保您的服务器安全,避免遭受 DDoS(分布式拒绝服务)攻击,并确保您的资产和数据安全无虞。
为了确保前端应用程序可以从我们的 NodeJS 应用程序发送请求并接收响应,我们需要通过更改 EC2 实例的安全设置将端口公开给传入的 TCP 连接。
要为 EC2 实例配置入站流量,请按照以下步骤操作:
-
选择 EC2 实例并单击描述部分中的安全组链接。
-
点击安全组将打开“安全组”部分。在这里,我们可以配置入站和出站流量属性。为了使我们的应用程序可以从任何地方访问,请点击“入站”选项卡。
-
点击“入站”选项卡中的“编辑”按钮,将打开“编辑入站规则”弹出窗口。默认情况下,它将显示 SSH 配置。
由于我们的应用程序将端口号配置为您所需的端口,因此我们需要添加一个新规则“自定义 TCP 规则”。
输入端口范围作为所需端口,并选择来源为“任意位置”。保存更改的规则后,它将允许我们从任何地方访问我们的应用程序。
就这样,伙计们!🎊 您已经成功学习了如何将 NodeJS 应用程序部署到生产环境中!
希望您觉得本文对您有所帮助。
欢迎访问我们的网站了解更多信息,并关注我们的平台:
也不要忘记点赞和评论。
在那之前,
请保持安全,愿源头与你同在!
本文由