3 种服务器安装 Node 和 NPM 的常用方法

想在服务器上跑 Node.js 写的程序,不管是 Next.js 网站、Telegram 机器人、AI 工具,还是一些需要 npm 安装的小工具,第一步都是在 VPS 上安装 Node 和 NPM。

可同样是装 Node,有人一条命令就搞定,有人装完发现版本太老,项目根本跑不起来。

这些年我在不同的服务器上装过不少次 Node,用得比较多的就是 3 种方式:直接用系统自带的软件源、用 NodeSource 官方源,以及用 nvm 管理多个版本。

这篇文章我就把这 3 种服务器安装 Node 的方法整理出来,每一步都附上可以直接复制的命令,也会讲讲我平时怎么选。你可以先看看自己的需求,再挑一种照着装。

安装 Node 之前,先确认这几件事

很多人拿到服务器,第一件事就是搜一条命令直接粘贴执行。我以前也这样干过,结果装完才发现系统里本来就有一个旧版 Node,两个版本互相冲突,排查了半天。

所以在服务器安装 Node 之前,下面这几条命令需要你登录 SSH 后依次执行:

  • 查看系统版本:cat /etc/os-release
  • 查看 CPU 架构:uname -m,返回 x86_64 是常见的 Intel/AMD 架构
  • 检查是否装过 Node:node -v 和 which node
  • 查看内存情况:free -h

系统版本决定了后面用 apt 还是 dnf 安装,架构决定了下载哪种安装包。

如果 node -v 有返回版本号,说明之前装过,建议先弄清楚是用哪种方式装的,再决定要不要卸载,不然后面很容易出现“明明装了新版本,查出来还是旧版本”的情况。

确认完之后,顺手把系统软件包更新一下。Ubuntu 和 Debian 用这条:

apt update && apt upgrade -y

CentOS、Rocky Linux、AlmaLinux 用这条:

dnf update -y

该装哪个 Node 版本?

还有一个问题经常被问到:Node 版本那么多,到底装哪个?

我的建议很简单,服务器上跑项目就选 LTS 版本,也就是长期支持版。它的更新以修复问题和安全补丁为主,不会隔三差五给你来个大改动,适合需要稳定运行的环境。

服务器安装 Node 环境
服务器安装 Node 环境

最近 Node.js 的版本节奏刚好有变化,这里也说一下。

按照 Node.js 官方公布的时间表,Node.js 26 在 2026 年 10 月 28 日进入 LTS,支持到 2029 年 4 月 30 日;Node.js 24 则在 10 月 20 日结束活跃支持期,维护到 2028 年 4 月 30 日。另外从 Node.js 27 开始,官方改为每年只发布一个大版本,不再区分奇偶数。

落到实际选择上,新项目可以直接用 Node 26。如果你部署的是别人写好的开源项目,先看一下它文档里要求的版本,很多项目还标注着 Node 22 或 24,按项目要求来最省心。

服务器安装 Node 的方法怎么选?

前面提到网上的方法五花八门,其实归纳下来常用的安装方法就 3 种。

系统自带软件源、NodeSource 官方源和 nvm。它们都能把 Node 和 NPM 装上,区别主要在版本新旧、操作难度。我把这 3 种方法放在一张表里,你可以先对照看一下:

安装方式版本新旧操作难度多版本切换适合谁
系统自带软件源偏旧最简单不支持只想跑个小工具
NodeSource 源可指定新版本简单不方便项目、生产环境
nvm任意版本稍复杂支持多项目、测试

说说我自己的习惯。

如果一台服务器只跑一个正式项目,比如一个 Next.js 网站或者一个后端接口服务,我基本都用 NodeSource 官方源。它装出来的 Node 是全局的,所有用户、PM2、定时任务都能用。

如果是测试机,或者多个项目,需要多个 Node 版本,那就推荐用 nvm。比如一个老项目只能跑在 Node 22,新项目又要用 Node 26,用 nvm 一条命令就能切换,不用来回卸载重装。

系统自带软件源我现在用得比较少。它确实是最省事的,一条命令就装完,但很多系统软件源里的 Node 版本比较老,装上之后经常发现项目要求的版本更高,还是得用另外的方法装。

如果你还拿不准,我的建议是:新手直接看方法二,照着装基本不会出错;需要管理多个版本,选择方法三就行。下面我就按顺序把每种方法的具体步骤写出来。

