Ubuntu平台下安装Node相关环境

说明:在进行VUE、TS等开发需要用到NodeJS相关环境,不同的项目有时候需要不同的Node版本支撑。本文将详细讲解NVM、Node、Yarn、PM2等环境安装的实施步骤。

测试服务器环境:22.04 LTS。

1. NVM

定义:Node Version Manager(Node.js版本管理工具),简称nvm,是一个用于管理多个Node.js版本的命令行工具。它允许开发者在同一台机器上安装和切换不同版本的Node.js,从而解决不同项目对不同Node.js版本的依赖问题。

Githubnvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions

安装方式:

1)通过官网脚本:

复制代码
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
# 或者 
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash

这个方式安装很可能报错。可以考虑用下文的手动方式。

2)源码安装:

复制代码
# 直接从github官网下载最新的release版本源码包,或者git clone下载源码。
# 本文安装版本 nvm-0.40.2,2025年3月27日,存放在某路径下,比如 ~ 路径。
cd /opt/nvm-0.40.2   # 本文存放在 /opt 目录下

# activate nvm by sourcing it from your shell: 
. ./nvm.sh

# add these lines to your ~/.bashrc, ~/.profile, or ~/.zshrc file to have it automatically sourced upon login: (you may have to add to more than one of the above files)
# 可以选择 .bashrc 和 .profile 文件。编辑如下:
export NVM_DIR="/opt/nvm-0.40.2"
[ -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
source ~/.profile

# 注意:如果在不同用户下,则可能均要去 ~ 目录中进行配置。

常用指令:

复制代码
# 安装最新版本
nvm install node # "node" is an alias for the latest version

# install a specific version of node
nvm install 18.20.8 # or v18.20.8, 12.22.1, etc

# set an alias
nvm alias my_alias v18.20.8
# Make sure that your alias does not contain any spaces or slashes.

# 列出当前可安装版本
nvm ls-remote

# 查看已安装的Node.js版本
nvm list

# 使用指定版本,在不同版本之间切换
nvm use 版本号

# 卸载指定版本
nvm uninstall 版本号

# 查看当前版本
nvm current
nvm version # 在Linux上显示的是node当前版本
nvm --version # 显示nvm本身的版本

# 查看路径
nvm which 18.20.8
# /opt/nvm-0.40.2/versions/node/v18.20.8/bin/node

2. NodeJS

有了上面 NVM的管理,可以直接跳转到 5)进行设置处理。

1)更新系统包管理器 apt 和 apt-get (下载压缩包安装,可以直接跳转到 4)进行处理)

复制代码
sudo apt update
sudo apt-get update

2)使用apt进行安装

复制代码
sudo apt-get install nodejs     # 下载nodejs
sudo apt-get install npm        #下载npm,它是nodejs的包管理器(nodejs package manager)

3)升级npm

复制代码
npm install npm -g

在我的服务器上因为版本问题安装升级失败,考虑将apt方式安装的版本卸载。

复制代码
sudo apt-get remove --purge npm
sudo apt-get remove --purge nodejs
sudo apt-get remove --purge nodejs-legacy
sudo apt-get autoremove

然后手动删除 npm 相关目录,通过find / -name npm 查找,主要是 usr/local/lib 和 usr/local/bin 等目录下内容。

4)从官网下载安装 从官网(Node.js --- Download Node.js®)下载版本:node-v16.13.2-linux-x64.tar.xz,上传至服务器,解压。

复制代码
xz -d node-v16.13.2-linux-x64.tar.xz
tar -xvf node-v16.13.2-linux-x64.tar

建立软链接:

复制代码
ln -s /home/nodejs/node-v16.13.2-linux-x64/bin/node /usr/local/bin/
ln -s /home/nodejs/node-v16.13.2-linux-x64/bin/npm /usr/local/bin/
ln -s /home/nodejs/node-v16.13.2-linux-x64/bin/npx /usr/local/bin/

5)设置国内镜像加速

复制代码
npm config -g get registry
# 旧的淘宝镜像已失效
# sudo npm config -g set registry https://registry.npm.taobao.org
# 新的淘宝镜像
sudo npm config -g set registry https://registry.npmmirror.com

6)安装cnpm(可选)

国内的npm不是很好用,使用cnpm代替npm的日常使用。

复制代码
npm install cnpm -g

安装完后,可以看到node的bin目录下,多了cnpm,也需要建立一下软链接:

