CentOS 系统安装 Node.js 步骤详解
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者可以使用 JavaScript 来构建服务器端应用、命令行工具以及桌面应用程序。因其高性能、事件驱动和非阻塞 I/O 的特性,Node.js 在现代 Web 开发和后端服务中扮演着越来越重要的角色。
对于运行 CentOS 操作系统的服务器或虚拟机来说,安装 Node.js 是部署许多现代应用服务的基础步骤。然而,由于 CentOS 的特性(尤其是其基于 Red Hat Enterprise Linux,倾向于稳定但软件包版本可能不是最新的),安装最新或指定版本的 Node.js 可能需要一些额外的步骤,而不仅仅是简单的 yum install
命令。
本文将详细介绍在 CentOS 系统上安装 Node.js 的几种主要方法,包括使用官方仓库、NodeSource 提供的最新仓库、以及使用 Node Version Manager (NVM) 进行多版本管理。我们将逐一探讨这些方法的优缺点,并提供详细的步骤和解释,帮助您选择最适合您需求的方式。
在开始安装之前,请确保您具备以下条件:
- 一台运行 CentOS 的服务器或虚拟机(本文主要基于 CentOS 7/8 进行说明,但大部分步骤也适用于 RHEL 或其衍生版如 AlmaLinux、Rocky Linux)。
- 拥有
root
用户权限或可以执行sudo
命令的普通用户账户。 - 稳定的互联网连接,用于下载软件包。
- 对 Linux 命令行有基本的了解。
接下来,我们将深入探讨各种安装方法。
方法一:使用 CentOS 官方仓库或 EPEL 仓库安装 Node.js (不推荐用于最新版本)
CentOS 的官方软件仓库通常包含 Node.js 包,但这些包的版本往往比较旧,可能无法满足许多现代应用的需求。EPEL (Extra Packages for Enterprise Linux) 仓库提供了更多额外的软件包,其中也包含 Node.js,版本通常比官方仓库新一些,但也可能不是最新的 LTS (长期支持) 或 Current (当前) 版本。
优点:
- 安装过程简单,依赖性管理由
yum
或dnf
处理。 - 软件包经过维护,稳定性较高(虽然版本旧)。
缺点:
- Node.js 版本通常非常旧,可能缺少新特性或存在已知漏洞。
- 不适合需要特定新版本 Node.js 的开发或生产环境。
安装步骤:
-
安装 EPEL 仓库 (如果尚未安装):
在 CentOS 7 上:
bash
sudo yum install epel-release
在 CentOS 8 或更新版本上(使用dnf
):
bash
sudo dnf install epel-release
EPEL 仓库会添加到系统中,提供额外的软件包源。 -
搜索可用的 Node.js 版本:
bash
sudo yum search nodejs
# 或者在 CentOS 8/dnf 系统上:
sudo dnf search nodejs
这个命令会列出 EPEL 或官方仓库中所有与nodejs
相关的软件包,您会看到类似nodejs.x86_64
的条目,旁边可能会显示版本号。请注意观察版本号,它可能不是您期望的最新版本。 -
安装 Node.js 和 npm:
bash
sudo yum install nodejs npm
# 或者在 CentOS 8/dnf 系统上:
sudo dnf install nodejs npm
执行此命令后,yum
或dnf
会下载并安装 Node.js 运行时以及 npm (Node Package Manager)。npm 是 Node.js 的包管理器,用于安装、管理和发布 Node.js 包。它通常随 Node.js 一起安装。 -
验证安装:
安装完成后,您可以通过以下命令检查 Node.js 和 npm 的版本:
bash
node -v
npm -v
如果命令输出了版本号,说明安装成功。然而,如前所述,这些版本号很可能是较旧的。
总结: 使用 CentOS 官方仓库或 EPEL 仓库安装 Node.js 是最简单的方法,但不推荐用于需要最新版本 Node.js 的场景。对于大多数开发者和需要部署现代应用的场景,建议使用下面的方法二或方法三。
方法二:使用 NodeSource 仓库安装 Node.js (推荐用于生产环境)
NodeSource 提供了为各种 Linux 发行版(包括 CentOS/RHEL)构建的最新 Node.js 二进制包。他们维护着 Node.js 的 LTS (长期支持) 版本和 Current (当前) 版本仓库,使得在 CentOS 上安装和更新最新或特定 LTS 版本的 Node.js 变得非常方便和可靠。这是在生产环境中安装特定 Node.js 版本的主流且推荐的方法。
优点:
- 可以方便地安装 Node.js 的最新 LTS 或 Current 版本。
- 安装过程相对简单,使用标准的包管理器 (
yum
/dnf
)。 - 软件包由 NodeSource 维护,质量有保障。
- 更新 Node.js 版本也很方便。
缺点:
- 需要添加第三方仓库。
安装步骤:
NodeSource 提供了方便的安装脚本,可以根据您选择的 Node.js 版本(LTS 或 Current)自动配置好相应的 yum
或 dnf
仓库。
步骤 1:确定要安装的 Node.js 版本
Node.js 有两个主要的发布线:
* LTS (Long Term Support): 长期支持版本,适合绝大多数生产环境,提供较长时间的维护和更新,稳定性最好。
* Current: 当前版本,包含最新的特性,但生命周期较短,适合尝鲜或开发新特性。
您可以在 Node.js 官网上查看当前的 LTS 和 Current 版本。选择您需要的版本对应的 NodeSource 安装脚本。
步骤 2:下载并运行 NodeSource 安装脚本
NodeSource 提供了针对不同 Node.js 主版本的安装脚本。您需要使用 curl
下载脚本,然后使用 sudo bash
执行它。
-
安装最新的 LTS 版本 (推荐):
找到当前最新的 LTS 版本号,例如 Node.js 18 或 Node.js 20。NodeSource 的脚本名称通常包含版本号。例如,要安装 Node.js 20 (当前 LTS),可以使用以下命令:
“`bash
# CentOS/RHEL 7:
curl -sL https://rpm.nodesource.com/setup_20.x | sudo bash –CentOS/RHEL 8 or newer (using dnf):
curl -sL https://rpm.nodesource.com/setup_20.x | sudo bash –
``
setup_20.x
请根据 NodeSource 官方网站的最新推荐来调整中的版本号。例如,如果是 Node.js 18 LTS,则使用
setup_18.x`。 -
安装最新的 Current 版本:
如果您需要最新的当前版本(例如 Node.js 21 或 22),可以使用对应的脚本:
“`bash
# CentOS/RHEL 7:
curl -sL https://rpm.nodesource.com/setup_current.x | sudo bash –CentOS/RHEL 8 or newer (using dnf):
curl -sL https://rpm.nodesource.com/setup_current.x | sudo bash –
``
setup_current.x` 通常会指向最新的 Current 版本。
这里的
解释命令:
curl -sL <URL>
: 使用curl
命令从指定的 URL 下载内容。-s
: 静默模式,不显示下载进度等信息。-L
: 允许跟随重定向,确保即使 URL 有变化也能下载到正确的内容。
|
: 这是一个管道符,将curl
命令的输出(即安装脚本的内容)作为输入传递给下一个命令。sudo bash -
: 使用sudo
以 root 权限执行bash
命令。-
表示bash
会从标准输入读取命令,而标准输入正是curl
通过管道传递过来的脚本内容。
这个脚本会检测您的系统信息,并自动在 /etc/yum.repos.d/
目录下创建一个名为 nodesource-*.repo
的文件,这个文件配置了 NodeSource 的软件仓库地址。脚本执行成功后,系统就能够通过 yum
或 dnf
访问 NodeSource 提供的 Node.js 包了。
步骤 3:安装 Node.js
在成功执行 NodeSource setup 脚本后,您现在可以使用系统的包管理器安装 Node.js。NodeSource 的包包含了 node
和 npm
。
-
在 CentOS 7 上 (使用 yum):
bash
sudo yum install nodejs -
在 CentOS 8 或更新版本上 (使用 dnf):
bash
sudo dnf install nodejs
yum
或 dnf
会从 NodeSource 仓库下载 nodejs
包及其依赖项并进行安装。安装完成后,Node.js 和 npm 将可用。
步骤 4:验证安装
安装完成后,再次检查 Node.js 和 npm 的版本,确认安装的是您期望的版本:
bash
node -v
npm -v
您应该会看到与您选择的 NodeSource 脚本版本对应的 Node.js 版本号。
更新 Node.js:
使用 NodeSource 仓库安装 Node.js 后,更新也非常简单。只需运行标准的系统更新命令即可:
“`bash
sudo yum update nodejs
或者在 CentOS 8/dnf 系统上:
sudo dnf update nodejs
“`
这会将 Node.js 更新到 NodeSource 仓库中该版本系列 (如 LTS 或 Current) 的最新发布版本。
总结: 使用 NodeSource 仓库是 CentOS 上安装最新或指定 LTS 版本 Node.js 的推荐方法,过程简单、可靠,并且方便后续更新。适用于大多数开发和生产环境。
方法三:使用 Node Version Manager (NVM) 安装 Node.js (推荐用于开发环境和多版本管理)
Node Version Manager (NVM) 是一个命令行工具,允许您轻松地安装、切换和管理多个 Node.js 版本。它将 Node.js 安装在用户的主目录下,通常不需要 root
权限来安装不同版本的 Node.js。这对于需要在不同项目中使用不同 Node.js 版本的开发者来说非常有用。
优点:
- 可以方便地安装任意多个 Node.js 版本,并在它们之间快速切换。
- Node.js 版本安装在用户目录下,不影响系统全局环境。
- 安装全局 npm 包通常不需要
sudo
(因为它们安装在 NVM 管理的 Node.js 版本对应目录下)。 - 非常适合开发环境,方便测试不同版本的兼容性。
缺点:
- 安装过程稍微复杂一点,需要在用户的 shell 配置文件中添加配置。
- Node.js 版本是按用户安装的,如果多个用户都需要使用 Node.js,每个用户都需要单独安装 NVM 和 Node.js 版本。
- 不适合作为系统服务运行 Node.js 应用(尽管可以通过一些方法解决,但不如系统级安装直接)。
安装步骤:
- 下载并运行 NVM 安装脚本:
NVM 的安装脚本通常托管在 GitHub 上。使用curl
下载并执行它。访问 NVM 的 GitHub 页面 (https://github.com/nvm-sh/nvm
) 可以找到最新的安装命令。通常是这样:
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
请注意,v0.39.7
是一个版本号示例,请查看 NVM GitHub 页面获取最新的稳定版本号来替换它。
解释命令:
curl -o- <URL>
: 使用curl
下载内容,-o-
表示将输出写入标准输出。| bash
: 通过管道将下载的脚本内容传递给bash
执行。
这个脚本会将 NVM 克隆到您的用户主目录下的 ~/.nvm
目录中,并会在您的 shell 配置文件(如 ~/.bashrc
, ~/.profile
, ~/.zshrc
等,取决于您使用的 shell)中添加一些行,以便在启动 shell 时加载 NVM。
-
加载 NVM 到当前 shell 会话:
安装脚本会提示您关闭并重新打开终端,或者手动source
您的 shell 配置文件,以便在当前会话中立即使用nvm
命令。
例如,如果您的 shell 是 Bash,并且脚本修改了~/.bashrc
,则执行:
bash
source ~/.bashrc
如果您不确定是哪个文件被修改,或者希望 NVM 对所有登录 shell 都可用,可以尝试source ~/.profile
或查看安装脚本的输出。 -
验证 NVM 安装:
加载配置后,输入nvm
命令,如果安装成功,您会看到 NVM 的使用帮助信息。您也可以通过以下命令检查 NVM 的版本:
bash
nvm --version -
使用 NVM 安装 Node.js 版本:
现在,您可以使用nvm install
命令安装任意 Node.js 版本。- 安装最新的 LTS 版本:
bash
nvm install --lts - 安装最新的 Current 版本:
bash
nvm install node - 安装特定版本 (例如 Node.js 18.17.1):
bash
nvm install 18.17.1
NVM 会从官方源下载并安装指定的 Node.js 版本及其配套的 npm。这些版本将安装在~/.nvm/versions/node/
目录下。
- 安装最新的 LTS 版本:
-
列出已安装的 Node.js 版本:
bash
nvm ls
这个命令会显示所有通过 NVM 安装的 Node.js 版本,并用箭头 (->
) 指出当前正在使用的版本。system
表示当前使用的是系统全局安装的 Node.js (如果有的话)。 -
切换 Node.js 版本:
要切换到某个已安装的版本,使用nvm use
命令:
bash
nvm use 18.17.1
# 或者切换到最新的 LTS 版本:
nvm use --lts
# 切换回系统全局安装的版本 (如果存在):
nvm use system
切换后,当前的 shell 会话将使用指定版本的node
和npm
命令。 -
设置默认 Node.js 版本:
您可以设置一个默认版本,这样每次打开新的 shell 会话时都会自动使用该版本:
bash
nvm alias default 18.17.1
# 或者设置最新的 LTS 版本为默认:
nvm alias default --lts -
验证当前使用的 Node.js 版本:
切换或设置默认版本后,再次运行node -v
和npm -v
来确认当前使用的是正确的版本。
管理全局 npm 包时的注意事项:
使用 NVM 安装的 Node.js 版本,其对应的全局 node_modules
目录也在 ~/.nvm/versions/node/<version>/lib/node_modules/
目录下。因此,当您使用 npm install -g <package>
安装全局包时,通常不需要 sudo
,因为您对该目录有写入权限。这是 NVM 的一大优点。
总结: NVM 是管理多个 Node.js 版本的强大工具,特别适合开发者在不同项目之间切换 Node.js 环境。它提供了极大的灵活性,并将 Node.js 环境隔离在用户目录下。
方法四:从源码编译安装 Node.js (不推荐用于大多数场景)
从 Node.js 源码编译安装提供了最大的灵活性,您可以自定义编译选项,理论上可以获得最优化的性能。然而,这个过程相对复杂,需要安装编译工具和依赖库,并且后续的更新和维护也比较麻烦。除非您有非常特定的需求(例如需要在不受支持的架构上运行 Node.js,或者需要启用/禁用某些特定的编译选项),否则不建议使用此方法。
优点:
- 最大限度的灵活性和定制性。
- 可以在没有预编译二进制包的平台上安装。
缺点:
- 过程复杂,容易出错。
- 需要安装大量的编译依赖。
- 更新和维护困难,需要重复编译步骤。
- 不适合新手。
安装步骤:
-
安装编译所需的工具和依赖:
您需要安装 C++ 编译器 (如 GCC)、make 工具以及 Python (用于执行 Node.js 的构建脚本)。CentOS 提供了一个方便的 “Development Tools” 组包,包含这些基本工具。
bash
sudo yum groupinstall "Development Tools"
# 或者在 CentOS 8/dnf 系统上:
sudo dnf groupinstall "Development Tools"
此外,Node.js 编译还需要一些其他库,但通常 “Development Tools” 已经包含了大部分。如果编译过程中报错缺少某些库,您需要根据错误信息安装相应的*-devel
或*-dev
包。 -
下载 Node.js 源码:
访问 Node.js 官方网站 (https://nodejs.org/en/download/current/
) 下载您想要编译的版本的源码.tar.gz
包。您可以使用curl
或wget
命令在服务器上直接下载。
例如,下载某个版本的源码包:
bash
wget https://nodejs.org/dist/v18.17.1/node-v18.17.1.tar.gz
# 或者使用 curl:
curl -O https://nodejs.org/dist/v18.17.1/node-v18.17.1.tar.gz
请将v18.17.1
替换为您希望下载的实际版本号。 -
解压源码包:
bash
tar -zxvf node-v18.17.1.tar.gz
这将在当前目录下创建一个名为node-v18.17.1
的新目录,其中包含 Node.js 的源码。 -
进入源码目录:
bash
cd node-v18.17.1 -
配置编译选项:
运行./configure
脚本来检查系统环境、依赖项,并生成 Makefile。您可以添加各种选项来定制构建过程。默认情况下,它会将 Node.js 安装到/usr/local
目录。
bash
./configure
如果需要指定安装目录,可以使用--prefix
选项,例如安装到/opt/node
:
bash
./configure --prefix=/opt/node
如果./configure
过程中有依赖缺失,它会报错,您需要根据错误信息安装相应的开发库包。 -
编译源码:
运行make
命令开始编译 Node.js。这个过程可能需要一些时间,具体取决于您的服务器性能。
bash
make
您可以使用-j
选项利用多核 CPU 加快编译速度,例如使用 4 个核心:make -j 4
。 -
安装编译好的 Node.js:
编译成功后,使用make install
命令将编译好的二进制文件、库文件等安装到指定目录(默认为/usr/local
)。这个步骤通常需要root
权限。
bash
sudo make install
如果您在configure
阶段指定了--prefix
,例如/opt/node
,则需要使用:
bash
sudo make install prefix=/opt/node -
配置环境变量 (如果安装到非标准目录):
如果 Node.js 被安装到/usr/local/
以外的目录(例如/opt/node
),您需要将该目录下的bin
子目录添加到系统的 PATH 环境变量中,以便在任何地方都可以直接运行node
和npm
命令。
编辑您的 shell 配置文件(如~/.bashrc
或/etc/profile
),添加如下行:
bash
export PATH="/opt/node/bin:$PATH"
然后source
该文件或重新登录使更改生效。 -
验证安装:
检查 Node.js 和 npm 的版本:
bash
node -v
npm -v
总结: 从源码编译安装 Node.js 提供了最大的灵活性,但过程复杂且维护困难。除非有特殊需求,否则建议使用 NodeSource 仓库或 NVM 进行安装。
安装后的验证和基本使用
无论您使用哪种方法安装 Node.js,都需要验证安装是否成功,并了解一些基本的使用方法。
验证安装:
成功安装后,您应该能够在终端中执行 node
和 npm
命令。
bash
node -v
npm -v
这两个命令会分别输出安装的 Node.js 和 npm 的版本号。如果命令没有找到或输出错误,请检查您的安装步骤以及系统的 PATH 环境变量设置。
您还可以尝试运行一个简单的 Node.js 脚本来进一步验证:
1. 创建一个名为 hello.js
的文件:
bash
nano hello.js
2. 在文件中输入以下内容:
javascript
console.log("Hello from Node.js on CentOS!");
3. 保存并关闭文件。
4. 在终端中运行脚本:
bash
node hello.js
如果一切正常,您应该会看到输出:Hello from Node.js on CentOS!
基本使用 npm (Node Package Manager):
npm 是 Node.js 生态系统中最重要的工具之一,用于安装、共享和管理项目依赖。
-
安装一个 Node.js 包:
通常在项目目录下安装包作为项目依赖:
bash
npm install <package-name>
例如,安装 Express 框架:
bash
npm install express
这会将包安装到当前目录的node_modules
子目录中。 -
全局安装一个 Node.js 包:
有些工具(如命令行工具)需要全局安装才能在任何地方使用。
bash
npm install -g <package-name>
例如,全局安装nodemon
(一个用于开发时自动重启 Node.js 应用的工具):
bash
npm install -g nodemon
注意: 如果您使用系统级别的 Node.js 安装(方法一或方法二),全局安装可能需要sudo
权限:sudo npm install -g <package-name>
。然而,不推荐 使用sudo
进行全局安装,因为它可能导致权限问题。更好的做法是配置 npm 的全局安装目录,或者使用 NVM (NVM 环境下全局安装通常不需要 sudo)。如果遇到全局安装权限问题,可以考虑修改 npm 的全局安装目录,使其位于用户拥有写权限的路径下。具体步骤可以参考 npm 官方文档或其他教程,大致包括:
1. 配置 npm 全局安装前缀:npm config set prefix '~/.npm-global'
2. 创建该目录:mkdir ~/.npm-global
3. 将该目录添加到 PATH 环境变量:export PATH=~/.npm-global/bin:$PATH
添加到 shell 配置文件中并source
。 -
更新 npm:
npm 自身也可以通过 npm 来更新到最新版本:
bash
npm install -g npm@latest
注意: 如果您在使用 NVM,通常不需要手动更新 npm,因为它随 Node.js 版本一起安装,切换 Node.js 版本会自动使用该版本配套的 npm。如果您确实想更新某个 NVM 版本下的 npm,请确保您已经nvm use
到该版本,然后执行npm install -g npm@latest
(在此情况下,通常不需要sudo
)。
常见问题与故障排除
-
node: command not found
或npm: command not found
:- 原因: Node.js 或 npm 的安装目录没有在系统的 PATH 环境变量中。
- 解决方案:
- 如果您使用 NVM 安装,请确保您已经
source
了 NVM 的初始化脚本,并且已经使用nvm use
激活了一个 Node.js 版本。 - 如果您从源码安装到非标准目录,请确保将该目录的
bin
子目录添加到了 PATH 环境变量中,并且您的 shell 会话已经加载了新的环境变量。 - 如果您使用
yum
/dnf
或 NodeSource 仓库安装,它们通常会将 Node.js 安装到/usr/bin
或/usr/local/bin
,这些目录通常已经在 PATH 中。如果仍然找不到命令,可能是安装过程本身出了问题,可以尝试重新安装。
- 如果您使用 NVM 安装,请确保您已经
-
Error: EACCES: permission denied
(进行 npm install -g 时):- 原因: 您尝试在没有写入权限的系统目录下进行全局安装。
- 解决方案:
- 推荐: 使用 NVM。在 NVM 环境下,全局包安装在用户目录下,不需要
sudo
。 - 次选: 更改 npm 的全局安装目录到您有写入权限的路径,并将其添加到 PATH 环境变量(如前面“基本使用 npm”部分所述)。
- 不推荐但有时可行: 使用
sudo npm install -g <package>
。这样做虽然可以安装,但会留下 root 拥有的文件,可能导致后续使用普通用户管理这些包时出现问题,应尽量避免。
- 推荐: 使用 NVM。在 NVM 环境下,全局包安装在用户目录下,不需要
-
版本冲突或使用了错误的 Node.js 版本:
- 原因: 系统中安装了多个 Node.js 版本,或者 PATH 环境变量顺序导致使用了非预期的版本。
- 解决方案:
- 最佳: 使用 NVM。NVM 专门设计用于解决多版本问题,通过
nvm use
可以轻松切换。 - 如果您没有使用 NVM,检查您的 PATH 环境变量,确保您想要使用的 Node.js 版本所在的目录在 PATH 中靠前的位置。或者考虑卸载不需要的旧版本。
- 最佳: 使用 NVM。NVM 专门设计用于解决多版本问题,通过
-
NodeSource setup 脚本下载失败或执行报错:
- 原因: 网络问题、防火墙、或者 NodeSource URL 发生变化。
- 解决方案:
- 检查您的网络连接。
- 确认防火墙没有阻止对 NodeSource 服务器的访问。
- 访问 NodeSource 官方网站,获取最新的安装脚本 URL 和命令。
总结与选择建议
我们详细探讨了在 CentOS 系统上安装 Node.js 的四种主要方法:
- 使用 CentOS/EPEL 仓库: 最简单,但版本通常过旧,不适合现代应用。
- 使用 NodeSource 仓库: 推荐用于生产环境和大多数通用场景。提供最新 LTS 和 Current 版本,安装和更新方便可靠。
- 使用 NVM: 推荐用于开发环境和需要管理多个 Node.js 版本的用户。提供极高的灵活性和版本隔离,不需要 root 权限安装版本和全局包。
- 从源码编译: 最灵活,但过程复杂,维护困难,仅在有特殊需求时考虑。
对于大多数用户来说,选择 NodeSource 仓库或 NVM 是最明智的决定。
- 如果您是系统管理员,需要在服务器上部署生产应用,并且只需要安装一个稳定、最新的 LTS 版本 Node.js,那么使用 NodeSource 仓库是最高效且推荐的方式。
- 如果您是开发者,需要在不同的项目中使用不同版本的 Node.js,或者希望在不干扰系统环境的情况下自由切换 Node.js 版本并安装全局工具,那么使用 NVM 将是您的最佳选择。
安装 Node.js 仅仅是开始。一旦环境搭建好,您就可以开始构建、运行和部署各种 Node.js 应用了。熟练掌握 npm 的使用对于管理项目依赖和构建流程至关重要。
希望这篇详细的文章能帮助您顺利地在 CentOS 系统上安装并开始使用 Node.js!