方法一:用系统自带软件源安装 Node

这是最省事的一种服务器安装 Node 方式,不需要添加任何第三方源,用系统自带的包管理器就能装好。适合临时跑个小工具、对版本没有要求的场景。

Ubuntu / Debian 安装命令

在 Ubuntu 和 Debian 上,Node 和 NPM 是两个独立的软件包,需要一起装:

apt install -y nodejs npm

装完之后检查一下版本:

node -v
npm -v

能正常返回版本号,就说明服务器安装 Node 和 NPM 成功了。这里提醒一句,有些老教程会让你执行 nodejs -v,那是早期 Ubuntu 上的命名问题,现在的系统直接用 node 就行。

CentOS / Rocky / AlmaLinux 安装命令

红帽系的系统会麻烦一点。在 Rocky Linux 9、AlmaLinux 9 这类系统上,软件源里通常提供了好几个 Node 版本,需要先看看有哪些可选:

dnf module list nodejs

列表里会显示可安装的版本号,选一个你需要的,比如 22,然后执行:

dnf module install -y nodejs:22

如果你执行 dnf module list nodejs 没有返回任何内容,说明系统没有使用模块方式管理 Node,这时直接安装就可以:

dnf install -y nodejs npm

至于 CentOS 7,官方早就停止维护了,软件源里的 Node 版本非常老,我不建议在上面折腾,能换系统的话尽量换成 Rocky、AlmaLinux 或者 Debian。

这种方法的不足:版本往往比较旧

系统软件源最大的问题就是版本。Linux 发行版为了稳定,软件版本一般在系统发布时就定下来了,之后很少大版本升级。我遇到过不少次,在一台装了一两年的 Ubuntu 上用 apt 装完 Node,一看版本号,比项目要求的低了两三个大版本,npm install 直接报错。

所以用这种方法装完,我建议第一时间对照一下项目要求的版本:

  • 版本满足要求:可以直接用,后续跟着系统更新就行
  • 版本太低:先卸载,再用方法二或方法三重新装

卸载的命令也很简单,Ubuntu / Debian 执行 apt remove -y nodejs npm,红帽系执行 dnf remove -y nodejs npm。卸载干净之后再换其他方式安装,能避免新旧版本互相干扰。

如果你一开始就知道项目需要比较新的 Node 版本,那直接看下面的方法二。

方法二:用 NodeSource 官方源安装

NodeSource 是一家专门做 Node.js 服务的公司,长期维护着 Node 的 Linux 软件源。用它来做服务器安装 Node,最大的好处是可以指定版本,比如明确装 Node 26 或者 Node 24。

我自己的正式项目基本都是这么装的。一台服务器跑一个网站或接口服务,Node 装在全局,PM2、systemd、定时任务都能直接找到它,后面维护起来很省心。

开始之前提醒一下:如果你用方法一装过系统自带的 Node 和 NPM,先把它们卸载掉,再执行下面的步骤。在 Ubuntu 上,系统源里的 npm 和 NodeSource 的 nodejs 包会发生冲突。

添加 NodeSource 源并安装 Node

下面的命令默认你用的是 root 用户,如果是普通用户,在命令前加上 sudo 即可。

Ubuntu / Debian 先添加 Node 26 的软件源:

curl -fsSL https://deb.nodesource.com/setup_26.x -o nodesource_setup.sh
bash nodesource_setup.sh

然后安装 Node:

apt install -y nodejs

Rocky Linux、AlmaLinux 这类红帽系系统,命令换成:

curl -fsSL https://rpm.nodesource.com/setup_26.x | bash -
dnf install -y nodejs

如果你的项目要求 Node 24,把命令里的 26 改成 24 就行,其他步骤完全一样。

你可能注意到了,这里只装了 nodejs,没有装 npm。这不是漏写,NodeSource 的 nodejs 安装包已经把 npm 和 npx 打包在里面,不需要再单独安装。

我习惯先把脚本下载到本地再执行,有需要的可以检测脚本内容。脚本在运行时会自动更新软件列表、安装需要的依赖,并且清掉之前添加过的旧版 NodeSource 源和密钥。

验证 Node 和 NPM 是否安装成功

装完之后,执行下面几条命令确认一下:

node -v
npm -v
which node

