想在服务器上跑 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.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 项目在服务器上一般都能跑得比较顺畅。如果优化之后访问还是慢,那就要从服务器配置和网络线路上找原因了。

总结
服务器安装 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。









