背景:nodejs中台服务需要迁移到新的服务器上,为此需要搭建一套用pm2管理node服务的环境。统一用户名为kredit。
安装node/npm
方法一:下载安装包,可用wget下载。但是安装目录什么的比较麻烦,所以考虑用自动化安装工具。
方法二:自动化安装工具apt-get
apt-get 下载安装:
sudo apt-get install nodejs
但是下载的node/npm版本异常的老。原本以为是源的问题(因为源是指向公司内网库的),把源修改成阿里的源再试,还是老版本。
查资料说apt再下一些插件可以提高版本,但是对Ubuntu 16.04.6版本好像不太ok,没做尝试。先把apt下载的低版本node卸掉吧(https://www.jianshu.com/p/53a1e12bb790)
方法三(推荐):安装nvm,再由此安装node/npm。
linux 安装 nvm
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
默认安装在用户目录下 /home/kredit/.nvm
由 nvm 安装指定版本 node(顺带会把匹配的 npm 安装了)
$ nvm install v12.14.1
由 node 全局安装 pm2
npm install pm2 -g
配置环境变量
假如你是用 kredit 用户完成这一切的,那么现在只有kredit用户有node/npm的环境变量。
但是我们的目标是root(即sudo)和其他用户都有node/npm环境变量。
自然考虑在全局变量文件 /etc/profile 里添上
sudo vim /etc/profile
#文件末尾加上
export PATH=$PATH:/home/kredit/.nvm/versions/node/v12.14.1/bin
然蛾,当你执行如下语句发现如下结果,就会得到以下结论。
root用户,node指向/usr/bin/node。是默认的配置,哪里改还没研究。
# which node /usr/bin/node
$ sudo which node /usr/bin/node
而普通用户,因为etc/profile的配置,指向/home/kredit/.nvm/versions/node/v12.14.1/bin/node
$ which node /home/kredit/.nvm/versions/node/v12.14.1/bin/node
$ whereis node /home/kredit/.nvm/versions/node/v12.14.1/bin/node
但是,/usr/bin/node下根本没有node和npm,我们的执行文件目录在 /home/kredit/.nvm/versions/node/v12.14.1/bin上。
所以当你执行sudo npm -v的时候会报错 “/usr/bin/env: node: No such file or directory”。
解决办法是,创建一个软连接将自己的node的执行文件指到/usr/bin/node上,于是修改如下:
sudo ln -s /home/kredit/.nvm/versions/node/v12.14.1/bin/npm /usr/bin/npm
sudo ln -s /home/kredit/.nvm/versions/node/v12.14.1/bin/node /usr/bin/node
好了,现在无论是公共用户kredit,还是小伙伴自己登陆的账户,还是root,都可以有全局变量node和npm了。