node -v 返回 v26.x.x 这样的版本号,npm -v 也有正常输出,就说明服务器安装 Node 和 NPM 已经完成了。which node 一般会返回 /usr/bin/node,这个路径在配置 systemd 服务时需要。

如果 node -v 显示的还是旧版本,大概率是之前用其他方式装过 Node 没有清理干净。

以后怎么升级 Node 版本

用 NodeSource 安装的 Node,升级分两种情况。

同一个大版本内的小更新,比如从 26.1 升到 26.3,跟着系统更新走就行:

apt update && apt upgrade -y

如果要跨大版本,就需要重新执行一遍对应版本的 setup 脚本,再安装一次 nodejs:

curl -fsSL https://deb.nodesource.com/setup_26.x -o nodesource_setup.sh
bash nodesource_setup.sh
apt install -y nodejs

跨大版本升级前,我建议先确认项目是否支持新版本,最好在测试机上跑一遍。尤其是用了原生扩展的 npm 包,升级 Node 之后往往需要删掉 node_modules 重新 npm install。

生产环境升级前,建议提前做好快照或者备份,出问题也能快速回滚。

方法三:用 nvm 安装和管理 Node

nvm 是一个 Node 版本管理工具,它能把多个版本都放在当前用户的目录下,需要哪个就切换到哪个。例如测试环境多个项目,有的需要 Node 22,有的要 Node 26,用 nvm 是最灵活的。

我平时的测试环境都是装的 nvm 工具。比如拿到一个开源项目,文档写着需要 Node 24,我装一个 24 跑起来试试,试完不想要了,一条命令删掉,不会影响服务器上其他项目。

开始之前同样提醒一下:nvm 最好不要和方法一、方法二混着用。

安装 nvm

nvm 官方提供了一键安装脚本,执行下面这条命令即可:

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

写这篇文章的时候,nvm 的最新版本是 v0.40.7。你安装时可以去 nvm 的 GitHub 发布页看一下有没有更新的版本,把命令里的版本号替换掉就行。尽量用新版本,更加安全。

脚本执行完,会自动在 ~/.bashrc 里写入加载 nvm 的配置。这时候需要让配置生效,可以重新登录 SSH,或者执行:

source ~/.bashrc

然后检查 nvm 是否装好:

nvm -v

能输出版本号就没问题了。如果提示 nvm: command not found,基本都是配置没生效,退出 SSH 重新连接一次通常就能解决。

用 nvm 安装 Node 并设为默认版本

nvm 装好之后,安装 Node 就很简单了。比如安装 Node 26:

nvm install 26

nvm 会自动下载 Node 26 的最新小版本,NPM 也会跟着一起装好,不需要单独处理。装完之后,把它设为默认版本,这样每次登录服务器都会自动使用它:

nvm alias default 26

最后照例检查一下:

node -v
npm -v

如果你的服务器在国内,nvm 从官方地址下载 Node 可能会很慢,甚至直接失败。这种情况可以临时指定国内镜像再安装:

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

想长期生效的话,把 export 那一行加到 ~/.bashrc 末尾就可以了。

多个项目需要不同版本时怎么切换

这是 nvm 最实用的地方。假设你还需要 Node 24,先装上:

nvm install 24

查看服务器上已经装了哪些版本:

nvm ls

需要用哪个版本,就切换到哪个:

nvm use 24

nvm use 只对当前这个 SSH 会话生效,退出重新登录后又会回到默认版本。

如果某个项目长期固定用 Node 24,我更推荐在项目根目录放一个 .nvmrc 文件,里面只写一行 24。以后进入这个目录执行 nvm use,nvm 会自动读取文件里的版本,不用记版本号。

不需要的版本也可以随时卸载:

nvm uninstall 24

nvm 的注意事项:别让 PM2 和定时任务找不到 Node

nvm 灵活,但也有它的坑,我踩过最多的就是这几个:

  • 只对当前用户生效:用 root 装的 nvm,切换到其他用户是找不到 Node 的。
  • systemd 服务找不到 node:systemd 启动时不会加载 ~/.bashrc,服务配置里直接写 node 会报错,需要写完整路径。
  • 定时任务同样的问题:crontab 里执行 Node 脚本,也要写完整路径。

完整路径可以用 which node 查到,一般长这样:/root/.nvm/versions/node/v26.x.x/bin/node。因为路径里带着具体版本号,升级 Node 路径就会变,systemd 和 crontab 就要跟着改。

