在 CentOS 8|RHEL 8|Rocky Linux 8 上安装 Node.js 18
我们都知道 JavaScript 是一种一次性编写、随处运行的语言。 Node.js 是一种流行的编程语言,主要是因为它使用 JavaScript 作为主要应用程序来创建新应用程序。 JavaScript 是开发人员开发新 Web 应用程序的首选,这使得 NodeJS 在创建服务器端 Web 应用程序方面具有强大的框架。 NodeJS 基于 Chrome 的 V8 JavaScript 引擎构建,为开发人员提供跨平台、非阻塞(异步)、事件驱动的运行时环境,以使用 JavaScript 构建高度可扩展的服务器端应用程序。在本文中,我们将介绍 Node.js 18 LTS CentOS 8|RHEL 8|Rocky Linux 8 的安装。
NodeJS的特点和应用
NodeJS 的一些很酷的功能是:
- NodeJS 是一种单线程语言 – 它使用多个线程来执行异步代码
- NodeJS 本质上是非阻塞的 – 它在等待前一个任务的响应的同时执行堆栈中的下一个任务
- 它是异步且事件驱动的 – 所有 NodeJS API 都是异步的。 NodeJS 服务器从不等待 API 返回数据,而是使用事件机制来获取响应
- 软件包管理器 (NPM) 的可用性 – NPM 是最大的 NodeJS 软件存储库,拥有超过 700,000 个代码包。您可以使用 npm 包管理器在几秒钟内快速安装分布式包。下载公开发布的软件包无需注册或登录。
- NodeJS 是轻量级且可扩展的 – Node.js 的轻量级使其适合用于开发微服务。通过将整体应用程序分解为微服务,您还可以获得更好的灵活性,并且易于扩展。
- NodeJS 中没有缓冲 – 用 NodeJS 编写的应用程序从不缓冲任何数据。这意味着用户可以轻松地流式传输视频,而不会因数据以块的形式输出而中断。
NodeJS的主要应用在以下几个关键领域
- 创建 Web 应用程序 – 非常适合创建单页应用程序
- 创建聊天应用程序 – 使用 NodeJS,您可以构建任何复杂程度的实时聊天
- 创建流媒体应用程序 – 在创建用于听音乐或观看视频的流媒体服务时,这是一个不错的选择。
- 创建实时应用程序 – 用于项目管理、音频和视频会议以及协同浏览的应用程序。它能够处理大量 I/O 操作,使其适合创建实时应用程序。
- 浏览器游戏 – 使用 Node.js 开发游戏是另一个有吸引力的用例
- 创建 REST API、静态文件服务器、操作系统包装器、微控制器、无人机等
Node.js 常用的堆栈有:
- MERN 堆栈:MongoDB + ExpressJS + React+ NodeJS
- MEAN 堆栈:MongoDB + ExpressJS + Angular + NodeJS
- MEVN 堆栈:MongoDB + ExpressJS + VueJS+ NodeJS
Node.js 18 LTS 中有哪些新增功能?
截至本文更新日,Node.js 社区发布了新的主要版本 – Node.js 18 LTS。此版本将于 2022 年 10 月进入长期支持 (LTS)。对于此版本的 Node.js,我们将重点介绍一些新的有趣的功能。
- 它附带 V8 JavaScript 引擎版本 10.x – V8 JavaScript 引擎是用 C++ 编写的运行时环境
- OPENSSL 3 支持 - Node.js 18 是第一个通过 OpenSSL3 升级为 LTS 的主要版本
- 默认 DNS 解析 – NodeJS 现在遵循基于 dns 条目返回的顺序。它不再偏好 IPv4 而不是 IPv6
- 实验性获取 - 在 18 版本中为高级 API 添加了 WHATWG Fetch
- 实验测试运行程序 – 这提供了一种快速、简单的方法来运行测试套件,而无需任何额外的依赖项
- 流改进
- ECMAScript 模块改进
- 改进对 AbortController 和 AbortSignal 的支持
在 CentOS 8|RHEL 8|Rocky Linux 8 上安装 Node.js 18
按照下一节中的步骤在 CentOS 7/RHEL 7 Linux 系统上安装 Node.js 18 LTS。
选项 1) 使用 RPM 存储库在 CentOS 8|RHEL 8|Rocky Linux 8 上安装 Node.js 18
在 CentOS 8|RHEL 8|Rocky Linux 8 上添加 Node.js 18 LTS 存储库
curl --silent --location https://rpm.nodesource.com/setup_18.x | sudo bash -
存储库在文件 /etc/yum.repos.d/nodesource-el7.repo
中配置。配置存储库后,继续在 CentOS 7/RHEL 7 上安装 Node.js 18 LTS。
sudo yum -y install nodejs
对于正在为 Node.js 构建插件和扩展的用户,您可能需要安装开发工具
sudo yum -y install gcc-c++ make
如果需要,安装 Yarn 包管理器
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum -y install yarn
检查安装的 NodeJS 版本
$ node -v
v18.0.0
选项 2) 使用 NVM 在 CentOS 8|RHEL 8|Rocky Linux 8 上安装 Node.js 18
还可以使用 NVM 在 Linux 系统上安装 Node.js 软件包。 NVM(Node Version Manager)是每个 shell 调用的 Node.js 的版本管理器。它可以在任何兼容 POSIX 的 shell(bash、sh、dash、ksh、zsh)上运行。通过使用nvm,您可以通过命令行快速安装和使用不同版本的node。
由于基于 RHEL 的系统默认未安装 nvm,因此请运行以下命令进行安装。
curl -LsS https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | sh -s --
通过获取 shell rc 文件开始使用 nvm:
### Bash ###
$ source ~/.bashrc
### Zsh ###
$ source ~/.zshrc
执行的脚本将 nvm 存储库克隆到 ~/.nvm
,并尝试将下面代码段中的源代码行添加到正确的配置文件 (~/.bash_profile
, <代码>~/.zshrc、~/.profile
或 ~/.bashrc
)。
使用 ls-remote 列出 Node.js 的可用版本:
$ nvm ls-remote
....
v16.7.0
v16.8.0
v16.9.0
v16.9.1
.....
v17.9.0
v18.0.0
让我们安装 Node.js 18 版本:
$ nvm install 18
执行输出示例:
Downloading and installing node v18.0.0...
Downloading https://nodejs.org/dist/v18.0.0/node-v18.0.0-linux-x64.tar.xz...
############################################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
^[[Now using node v18.0.0 (npm v8.6.0)
Creating default alias: default -> 18 (-> v18.0.0)
您可以使用 nvm
命令安装其他 LTS 版本:
### Install Node.js 16 ###
$ nvm install 16
Downloading and installing node v16.14.2...
Downloading https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.xz...
############################################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v16.14.2 (npm v8.5.0)
### Install Node.js 14 ###
$ nvm install 14
Downloading and installing node v14.19.1...
Downloading https://nodejs.org/dist/v14.19.1/node-v14.19.1-linux-x64.tar.xz...
############################################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v14.19.1 (npm v6.14.16)
### Install Node.js 12 ###
$ nvm install 12
Downloading and installing node v12.22.12...
Downloading https://nodejs.org/dist/v12.22.12/node-v12.22.12-linux-x64.tar.xz...
############################################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v12.22.12 (npm v6.14.16)
列出已安装的 Node.js 版本:
$ nvm list
-> v12.22.12
v14.19.1
v16.14.2
v18.0.0
使用特定版本的 NodeJS
### Syntax ###
$ nvm use <version
# Examples
$ nvm use 18
Now using node v18.0.0 (npm v8.6.0)
$ nvm use 16
Now using node v16.14.2 (npm v8.5.0)
在 Node.js 上创建示例应用程序
安装 Node.js 18 LTS 后,让我们构建第一个 Web 服务器。创建一个名为 app.js
的文件
vi myapp.js
我的包含以下内容:
const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World, running on NodeJS 18');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
现在,使用以下命令运行 Node Web 服务器:
node myapp.js
访问http://localhost_or_serverip:3000
,您将看到一条消息“Hello World”。
使用 PM2 管理 Node.js 应用程序
PM2 是 Process Management Module 的缩写,用于运行和管理 Node.js 应用程序。 PM2 可以在服务出现故障时自动重新启动服务并将其恢复正常。 PM2 可以安装在 Linux、macOS 和 Windows 操作系统上。
因斯塔
### Using NPM ###
sudo npm install -g pm2
### Using NVM ###
npm install pm2 -g
使用 PM2 启动 Node.js 应用程序。
pm2 start myapp.js
应用程序启动后,您将收到如下响应:
[PM2] Starting /home/rocky/myapp.js in fork_mode (1 instance)
[PM2] Done.
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ myapp │ default │ N/A │ fork │ 24806 │ 0s │ 0 │ online │ 0% │ 32.6mb │ rocky │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
PM2 备忘单
列出所有 Node.js 进程/应用程序
$ pm2 ls
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ myapp │ default │ N/A │ fork │ 24806 │ 31s │ 0 │ online │ 0% │ 48.1mb │ rocky │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
启动流程
pm2 start myapp.js
重新启动应用程序的所有实例
pm2 restart pm2 desc myapp
使 PM2 在系统重新启动时自动启动
显示有关应用程序的更多详细信息
$ pm2 show 0
Describing process with id 0 - name myapp
┌───────────────────┬───────────────────────────────────────┐
│ status │ online │
│ name │ myapp │
│ namespace │ default │
│ version │ N/A │
│ restarts │ 1 │
│ uptime │ 23s │
│ script path │ /home/rocky/myapp.js │
│ script args │ N/A │
│ error log path │ /home/rocky/.pm2/logs/myapp-error.log │
│ out log path │ /home/rocky/.pm2/logs/myapp-out.log │
│ pid path │ /home/rocky/.pm2/pids/myapp-0.pid │
│ interpreter │ node │
│ interpreter args │ N/A │
│ script id │ 0 │
│ exec cwd │ /home/rocky │
│ exec mode │ fork_mode │
│ node.js version │ 18.0.0 │
│ node env │ N/A │
│ watch & reload │ ✘ │
│ unstable restarts │ 0 │
│ created at │ 2022-04-22T22:29:12.399Z │
└───────────────────┴───────────────────────────────────────┘
...
检查流程的详细信息。
pm2 desc myapp
将应用程序扩展到n 个进程
$ pm2 scale myapp 5
[PM2] Scaling up application
[PM2] Scaling up application
[PM2] Scaling up application
[PM2] Scaling up application
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ myapp │ default │ N/A │ fork │ 24843 │ 8h │ 1 │ online │ 0% │ 59.1mb │ rocky │ disabled │
│ 1 │ myapp │ default │ N/A │ fork │ 25912 │ 0s │ 0 │ online │ 0% │ 47.0mb │ rocky │ disabled │
│ 2 │ myapp │ default │ N/A │ fork │ 25918 │ 0s │ 0 │ online │ 0% │ 43.9mb │ rocky │ disabled │
│ 3 │ myapp │ default │ N/A │ fork │ 25925 │ 0s │ 0 │ online │ 0% │ 28.3mb │ rocky │ disabled │
│ 4 │ myapp │ default │ N/A │ fork │ 25928 │ 0s │ 0 │ online │ 0% │ 14.8mb │ rocky │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
监控应用程序的日志和指标
pm2 monit myapp
使用Ctrl + C退出监控屏幕。
要检查特定进程或应用程序的日志,请使用以下命令:
pm2 logs 0
pm2 logs myapp
刷新所有日志
pm2 flush myapp
停止应用程序:
pm2 stop myapp
删除应用程序
$ pm2 delete myapp
[PM2] Applying action deleteProcessId on app [myapp](ids: [ 0, 1, 2, 3, 4 ])
[PM2] [myapp](0) ✓
[PM2] [myapp](1) ✓
[PM2] [myapp](2) ✓
[PM2] [myapp](3) ✓
[PM2] [myapp](4) ✓
结论
Node.js 允许您高效地构建独立于平台的 Web 应用程序。在本文中,我们详细介绍了在 CentOS 8|RHEL 8|Rocky Linux 8 Linux 系统上安装 Node.js 18 的过程。我们还分享了在 Node 服务器中启动应用程序的过程。安装和使用 PM2 使我们能够轻松管理应用程序生命周期。
类似指南:
- 使用 Wetty 在 Web 浏览器上运行 Linux 终端
- 在 Ubuntu 上安装和使用 AngularJS
- Zsh、Bash 和 Fish 的最佳终端 Shell 提示