首页 前端知识 Linux部署nodejs解决18及以上版本无法运行的方案

Linux部署nodejs解决18及以上版本无法运行的方案

2024-08-16 22:08:06 前端知识 前端哥 141 126 我要收藏

Linux上部署nodejs首先必须确定已经准备好了虚拟机或者Linux系统,使用wget进行安装,不采取yum的形式,因为yum是下载后自动安装,而wget是下载后手动安装

下载部署nodejs

# 如果没有安装wget需要先安装wget
# 可以使用whereis wget查看是否有安装获取直接shiyongwget命令
yum install wget -y
# 安装好进入/usr/local,下载nodejs的二进制文件文件,注意不要下载源码
cd /usr/local
#  https://nodejs.org/dist可以查看对应的版本信息
# 下载以现在结尾的node-v18.20.2-linux-x64.tar.xz,不要下载node-v18.20.2-linux-x64.tar.gz
wget https://nodejs.org/dist/latest-v18.x/node-v18.20.2-linux-x64.tar.xz
# 解压
tar -xvf node-v18.20.2-linux-x64.tar.xz
# 解压后的名称太长可以进行重命名,当然也可以不用重命名,根据个人习惯而定
mv node-v18.20.2-linux-x64 /usr/local/nodejs
# 进入nodejs下的bin目录可以看见npm、node等文件
# 输入./node -v 或者./npm -v,正常情况下基本上可以出现node或者npm的版本信息
cd /usr/local/nodejs/bin
./node -v
./npm -v

测试nodejs安装情况

输入./node -v 或者 ./npm -v理想中的结果是可以看到版本信息

在这里插入图片描述

但是对于node18或以上的版本是存在问题的,实际上会报错(如果不是centos7并且也可以正常启动,那么就不予理会即可,正常使用就可以了)

在这里插入图片描述

原因分析

其实根据打印的信息可以判断处GLIBCheCXXABI和GLIBCXX版本信息匹配不到,gcc动态库版本太老了导致的,即使使用yum update进行更新,libstdc++.so.6也是不会变动的

# 查看当前glibc、cxxabi、glibcxx版本
strings /lib64/libc.so.6 | grep -E "^GLIBC_" | sort -V -r | uniq
strings /lib64/libstdc++.so.6 | grep "CXXABI_"
strings /lib64/libstdc++.so.6 | grep "GLIBCXX_"

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

并且执行ldd --version,glibc的版本也是2.17

在这里插入图片描述

解决方法:

  • 升级gcc和glibc版本(如果有特殊需求可以进行原文件的备份)
  • 使用其他发行版,如Ubuntu或Fedora,这些发行版中默认已经有适用于nodejs18或以上的gcc和glibc(不推荐,常用的Linux其实基本上基于centos的)
  • 使用较低版本的nodejs(较低的LTS版本的),较低版本对于gcc和glibc的支持并不高,安装nodejs即可用,不用进行额外的处理

此处采用升级gcc和glibc的方式解决

解决方案

此处小编极力推荐使用devtoolset-8进行安装

# 安装devtoolset-8
yum install centos-release-scl -y
yum install devtoolset-8 -y
# 启动devtoolset-8,只有启动才能更新gcc和glibc
scl enable devtoolset-8 bash
# 更新gcc和glibc
yum install devtoolset-8-toolchain -y
scl enable devtoolset-8 bash
# 测试更新版本
gcc --version
ldd --version

在这里插入图片描述

很明显,gcc更新时成功的,如果glibc更新成功,那么就可以正常看到node的版本了,但是此处更新并没有成功,还是无法获取node的版本,那么继续进行手动处理升级更新

# 下载glibc,注意不要下载太新的版本
yum install bison -y
cd /usr/local
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/glibc/glibc-2.28.tar.gz
# 解压glibc
tar -zxvf glibc-2.28.tar.gz
# 编译并安装
cd glibc-2.28
mkdir build
cd build
../configure --prefix=/usr
make -j4 && make install

在这里插入图片描述

此时glibc已经更新完毕了,但是还需要继续操作,此时运行node也是不行的

在这里插入图片描述

此处还不能运行是因为libstdc++.so.6.0.26没有更新,可以查看对应的usr的libstdc++.so.6

strings /usr/lib64/libstdc++.so.6 | grep "CXXABI_"
strings /usr/lib64/libstdc++.so.6 | grep "GLIBCXX_"

在这里插入图片描述

# 更新libstdc++.so.6.0.26
cd /usr/local
wget https://cdn.frostbelt.cn/software/libstdc++.so.6.0.26
mv libstdc++.so.6.0.26 /usr/lib64/
cd /usr/lib64
ln -snf ./libstdc++.so.6.0.26 libstdc++.so.6
ll libstdc++.so.6

此时可以正常操作node

在这里插入图片描述

此时配置环境变量和全局的node、npm即可在任何目录下正常运行node和npm

# 配置环境变量
vi /etc/profile
# 添加nodejs的启动路径
PATH=$PATH:/usr/local/nodejs/bin
export PATH
# 保存后重新让profile生效
source /etc/profile
# 此时node和npm均可正常运行使用了,不再局限于任何目录
# 如果不配置profile其实也可以配置软连接,相当于全局变量,效果和配置profile一样
# 推荐使用profile配置,当然两种同时配置也可以
ln -s /usr/local/nodejs/bin/node /usr/local/bin
ln -s /usr/local/nodejs/bin/npm /usr/local/bin

在这里插入图片描述

测试项目

随便上传一个需要node环境的demo,注意依赖要包含在上传的文件中

在这里插入图片描述

此时说明npm命令是没问题的,只不过grunt没有权限,修改该目录的权限即可

# 修改grunt的权限
chmod +x /opt/demo/node_modules/.bin/grunt
# 执行npm
npm run start
# 后台执行npm
npm run start &

在这里插入图片描述

转载请注明出处或者链接地址:https://www.qianduange.cn//article/15783.html
标签
运维
评论
发布的文章

HTML5学习记录

2024-04-29 12:04:01

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!