如果你用 PM2 管理项目,执行 pm2 startup 时,PM2 会根据当前环境生成一条带完整路径的命令,照着复制执行就行。不过升级后,同样建议重新执行一次 pm2 startup 和 pm2 save。

也正是因为这些问题,生产环境我一般还是用方法二。

装好 Node 之后建议做的几件事

服务器安装 Node 和 NPM 只是第一步,真要把项目跑起来、长期稳定运行,还有几件事最好一起做了。下面的操作我以方法二(NodeSource 安装)为准,这是我用得最多的方式。

如果你用的是 nvm,大部分命令一样,区别主要有两点:全局安装包不需要加 sudo,PM2 开机自启在升级 Node 版本后要重新配置一次,具体可以回看上一节的注意事项。

npm 换国内镜像(服务器在国内时)

npm 默认从官方仓库下载依赖包,服务器在国内的话(例如腾讯云),npm install 经常慢得让人怀疑人生。这时候可以把下载源换成国内镜像:

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

换完之后确认一下:

npm config get registry

返回 https://registry.npmmirror.com/ 就说明生效了。

不过要提醒一句,如果你的服务器在美国、日本、新加坡这些海外地区,就没必要换了。海外服务器访问 npm 官方仓库本来就很快,换成国内镜像反而可能变慢。

如果你想恢复官方源,执行这条命令就行:

npm config set registry https://registry.npmjs.org

全局安装包的权限问题

用方法二安装的 Node,全局包会装在系统目录下,比如 /usr/lib/node_modules。如果你是用 root 登录的服务器,直接执行全局安装没有任何问题:

npm install -g pm2

如果是普通用户,执行同样的命令会报 EACCES 权限错误,这时在命令前加上 sudo 就行了:

sudo npm install -g pm2

网上有些教程会教你用 chmod 或 chown 去改系统目录的权限,来绕开这个报错。

但是我不建议这样做,改乱了系统目录的权限,后面出问题更难排查。像 PM2 这种整台服务器都要用的工具,用 sudo 全局安装是最规矩的做法。

用 PM2 让 Node 项目常驻后台、开机自启

很多新手第一次在服务器上跑 Node 项目,会直接执行 node app.js,结果一关掉 SSH 窗口,网站就打不开了。这是因为程序跟着终端一起退出了。生产环境里,我一般用 PM2 来管理 Node 项目,它能让程序在后台运行,崩溃了自动重启,服务器重启后也能自动拉起来。

PM2 前面已经全局安装好了,进入项目目录启动项目:

pm2 start app.js --name myapp

如果你的项目是通过 npm start 启动的,比如 Next.js 这类框架,命令换成:

pm2 start npm --name myapp -- start

启动之后,用下面几条命令就能查看运行状态和日志:

pm2 list
pm2 logs myapp

接下来设置开机自启,这一步很多人会漏掉:

pm2 startup systemd
pm2 save

pm2 startup 会生成开机自启的服务,如果你是普通用户,它会输出一条带 sudo 的命令,复制下来执行就行。pm2 save 则是把当前正在运行的项目列表保存下来,服务器重启后 PM2 会按这个列表把项目重新启动。以后新增或删除了项目,记得再执行一次 pm2 save。

最后再推荐一个我每台服务器都会装的插件:

pm2 install pm2-logrotate

PM2 默认会一直往日志文件里写内容,项目跑久了,日志可能占掉几个 G 的磁盘空间。

我之前就遇到过磁盘被日志写满,导致网站直接打不开的情况。装上这个插件后,日志会自动按大小切割,并只保留最近的几份,能省掉不少麻烦。

基础的性能优化建议

项目跑起来之后,不少人会发现同样的代码,放在服务器上反而没有本地电脑快,或者跑一段时间内存越占越多。其实很多时候不需要改代码,做几个基础设置就能改善不少。

下面这几条是我部署 Node 项目时的常规操作,不涉及复杂调优,照着做就行。

1. 以生产模式运行项目

很多 Node 框架会根据 NODE_ENV 这个变量决定运行模式。开发模式下会开启调试信息、热更新这些功能,占用更多资源。正式上线时,记得用生产模式启动:

NODE_ENV=production pm2 start app.js --name myapp

像 Express 这类框架,开启生产模式后会缓存模板,响应速度会有明显提升。Next.js 这类项目,则要先执行 npm run build 再用 npm start 启动,别直接拿 npm run dev 跑在服务器上。

