以下是 在 CentOS 7.7.1908(无外网 DNS 或 DNS 不稳定)环境下,从零安装兼容的 Node.js 18(v18.17.1)的完整、可靠步骤,按顺序执行即可:


前提确认

  • 系统:CentOS Linux release 7.7.1908 (Core)
  • 网络:可访问公网 IP(如 ping 8.8.8.8 成功)
  • 目标:安装 Node.js v18.17.1(最后一个兼容 CentOS 7 的 LTS 版本)

🔧 第一步:配置 DNS(避免解析失败)

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

(可选)防止被覆盖:sudo chattr +i /etc/resolv.conf


🔧 第二步:清理并配置阿里云 vault 源(精确匹配 7.7.1908)

# 备份旧 repo
sudo mkdir -p /etc/yum.repos.d/backup
sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null || true

# 创建 Base 源
sudo tee /etc/yum.repos.d/CentOS-Base.repo <<'EOF'
[base]
name=CentOS-7.7.1908 - Base
baseurl=https://mirrors.aliyun.com/centos-vault/7.7.1908/os/$basearch/
gpgcheck=0
enabled=1

[updates]
name=CentOS-7.7.1908 - Updates
baseurl=https://mirrors.aliyun.com/centos-vault/7.7.1908/updates/$basearch/
gpgcheck=0
enabled=1

[extras]
name=CentOS-7.7.1908 - Extras
baseurl=https://mirrors.aliyun.com/centos-vault/7.7.1908/extras/$basearch/
gpgcheck=0
enabled=1
EOF

# 创建 SCL 源(用于 devtoolset)
sudo tee /etc/yum.repos.d/CentOS-SCLo.repo <<'EOF'
[centos-sclo-rh]
name=CentOS-7.7.1908 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos-vault/7.7.1908/sclo/x86_64/rh/
gpgcheck=0
enabled=1

[centos-sclo-sclo]
name=CentOS-7.7.1908 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos-vault/7.7.1908/sclo/x86_64/sclo/
gpgcheck=0
enabled=1
EOF

# 清理缓存
sudo yum clean all
sudo rm -rf /var/cache/yum
sudo yum makecache

🔧 第三步:安装编译依赖(新版 GCC)

# 安装开发工具集(含 GCC 9)
sudo yum install -y devtoolset-9

# 安装其他依赖
sudo yum install -y python3 openssl-devel

🔧 第四步:启用 GCC 9 并下载 Node.js 源码

# 启用新版编译器(开启新 shell)
scl enable devtoolset-9 bash

# 验证 GCC 支持 C++17
g++ --version  # 应 ≥ 9.0

# 下载 Node.js 18.17.1 源码(不是二进制!)
cd /home/admin
mkdir -p node && cd node
wget https://nodejs.org/dist/v18.17.1/node-v18.17.1.tar.gz
tar -xf node-v18.17.1.tar.gz
cd node-v18.17.1

🔧 第五步:编译并安装 Node.js

./configure --prefix=/home/admin/node/node-v18.17.1
make -j$(nproc)      # 编译(约 10~30 分钟)
make install         # 安装到指定目录

🔧 第六步:配置环境变量

echo 'export PATH=/home/admin/node/node-v18.17.1/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

第七步:验证安装

node --version   # 输出 v18.17.1
npm --version    # 正常显示版本
which node       # /home/admin/node/node-v18.17.1/bin/node

✅ 无 GLIBCCXXABI 错误,完全兼容 CentOS 7。


🧼(可选)清理

# 删除源码和压缩包(节省空间)
rm -rf /home/admin/node/node-v18.17.1 /home/admin/node/node-v18.17.1.tar.gz

💡 说明

  • 不要使用 .tar.xz 二进制包(不兼容 CentOS 7)
  • 不要使用 NodeSource 脚本或 RPM(已不支持 CentOS 7)
  • 必须从源码编译 + GCC 9

按此流程操作,即可在 任何 CentOS 7.7 机器 上成功部署 Node.js 18。

你用 admin 账号通过 源码编译 安装了 Node.js 18.17.1,路径为:
/home/admin/node/node-v18.17.1/bin/node

root 用户的 PATH 未包含该路径,所以 root 仍使用旧版(如 /usr/local/bin/node 指向 v16.15.0)。


✅ 第八步,为root用户配置:

方案 1:为 root 用户添加 PATH(推荐)

让 root 也使用新版 Node:

# 切换到 root
sudo -i

# 将 Node 路径加到 root 的 PATH
echo 'export PATH=/home/admin/node/node-v18.17.1/bin:$PATH' >> ~/.bashrc

# 重载配置
source ~/.bashrc

# 验证
node --version  # 应输出 v18.17.1
which node      # /home/admin/node/node-v18.17.1/bin/node

✅ 优点:无需移动文件,权限清晰。
⚠️ 注意:确保 /home/admin 对 root 可读(默认是)。


方案 2:全局替换软链接(谨慎)

如果系统其他服务依赖 node 命令,可更新全局软链接:

# 删除旧链接
sudo rm -f /usr/local/bin/node /usr/local/bin/npm

# 创建新链接
sudo ln -s /home/admin/node/node-v18.17.1/bin/node /usr/local/bin/node
sudo ln -s /home/admin/node/node-v18.17.1/bin/npm /usr/local/bin/npm

✅ 所有用户(包括 root)都会使用新版。
⚠️ 风险:如果路径权限或 SELinux 限制,可能失败。


方案 3:将 Node 安装到系统目录(最干净)

重新编译时指定 --prefix=/usr/local(需 root 权限):

# 在源码目录(需 admin 有权限)
cd /home/admin/node/node-v18.17.1

# 启用 GCC 9
scl enable devtoolset-9 bash

# 重新配置安装到 /usr/local
sudo ./configure --prefix=/usr/local
sudo make -j$(nproc)
sudo make install

✅ 自动覆盖 /usr/local/bin/node,所有用户生效。
❌ 缺点:需重新编译。


🔍 当前快速验证 root 状态:

sudo -i
echo $PATH
which node
node --version

✅ 推荐操作:

采用方案 1(为 root 添加 PATH),安全、简单、可逆:

echo 'export PATH=/home/admin/node/node-v18.17.1/bin:$PATH' | sudo tee -a /root/.bashrc
sudo -i 'source ~/.bashrc && node --version'

完成后,rootadmin 都将使用 Node.js v18.17.1

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