复制代码
ln -s /home/nodejs/node-v16.13.2-linux-x64/bin/cnpm /usr/local/bin/

3. Yarn

Yarn 是一个快速、可靠、安全的依赖管理工具,主要用于 JavaScript 项目,但它也可以用于其他语言和框架。它允许开发者轻松地安装、更新和管理项目所需的软件包。安装yarn方式如下:

复制代码
npm install yarn -g
# 设置国内加速
# yarn config set registry https://registry.npm.taobao.org/
# 新的淘宝镜像
yarn config set registry https://registry.npmmirror.com -g
# -g 一定放在后面,否则报错

如果出现下面的错误:

复制代码
npm ERR! code CERT_HAS_EXPIRED
npm ERR! errno CERT_HAS_EXPIRED
npm ERR! request to https://registry.npm.taobao.org/yarn failed, reason: certificate has expired

npm ERR! A complete log of this run can be found in: /root/.npm/_logs/2024-03-01T01_09_52_672Z-debug-0.log

则解决方案:

复制代码
# 清除npm缓存
npm cache clean --force

# 取消ssl验证:
npm config set strict-ssl false

再次执行安装,即可。

查看安装情况:

复制代码
npm list -global

但在系统中执行yarn,提示命令找不到,这个时候需要和 node一样,做一个软链接。

复制代码
ln -s /opt/node/bin/yarn /usr/local/bin/

yarn的常用指令

复制代码
yarn init:快速初始化一个项目,生成 package.json 文件。
yarn add <package> 命令安装指定的软件包。
yarn upgrade <package> 命令更新指定软件包到最新版本。
yarn remove <package> 命令卸载不再需要的软件包。

yarn install:安装 package.json 中列出的所有依赖。
yarn install --force:强制重新安装所有依赖,忽略缓存。
yarn upgrade <package>:升级指定包到最新版本。
yarn upgrade:升级所有包到最新版本。

yarn run <script>:运行 package.json 中定义的脚本,例如 yarn run start 或 yarn run build。
yarn <script>:直接运行脚本,例如 yarn start 或 yarn build。

yarn cache clean:清理 Yarn 的全局缓存。
yarn cache dir:查看缓存目录。

yarn info <package>:查看包的详细信息,包括版本、依赖等。
yarn list <package>:列出项目中已安装的指定包及其版本。

yarn优势

  • 速度:相比传统的 npm,Yarn 在安装依赖时速度更快,因为它可以并行处理多个请求。
  • 可靠性:Yarn 使用锁定文件(yarn.lock)来确保在不同环境中安装的依赖版本一致。
  • 安全性:在安装过程中验证软件包的完整性,防止恶意软件的入侵。

4. PM2

PM2(Process Manager 2 )是具有内置负载均衡器的Node.js应用程序的生产运行时和进程管理器。 它允许您永久保持应用程序活跃,无需停机即可重新加载它们,并促进常见的Devops任务。

4.1 PM2特性

1)日志管理:应用程序日志保存在服务器的硬盘中~/.pm2/logs/

2)负载均衡:PM2可以通过创建共享同一服务器端口的多个子进程来扩展您的应用程序。这样做还允许您以零秒停机时间重新启动应用程序。

3)终端监控:可以在终端中监控您的应用程序并检查应用程序运行状况(CPU使用率,使用的内存,请求/分钟等)。

4)SSH部署:自动部署,避免逐个在所有服务器中进行ssh。

5)静态服务:支持静态服务器功能

6)多平台支持:适用于Linux(稳定)和macOS(稳定)和Windows(稳定)

4.2 PM2安装

复制代码
npm install pm2 -g
# 或者 
yarn global add pm2
 # 或者
apt update && apt install sudo curl && curl -sL https://raw.githubusercontent.com/Unitech/pm2/master/packager/setup.deb.sh | sudo -E bash -

安装完毕后,可以通过 npm list -global 查看:

这个时候还需要建立软链接:

复制代码
ln -s /opt/node/bin/pm2 /usr/local/bin/

这样就可以直接使用 pm2 指令了。

4.3 PM2使用

复制代码
# 启动服务:
pm2 start app.js                //启动app.js应用
pm2 start app.js --name demo    //启动应用并设置name
pm2 start app.sh                //脚本启动
# 针对复杂的指令,避免执行问题,可以新建一个脚本文件来处理。

# 停止服务:
pm2 stop all               //停止所有应用
pm2 stop [AppName]        //根据应用名停止指定应用
pm2 stop [ID]             //根据应用id停止指定应用