2. 多核服务器开启 PM2 集群模式

Node 默认只用一个 CPU 核心,你的服务器就算有 4 核,项目也只吃满其中一个。PM2 的集群模式可以按 CPU 核心数启动多个进程,一起分担访问请求:

pm2 start app.js --name myapp -i max

-i max 表示按 CPU 核心数自动启动进程,也可以写具体数字,比如 -i 2。

不过要注意,如果你的项目把用户登录状态、缓存数据存在程序内存里,开集群后不同进程之间数据不共享,可能出现用户莫名其妙掉线。要先把数据存到 Redis 或数据库再开集群。

如果你是 1 核的小内存 VPS 就没必要开了,反而会多占内存。

3. 给项目设置内存上限

有些项目跑久了内存会慢慢涨上去,小内存 VPS 很容易被拖垮,连 SSH 都连不上。我一般会给 PM2 加一个内存上限,超过后自动重启进程:

pm2 start app.js --name myapp --max-memory-restart 300M

数值根据服务器内存来定,1GB 内存的 VPS 我通常设在 300M 到 400M 之间,给系统和数据库留出空间。这只是兜底手段,如果项目频繁触发重启,还是要回头排查是不是有内存泄漏。

4. 用 Nginx 反向代理,静态文件交给 Nginx 处理

生产环境里,我不建议让 Node 项目直接对外暴露 3000 这类端口,而是在前面加一层 Nginx。用户访问先到 Nginx,再由 Nginx 转发给 Node。这样做的好处有几个:

  • 图片、CSS、JS 这类静态文件由 Nginx 直接返回,速度更快,Node 只处理动态请求
  • 可以在 Nginx 上开启 Gzip 压缩,减少传输体积
  • 配置 HTTPS 证书更方便,也不用对外开放额外端口

如果你用的是宝塔或 1Panel 面板,创建网站时选择反向代理,填上 Node 项目的端口就能完成配置,不用手写 Nginx 配置文件。

5. 小内存服务器记得加 Swap

1GB 及以下内存的 VPS,在执行 npm install 或构建项目时,内存很容易瞬间被吃满,进程直接被系统杀掉。加一个 1GB 到 2GB 的 Swap 能起到缓冲作用,点击深入了解 Swap。

Swap 只是应急方案,如果项目平时运行就经常用到 Swap,就该考虑升级服务器配置了。

这几条做完,一个中小型 Node 项目在服务器上一般都能跑得比较顺畅。如果优化之后访问还是慢,那就要从服务器配置和网络线路上找原因了。

VPS 服务器安装 Node
VPS 服务器安装 Node

总结

服务器安装 Node 和 NPM 其实不难,难的是选对方式。

  • 系统自带软件源最省事,但版本往往偏旧,适合临时跑个小工具;
  • NodeSource 官方源可以指定版本,装在全局,是我在生产环境最常用的方式;
  • nvm 最灵活,适合测试机或者一台服务器上跑多个不同版本需求的项目。

如果你不确定选哪个,就按方法二来装,装好之后顺手把 PM2 和开机自启配置上,日志切割插件也装上,项目基本就能稳定跑起来了。

常见问题解答(FAQ)

Q1:Node 和 NPM 需要分开安装吗?

要看你用哪种方式。

用系统自带软件源安装时,Node 和 NPM 是两个独立的包,需要一起装。用 NodeSource 官方源或 nvm 安装时,NPM 已经包含在内,装好 Node 就能直接用 npm 命令。

Q2:服务器上应该装哪个 Node 版本?

一般选 LTS 长期支持版。

现在新项目可以直接用 Node 26,部署别人写好的开源项目,就按项目文档要求的版本来装。如果是给已经在运行的项目升级版本,建议先做好快照或备份,出问题能快速回滚。

Q3:宝塔或 1Panel 面板能直接安装 Node 吗?

可以。两个面板都提供了 Node 运行环境的方式,在应用商店或网站管理里点几下就能装好 Node 环境,只需要上传源码即可轻松部署,对不熟悉命令行的站长更友好。

Q4:Node 网站放在国外服务器上,国内访问很慢怎么办?

Node 程序本身一般不是慢的原因,大多数情况是服务器到国内的线路不好,晚上高峰期延迟高、丢包多。可以换一台带优化线路的服务器,比如美国 CN2 GIA VPS。

发表评论