努力
加油

Linux服务器(CentOS/Ubuntu)如何通过nvm安装指定版本的Node.js?

在 Linux 服务器(无论是 CentOS 还是 Ubuntu)上,通过 nvm (Node Version Manager) 来管理 Node.js 版本是运维和开发中最主流、最灵活的做法。它允许你在同一台机器上并行安装多个版本的 Node.js,并根据项目需求自由切换,避免了全局污染和权限问题。

以下是完整、落地的操作指南,包含常见坑点及解决方案。


第一步:安装 nvm

nvm 是一个 bash 脚本,所以本质上是通过 curl 或 wget 将其下载到本地并执行。

1. 推荐方式:使用官方安装脚本

打开终端,执行以下命令:

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

注意:如果网络环境较差(比如在内网或某些特定云厂商环境中),直接访问 GitHub 可能超时。此时建议使用国内镜像源或手动下载脚本。

2. 备选方案:手动下载(适用于内网/离线环境)

如果无法访问 GitHub,你可以先在本地电脑下载 install.sh 和 nvm.sh,然后上传到服务器指定目录(如 /opt/nvm),再手动 source。

或者使用国内提速源(如淘宝镜像等,但需注意安全性):

# 示例:使用 Gitee 或其他镜像源(请自行验证链接有效性)
git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout $(git describe --abbrev=0 --tags)

3. 激活 nvm

安装完成后,你需要让当前 Shell 会话加载 nvm 的配置。通常安装脚本会自动添加一行到 ~/.bashrc 或 ~/.zshrc。如果没有自动生效,请手动执行:

source ~/.bashrc
# 或者如果你用的是 zsh
source ~/.zshrc

验证是否安装成功:

nvm --version

如果输出了版本号(如 0.39.7),说明安装成功。


第二步:安装指定版本的 Node.js

假设你要安装 Node.js v18.17.0(LTS 版本为例):

nvm install 18.17.0

nvm 会自动从 nodejs.org 下载对应平台的二进制包,编译或直接解压(取决于版本策略),并安装在 ~/.nvm/versions/node/ 目录下。

提示:你可以直接安装 LTS 版本,无需记具体小版本号:

nvm install --lts

第三步:设置默认版本 & 切换版本

1. 查看已安装的版本

nvm ls

输出类似:

       v16.20.0
->     v18.17.0
         system
default -> 18.17.0 (-> v18.17.0)
node -> stable (-> v18.17.0) (default)
stable -> 18.17 (-> v18.17.0) (default)
iojs -> N/A (default)
unstable -> N/A (default)

箭头 -> 表示当前 shell 正在使用的版本。

2. 切换到指定版本

nvm use 18.17.0

3. 设置默认版本(新终端自动生效)

nvm alias default 18.17.0

这样每次新开 SSH 连接或重启服务器后,默认都会进入这个 Node 环境。

4. 验证版本

node -v
npm -v

确保输出是你期望的版本。


第四步:常见问题与避坑指南

❌ 问题1:command not found: nvm

原因:.bashrc 未正确加载,或你使用的是 root 用户但配置写在了普通用户下。

解决:

  • 确认 ~/.bashrc 末尾有类似以下内容:
    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
    [ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
  • 执行 source ~/.bashrc 重新加载。
  • 如果是 root 用户,检查是否编辑的是 /root/.bashrc。

❌ 问题2:安装速度慢或失败(网络问题)

原因:默认源在国外,国内访问不稳定。

解决:
设置 npm 镜像为国内源(虽然 nvm 本身不经过 npm,但后续装包会用到):

npm config set registry https://registry.npmmirror.com

对于 nvm 本身下载 Node 二进制包慢的问题,可以设置环境变量提前指定XX或使用镜像(部分 nvm 版本支持):

export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
nvm install 18.17.0

⚠️ 注意:npmmirror.com 的 node 镜像同步可能有延迟,建议优先使用官方源,若失败再考虑镜像。

❌ 问题3:权限拒绝(Permission denied)

原因:尝试用 sudo 安装 nvm 或 node。

解决:
绝对不要用 sudo nvm install ...!这会导致文件所有者变成 root,后续普通用户无法管理。
所有操作都应在普通用户下进行。如果必须用 root,请确保路径在 /root/.nvm 且无权限冲突。

❌ 问题4:SSH 登录后版本不对

原因:非交互式登录时,.bashrc 可能不会被完全加载。

解决:
在 .bash_profile 或 .profile 中显式调用 .bashrc:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

第五步:生产环境最佳实践建议

  1. 使用 .nvmrc 文件
    在项目根目录创建 .nvmrc 文件,写入所需版本:

    echo "18.17.0" > .nvmrc

    然后在项目中运行:

    nvm use

    即可自动切换到该项目指定的 Node 版本,极大提升团队协作效率。

  2. 避免全局安装过多 npm 包
    尽量将依赖放在项目本地 node_modules 中,而不是全局安装。如需全局工具(如 pm2、nodemon),可结合 nvm 的 --reinstall-packages-from 参数迁移。

  3. 监控磁盘空间
    nvm 会为每个 Node 版本占用约 50MB+ 空间。长期积累可能占满 /home 分区。定期清理无用版本:

    nvm uninstall <version>
  4. 云服务器安全组
    安装 Node.js 本身不涉及端口开放,但若部署应用,记得在阿里云/腾讯云控制台的安全组中放行对应端口(如 3000, 8080 等)。


总结

步骤 命令
安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
加载环境 source ~/.bashrc
安装 Node nvm install 18.17.0
切换版本 nvm use 18.17.0
设默认版本 nvm alias default 18.17.0
查看版本 nvm ls

掌握这套流程,你就能在任何 Linux 服务器上灵活管理 Node.js 环境,应对各种开发和部署场景。