在 CentOS 上安装 Node.js 的详细指南
Node.js 是一个强大的开源、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。凭借其异步、事件驱动的特性,Node.js 特别适合构建高性能的网络应用、实时服务以及各种命令行工具。对于在 CentOS 这类企业级 Linux 系统上进行开发或部署应用的开发者和系统管理员来说,正确地安装和管理 Node.js 至关重要。
本文将提供一个全面、详细的指南,涵盖在 CentOS 系统上安装 Node.js 的多种常用方法,并深入探讨每种方法的优缺点、适用场景,以及一些安装后的常见配置和故障排除技巧。无论您是新手还是经验丰富的用户,本文都能帮助您顺利地在 CentOS 环境中搭建起 Node.js 开发或运行环境。
为什么选择 CentOS?
CentOS (Community Enterprise Operating System) 是一个基于 Red Hat Enterprise Linux (RHEL) 源代码构建的社区驱动的免费操作系统。它以其稳定性、安全性和长期支持(LTS)而闻名,因此广泛应用于服务器环境。在 CentOS 上部署 Node.js 应用,意味着您将在一个坚实可靠的平台上运行您的服务。
安装 Node.js 的主要方法
在 CentOS 上安装 Node.js 有几种常见且推荐的方法:
- 使用 CentOS 官方或 EPEL 仓库 (
yum
或dnf
): 这是最简单直接的方法,利用 CentOS 包管理器来安装。通常安装的是一个相对稳定的但可能不是最新的版本。 - 使用 NodeSource 官方仓库 (
yum
或dnf
): NodeSource 提供了针对各种 Linux 发行版的最新 Node.js 版本仓库。这是在 CentOS 上获取最新或特定 LTS 版本Node.js 的推荐方法之一。 - 使用 NVM (Node Version Manager): NVM 是一个强大的版本管理器,允许您在同一台机器上安装和切换多个 Node.js 版本。这对于需要兼容不同项目对 Node.js 版本要求的开发者来说非常有用。
- 从源码编译安装: 这是最灵活但也是最复杂的方法,通常只有在需要定制构建选项或安装极度前沿版本时才使用。对于大多数用户而言,不推荐此方法。
本文将重点详细介绍前三种最常用和推荐的方法。
准备工作
在开始安装之前,请确保您具备以下条件:
- 一台运行 CentOS 系统的服务器或虚拟机(本文以 CentOS 7 和 CentOS 8 为例,尽管 CentOS 8 已停止维护,但方法依然具有参考价值,对于 CentOS Stream 或 Rocky Linux/AlmaLinux 也基本适用)。
- 拥有
sudo
权限的用户账户。 - 稳定的互联网连接,用于下载软件包。
-
建议先更新系统软件包列表和已安装的软件包,这有助于避免依赖问题:
bash
sudo yum clean all # 清理缓存 (可选)
sudo yum update -y # 更新系统
(对于 CentOS 8 或更高版本,yum
命令已被dnf
取代,用法基本相同:sudo dnf update -y
)
接下来,我们将详细介绍每种安装方法。
方法一:使用 CentOS 官方或 EPEL 仓库安装 (yum/dnf)
这是最简单直接的方法,尤其适合那些对 Node.js 版本要求不苛刻,只需要一个可用版本来运行应用的场景。然而,CentOS 官方仓库中的 Node.js 版本通常比较旧。为了获取稍微新一些的版本,我们需要启用 EPEL (Extra Packages for Enterprise Linux) 仓库。
步骤 1:安装 EPEL 仓库
EPEL 仓库提供了许多在官方 CentOS 仓库中找不到的流行软件包,包括较新版本的 Node.js。
bash
sudo yum install epel-release -y
或者对于 CentOS 8+/dnf:
bash
sudo dnf install epel-release -y
安装完成后,EPEL 仓库的配置会自动添加到系统中。
步骤 2:安装 Node.js 和 npm
EPEL 仓库启用后,您就可以使用 yum
或 dnf
直接安装 nodejs
包了。请注意,通常安装 nodejs
包时也会自动安装 npm
(Node Package Manager),它是 Node.js 生态系统中用于管理项目依赖的标准工具。
bash
sudo yum install nodejs -y
或者对于 CentOS 8+/dnf:
bash
sudo dnf install nodejs -y
这个命令会从 EPEL 仓库下载并安装最新可用版本的 Node.js 和 npm。
步骤 3:验证安装
安装完成后,可以通过检查 Node.js 和 npm 的版本来验证是否安装成功:
bash
node -v
npm -v
如果命令输出了版本号(例如 v10.x.x
和 6.x.x
),则表示安装成功。请注意,通过这种方式安装的版本号取决于 EPEL 仓库中提供的具体版本,它可能不是最新的 LTS 版本。
这种方法的优缺点:
- 优点:
- 安装过程极其简单,只需几条命令。
- 利用系统自带的包管理器,易于管理(更新、卸载)。
- 安装稳定,通常与 CentOS 系统环境兼容性良好。
- 缺点:
- 通过 EPEL 仓库安装的 Node.js 版本通常不是最新的 LTS 版本,可能落后于 Node.js 官方发布。
- 无法方便地在不同 Node.js 版本之间切换。
- 如果您的应用依赖于较新的 Node.js 特性,这种方法可能不适用。
适用场景:
- 只需要一个基础的、稳定可用的 Node.js 版本来运行不依赖最新特性的应用。
- 对 Node.js 版本没有严格要求。
- 偏好使用系统包管理器统一管理软件。
方法二:使用 NodeSource 仓库安装 (yum/dnf)
NodeSource 是 Node.js 官方推荐的第三方维护的仓库之一,它为各种 Linux 发行版提供了最新版本的 Node.js 二进制包。这是在 CentOS 上安装特定 Node.js 版本(包括最新的 LTS 和 Current 版本)的最常用和推荐的方法。
步骤 1:添加 NodeSource 仓库
NodeSource 提供了一个设置脚本,可以自动检测您的系统并添加相应的仓库配置。您需要选择想要安装的 Node.js 版本,通常建议安装 LTS (Long Term Support) 版本,因为它更稳定并提供长期支持。以下是添加 Node.js 20 LTS 版本仓库的示例:
“`bash
对于 CentOS 7
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash –
对于 CentOS 8+/dnf
您可能需要先安装curl和gnupg
sudo dnf install curl gnupg2 -y
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash –
“`
curl -fsSL
: 使用curl
命令下载脚本。-f
表示下载失败时不显示错误;-s
表示静默模式,不显示进度条;-S
表示在静默模式下显示错误;-L
表示跟随重定向。https://rpm.nodesource.com/setup_20.x
: 这是获取 Node.js 20.x LTS 版本仓库设置脚本的 URL。如果您想安装其他版本,只需将setup_20.x
替换为相应的版本号,例如setup_18.x
(Node.js 18 LTS) 或setup_lts.x
(最新 LTS) 或setup_current.x
(最新 Current)。| sudo bash -
: 将下载的脚本通过管道符传递给sudo bash
执行。这将以 root 权限运行脚本,配置 NodeSource 仓库。
运行脚本后,它会打印一些信息,说明已成功添加 NodeSource 仓库,并提示您接下来执行安装命令。
步骤 2:安装 Node.js 和 npm
一旦 NodeSource 仓库被添加到您的系统,您就可以使用 yum
或 dnf
安装 nodejs
包了。这个包包含了 Node.js 可执行文件和 npm。
bash
sudo yum install nodejs -y
或者对于 CentOS 8+/dnf:
bash
sudo dnf install nodejs -y
注意: NodeSource 提供的包通常已经包含了最新版本的 npm,所以您只需要安装 nodejs
包即可。
步骤 3:验证安装
安装完成后,同样通过检查 Node.js 和 npm 的版本来验证:
bash
node -v
npm -v
这次您应该会看到您通过 NodeSource 脚本指定的 Node.js 版本号(例如 v20.x.x
)以及相应的 npm 版本号。
更新 Node.js (使用 NodeSource 方法安装的)
如果您想更新通过 NodeSource 安装的 Node.js 版本,例如从 Node.js 20.x 更新到更新的 20.x 版本,或者升级到新的 LTS 版本(例如 Node.js 22),您通常需要:
- 如果只是小版本更新 (例如 20.1.0 -> 20.2.0): 只需运行系统更新命令即可:
bash
sudo yum update nodejs -y
# 或 sudo dnf update nodejs -y - 如果想升级到新的主要或 LTS 版本 (例如从 20.x 到 22.x):
- 首先,您可以卸载当前版本(可选,但推荐,尤其是在升级到大版本时):
bash
sudo yum remove nodejs -y
# 或 sudo dnf remove nodejs -y - 然后,再次运行 NodeSource 的设置脚本,这次使用新版本的 URL (例如
setup_22.x
):
bash
curl -fsSL https://rpm.nodesource.com/setup_22.x | sudo bash - - 最后,重新安装 Node.js:
bash
sudo yum install nodejs -y
# 或 sudo dnf install nodejs -y
- 首先,您可以卸载当前版本(可选,但推荐,尤其是在升级到大版本时):
这种方法的优缺点:
- 优点:
- 可以方便地安装最新或特定的 LTS Node.js 版本。
- 安装过程相对简单,利用了
yum
/dnf
包管理器。 - 提供了官方推荐的二进制包,稳定性较好。
- 缺点:
- 仍然是系统全局安装,无法方便地在不同 Node.js 版本之间快速切换。
- 添加了第三方仓库,需要信任 NodeSource。
- 适用场景:
- 需要安装特定、较新的 Node.js 版本(例如某个 LTS 版本)。
- 系统上主要运行依赖于特定或较新 Node.js 版本的应用。
- 偏好使用系统包管理器进行安装和更新,但官方/EPEL 版本过旧。
方法三:使用 NVM (Node Version Manager) 安装
NVM 是一个专门用于管理 Node.js 版本的命令行工具。它允许您在同一个用户账户下安装多个 Node.js 版本,并轻松地在它们之间进行切换。这对于开发者来说非常有用,尤其是当您需要在不同的项目中使用不同 Node.js 版本时。
NVM 通常安装在用户的主目录下,不会影响系统全局的 Node.js 安装(如果存在的话),因此它更加灵活和独立。
步骤 1:安装 NVM 的依赖
NVM 的安装脚本和其自身运行需要一些基本的工具,如 curl
(用于下载) 和 git
(用于克隆 NVM 仓库)。在 CentOS 上,您可以使用 yum
或 dnf
安装它们:
bash
sudo yum install curl git -y
或者对于 CentOS 8+/dnf:
bash
sudo dnf install curl git -y
步骤 2:下载并安装 NVM
使用 curl
命令从 NVM 的 GitHub 仓库下载并运行安装脚本。建议访问 NVM 的 GitHub 页面 (https://github.com/nvm-sh/nvm) 查看最新版本的安装脚本 URL,以确保您安装的是最新版本的 NVM。
以下是安装最新稳定版本 NVM 的示例命令 (请替换 v0.39.7
为当前最新的 NVM 版本号):
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
curl -o- ... | bash
: 下载脚本并直接通过管道符传递给bash
执行。-o-
表示将输出写入标准输出。
这个脚本会将 NVM 仓库克隆到您的用户主目录下的 .nvm
目录中,并在您的 shell 配置文件 (如 ~/.bashrc
, ~/.zshrc
, ~/.profile
等) 中添加加载 NVM 的配置。
步骤 3:加载 NVM 到当前会话
安装脚本通常会提示您关闭并重新打开终端,或者运行特定的命令来加载 NVM 到当前 shell 会话。这是因为 NVM 的配置需要被 shell 执行才能生效。您可以通过 sourcing 配置文件来立即加载:
“`bash
source ~/.bashrc
或者根据你的shell,可能是 source ~/.profile 或 source ~/.zshrc 等
“`
如果脚本修改了其他文件(例如 .profile
),您可能需要根据脚本的输出调整 source 命令。
步骤 4:验证 NVM 安装
加载配置后,您可以验证 NVM 是否成功安装并可以执行:
bash
command -v nvm
如果命令输出了 nvm
,则表示 NVM 已成功安装并可以在当前 shell 中使用。
步骤 5:使用 NVM 安装 Node.js
现在您可以使用 nvm
命令来安装 Node.js 了。
- 安装最新的 LTS 版本:
bash
nvm install --lts - 安装最新的 Current 版本:
bash
nvm install node - 安装特定版本 (例如 v18.17.1):
bash
nvm install 18.17.1
您可以通过nvm ls-remote
命令查看所有可用的 Node.js 版本列表。
安装完成后,NVM 会自动将刚安装的版本设置为当前使用的版本。
步骤 6:验证 Node.js 安装 (使用 NVM)
安装完成后,再次检查 Node.js 和 npm 的版本。这次输出的版本号应该是您通过 NVM 安装的版本。
bash
node -v
npm -v
使用 NVM 管理 Node.js 版本:
NVM 提供了丰富的命令来管理您安装的 Node.js 版本:
- 列出已安装的版本:
bash
nvm ls
这将列出所有通过 NVM 安装的 Node.js 版本,并用箭头 (->
) 指示当前正在使用的版本。 - 切换到指定版本:
bash
nvm use <version>
例如:nvm use 18.17.1
- 设置默认版本: 您可以将某个版本设置为每次打开新终端时自动使用的版本:
bash
nvm alias default <version>
例如:nvm alias default --lts
或nvm alias default 20.1.0
- 卸载指定版本:
bash
nvm uninstall <version>
例如:nvm uninstall 14.21.3
这种方法的优缺点:
- 优点:
- 极高的灵活性,可以轻松安装和切换多个 Node.js 版本。
- 安装在用户目录下,不影响系统全局环境,避免潜在冲突。
- 非常适合需要测试不同版本兼容性或开发多个使用不同 Node.js 版本项目的开发者。
- 缺点:
- 安装和使用略复杂于直接通过包管理器安装。
- 每个需要使用 Node.js 的用户都需要单独安装和配置 NVM(或者进行特殊处理实现全局可用,但这通常不是 NVM 的典型用法)。
- Node.js 和 npm 的可执行文件路径 (
$PATH
) 会由 NVM 在 shell 启动时动态设置,这在使用定时任务 (cron jobs) 或特定服务脚本时需要特别注意,可能需要显式 sourcing NVM 环境。
- 适用场景:
- 开发者,需要在不同项目中使用不同 Node.js 版本。
- 需要频繁升级或降级 Node.js 版本进行测试。
- 希望 Node.js 环境与系统其他部分隔离。
从源码编译安装 Node.js
从源码编译安装 Node.js 是最灵活的方法,您可以完全控制构建过程,包括配置选项。但它也是最复杂和耗时的方法,需要安装编译工具和各种依赖库,且后续的更新和维护也比较繁琐。对于大多数用户而言,前三种方法已经足够,因此不建议普通用户采用此方法。
简单概述步骤 (不提供详细代码,因为篇幅和复杂性):
- 安装编译所需的工具和依赖库(如
gcc
,gcc-c++
,make
,python3
,openssl-devel
等)。 - 从 Node.js 官网下载最新或指定版本的源码压缩包。
- 解压源码包。
- 进入源码目录,运行配置脚本 (
./configure
),可以指定安装路径、特性等。 - 运行
make
命令进行编译。 - 运行
sudo make install
将编译好的 Node.js 安装到指定位置(默认为/usr/local
)。 - 验证安装。
这种方法非常底层,如果依赖库版本不对或配置有误,很容易遇到各种编译错误。除非您有特殊的定制需求或深入了解编译过程,否则请优先考虑使用包管理器或 NVM。
安装后的常见任务和配置
安装 Node.js 后,您可能会进行以下操作:
- 使用 npm 安装模块:
- 安装全局模块 (对所有用户或当前 NVM 环境可用):
bash
npm install -g <module-name>
注意: 如果您使用 NVM 安装的 Node.js,npm install -g
通常不会产生权限问题,因为 NVM 会设置好目录权限。如果您是通过sudo
使用yum
/dnf
安装的 Node.js,直接运行npm install -g
可能会因为普通用户没有/usr/lib/node_modules
或类似目录的写入权限而失败。切勿简单地使用sudo npm install -g
,这会导致 npm 使用 root 权限运行,污染文件权限并可能引发后续问题。推荐的解决方案是使用 NVM,或者修改 npm 的全局模块安装目录,或者使用 NodeSource 仓库(它们通常会配置好权限)。 - 安装项目本地模块 (在项目目录下):
bash
cd /path/to/your/project
npm install <module-name>
这会在项目目录下的node_modules
子目录中安装模块。这是推荐的方式,以便每个项目拥有独立的依赖环境。
- 安装全局模块 (对所有用户或当前 NVM 环境可用):
- 更新 npm: 尽管 npm 通常随 Node.js 一起安装,但有时您可以独立更新 npm 到最新版本:
bash
npm install -g npm@latest
注意: 这可能会更新当前 Node.js 版本自带的 npm,但如果使用 NVM,这次更新只影响当前nvm use
的 Node.js 版本。 - 配置 npm 镜像: 由于网络原因,从 npm 官方仓库下载模块可能很慢。您可以配置使用国内的 npm 镜像源来加速下载,例如淘宝镜像:
bash
npm config set registry https://registry.npmmirror.com/
# 验证配置
npm config get registry
如果您想恢复到官方源:
bash
npm config set registry https://registry.npmjs.org/
这个配置可以是全局的(使用-g
参数),也可以是用户级别的(默认)。 - 运行 Node.js 脚本:
- 执行单个文件:
node your_script.js
- 执行项目启动脚本 (如果在
package.json
中配置了start
脚本):npm start
- 执行单个文件:
- 设置服务自启动: 如果您在 CentOS 上部署 Node.js 应用作为服务,您通常会使用
systemd
来管理和控制应用的启动、停止、重启和自启动。这涉及到创建一个.service
文件,并配置systemd
来运行您的 Node.js 应用。这部分内容本身可以构成一篇独立文章,此处不再详细展开,但请注意这是生产环境中常见的部署方式。
故障排除
在 CentOS 上安装或使用 Node.js 可能会遇到一些问题:
node: command not found
或npm: command not found
:- 检查 Node.js 和 npm 是否确实已安装。
- 检查您的用户账户的
$PATH
环境变量是否包含 Node.js 和 npm 的安装路径。- 对于
yum
/dnf
安装,它们通常在/usr/bin
或/usr/local/bin
中,这些目录通常在$PATH
中。 - 对于 NVM 安装,请确保您已经成功
source
了 NVM 的配置文件,并且当前 shell 会话是通过nvm use <version>
或 NVM 默认设置激活了 Node.js 版本。运行echo $PATH
和command -v node
来诊断路径问题。
- 对于
npm install -g
权限错误: 如果不是使用 NVM 安装 Node.js,且直接使用npm install -g
遇到 EACCES 权限错误,请不要使用sudo npm install -g
。正确的做法是修改 npm 的全局安装目录权限,或者配置 npm 将全局模块安装到您有权限的目录,或者使用 NVM。- 安装依赖时编译失败 (node-gyp 错误): 某些 Node.js 模块包含需要编译的 C++ 代码。这需要系统中安装有 C++ 编译器和相关的开发工具。如果遇到这类错误,通常需要安装
build-essential
(或 CentOS/RHEL 上的Development Tools
组) 和 Python:
bash
sudo yum groupinstall 'Development Tools' -y
sudo yum install python3 -y # 或 python2,取决于模块要求 - 网络问题: 在下载 Node.js 或 npm 模块时,网络不稳定或防火墙设置可能导致下载失败。检查您的网络连接和防火墙设置。
- EPEL/NodeSource 仓库问题: 如果在使用
yum
或dnf
从这些仓库安装时遇到错误,可能是仓库配置有问题,GPG 密钥未导入,或者仓库暂时不可用。检查错误信息,有时需要手动导入仓库的 GPG 密钥。
选择合适的安装方法
根据您的需求,选择最合适的安装方法:
- 对于生产环境,只需要特定版本的 Node.js 且不经常切换: 推荐使用 NodeSource 仓库 方法。它可以方便地获取较新或 LTS 版本,并与系统包管理器集成,便于管理和更新。
- 对于开发者,需要在不同项目中使用不同 Node.js 版本: NVM 是最佳选择。它提供了极大的灵活性和隔离性。
- 对于只需要一个基础 Node.js 版本来运行简单脚本或旧应用: CentOS 官方/EPEL 仓库 方法最简单,但版本可能较旧。
- 除非有特殊需求,否则不推荐从源码编译安装。
总结
本文详细介绍了在 CentOS 系统上安装 Node.js 的三种主要方法:通过系统包管理器 (yum/dnf) 配合 EPEL 仓库、通过 NodeSource 官方仓库、以及使用 Node Version Manager (NVM)。每种方法都有其独特的优缺点和适用场景。
使用 yum
/dnf
从 EPEL 安装适用于追求简单且对版本要求不高的场景;使用 NodeSource 仓库是获取特定新版本 Node.js 的常用且推荐方式,方便系统级的安装和管理;而 NVM 则为开发者提供了在多个 Node.js 版本之间自由切换的能力,极具灵活性。
选择适合您需求的方法,按照本文提供的详细步骤操作,您就能在 CentOS 系统上成功搭建 Node.js 环境。安装完成后,别忘了验证安装,并根据需要进行一些基本的配置,如设置 npm 镜像,以优化您的开发和部署体验。
希望这篇详细指南能帮助您顺利地在 CentOS 上迈出 Node.js 的第一步!