# 删除应用:
pm2 delete all               //关闭并删除应用
pm2 delete [AppName]        //根据应用名关闭并删除应用
pm2 delete [ID]            //根据应用ID关闭并删除应用

# 创建开机自启动:
pm2 startup
# 会自动新建一个后台服务启动脚本
#[PM2] Freeze a process list on reboot via:
pm2 save
#[PM2] Remove init script via:
pm2 unstartup systemd

# 更新:
pm2 updatePM2
pm2 update

# 监听模式:
pm2 start app.js --watch    //当文件发生变化,自动重启

# 静态服务器:
pm2 serve ./dist 9090        //将目录dist作为静态服务器根目录,端口为9090

# 启用集群模式(自动负载均衡):
//max 表示PM2将自动检测可用CPU的数量并运行尽可能多的进程
//max可以自定义,如果是4核CPU,设置为2者占用2个
pm2 start app.js -i max

# 重新启动:
pm2 restart app.js        //同时杀死并重启所有进程。短时间内服务不可用。生成环境推荐使用reload

# 0秒停机重新加载:
pm2 reload app.js        //重新启动所有进程,始终保持至少一个进程在运行
pm2 gracefulReload all   //优雅地以群集模式重新加载所有应用程序

# 查看启动列表:
pm2 list

# 查看每个应用程序占用情况:
pm2 monit

# 显示应用程序所有信息:
pm2 show [Name]      //根据name查看
pm2 show [ID]        //根据id查看

# 日志查看:
pm2 logs            //查看所有应用日志
pm2 logs [Name]    //根据指定应用名查看应用日志
pm2 logs [ID]      //根据指定应用ID查看应用日志

# 保存当前应用列表:
pm2 save

# 重启保存的应用列表:
pm2 resurrect

# 清除保存的应用列表:
pm2 cleardump

# 保存并恢复PM2进程:
pm2 update

PM2配置文件方式:

生成配置文件:

复制代码
pm2 ecosystem        //生成一个示例JSON配置文件
pm2 init

配置文件示例:

复制代码
module.exports = {
    apps : [{
        name      : 'API',      //应用名
        script    : 'app.js',   //应用文件位置
        env: {
            PM2_SERVE_PATH: ".",    //静态服务路径
            PM2_SERVE_PORT: 8080,   //静态服务器访问端口
            NODE_ENV: 'development' //启动默认模式
        },
        env_production : {
            NODE_ENV: 'production'  //使用production模式 pm2 start ecosystem.config.js --env production
        },
        instances:"max",          //将应用程序分布在所有CPU核心上,可以是整数或负数
        watch:true,               //监听模式
        output: './out.log',      //指定日志标准输出文件及位置
        error: './error.log',     //错误输出日志文件及位置,pm2 install pm2-logrotate进行日志文件拆分
        merge_logs: true,         //集群情况下,可以合并日志
        log_type:"json",          //日志类型
        log_date_format: "DD-MM-YYYY",  //日志日期记录格式
    }],
    deploy : {
        production : {
            user : 'node',                      //ssh 用户
            host : '212.83.163.1',              //ssh 地址
            ref  : 'origin/master',             //GIT远程/分支
            repo : '[email protected]:repo.git',   //git地址
            path : '/var/www/production',       //服务器文件路径
            post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production'  //部署后的动作
        }
    }
};
相关推荐
喝拿铁写前端30 分钟前
前端与 AI 结合的 10 个可能路径图谱
前端·人工智能
codingandsleeping34 分钟前
浏览器的缓存机制
前端·后端
-代号95271 小时前
【JavaScript】十二、定时器
开发语言·javascript·ecmascript
灵感__idea2 小时前
JavaScript高级程序设计(第5版):扎实的基本功是唯一捷径
前端·javascript·程序员
摇滚侠2 小时前
Vue3 其它API toRow和markRow
前端·javascript
難釋懷2 小时前
JavaScript基础-history 对象
开发语言·前端·javascript
beibeibeiooo2 小时前
【CSS3】04-标准流 + 浮动 + flex布局
前端·html·css3
拉不动的猪2 小时前
刷刷题47(react常规面试题2)
前端·javascript·面试
浪遏2 小时前
场景题:大文件上传 ?| 过总字节一面😱
前端·javascript·面试
计算机毕设定制辅导-无忧学长3 小时前
HTML 与 JavaScript 交互:学习进程中的新跨越(一)
javascript·html·交互