1. 简介:为什么 Linux 是 Node.js 的理想平台?
Linux 作为服务器操作系统的首选,与 Node.js 的事件驱动架构完美契合:
- 性能优势:Linux 内核的高效 I/O 处理能力
- 稳定性:Linux 系统的长期稳定性和可靠性
- 资源效率:更少的系统开销,更高的并发处理能力
在 Linux 系统上安装 Node.js 的五种主要方法,包括官方仓库、NodeSource、NVM、Snap 包及二进制包。内容涵盖安装前准备、环境验证、NPM 配置优化、版本管理工具(NVM/N)的使用、卸载步骤以及生产环境的安全与性能最佳实践。通过对比不同方法的优缺点,帮助开发者根据实际需求选择合适的安装方案,并提供常见问题解决方案。
Linux 作为服务器操作系统的首选,与 Node.js 的事件驱动架构完美契合:
# 检查发行版和版本
cat /etc/os-release
# 检查系统架构
uname -m
lscpu | grep "Architecture"
# 示例输出
# NAME="Ubuntu"
# VERSION="20.04.3 LTS (Focal Fossa)"
# Architecture: x86_64
# Ubuntu/Debian
sudo apt update
sudo apt install -y curl wget build-essential
# CentOS/RHEL/Fedora
sudo yum update
sudo yum install -y curl wget gcc-c++ make
# openSUSE
sudo zypper refresh
sudo zypper install -y curl wget gcc-c++ make
# 添加 NodeSource 仓库
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
# 安装 Node.js
sudo apt-get install -y nodejs
# 验证安装
node -v
npm -v
# 添加 NodeSource 仓库
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
# 安装 Node.js
sudo yum install -y nodejs
# 验证安装
node -v
npm -v
NodeSource 提供最新版本的 Node.js,支持多个版本选择:
# 查看 Node.js 版本列表
curl -o- https://raw.githubusercontent.com/nodesource/distributions/master/distributions.txt | grep -E '^[^[:space:]]' | cut -f 1 -d ' '
# 安装特定版本(例如 18.x)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
NVM (Node Version Manager) 允许在同一系统上安装和管理多个 Node.js 版本:
# 下载并安装 NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
# 或者使用 wget
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
# 重新加载终端配置
source ~/.bashrc
# 验证 NVM 安装
nvm --version
# 安装最新 LTS 版本
nvm install --lts
# 安装特定版本
nvm install 18.13.0
# 切换使用的 Node.js 版本
nvm use 18.13.0
# 设置默认版本
nvm alias default 18.13.0
# 列出已安装的版本
nvm ls
# 卸载特定版本
nvm uninstall 16.13.0
# 在项目根目录创建 .nvmrc 文件
echo "18.13.0" > .nvmrc
# 进入目录时自动切换版本
# 将以下添加到 ~/.bashrc 或 ~/.zshrc
cdnvm() {
cd "$@"
nvm_path=$(nvm_find_up .nvmrc | tr -d '\n')
if [[ ! $nvm_path =~ ^[^[:space:]]*$ ]]; then
declare default_version
default_version=$(nvm version default)
if [[ $default_version == "N/A" ]]; then
nvm install default
fi
if [[ $(nvm current) != $default_version ]]; then
nvm use default
fi
elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then
declare nvm_version
nvm_version=$(<"$nvm_path/.nvmrc")
declare locally_resolved_nvm_version
locally_resolved_nvm_version=$(nvm version "$nvm_version")
if [[ $locally_resolved_nvm_version == "N/A" ]]; then
nvm install "$nvm_version"
elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then
nvm use "$nvm_version"
fi
fi
}
alias cd='cdnvm'
适用于支持 Snap 的 Linux 发行版(Ubuntu 18.04+ 等):
# 安装 Node.js LTS 版本
sudo snap install node --classic
# 安装特定版本
sudo snap install node --channel=18/stable --classic
# 切换版本
sudo snap refresh node --channel=19/stable
# 验证安装
node -v
npm -v
适合需要完全控制安装位置和配置的场景:
# 下载二进制包
wget https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.xz
# 解压
tar -xvf node-v18.13.0-linux-x64.tar.xz
# 移动到合适的目录
sudo mv node-v18.13.0-linux-x64 /usr/local/node
# 设置环境变量
echo 'export NODE_HOME=/usr/local/node' >> ~/.bashrc
echo 'export PATH=$NODE_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 创建符号链接
sudo ln -s /usr/local/node/bin/node /usr/bin/node
sudo ln -s /usr/local/node/bin/npm /usr/bin/npm
# 验证安装
node -v
npm -v
# 检查 Node.js 版本
node -v # v18.13.0
# 检查 npm 版本
npm -v # 8.19.3
# 检查 Node.js 安装路径
which node # /usr/bin/node
# 检查 npm 安装路径
which npm # /usr/bin/npm
# 创建测试文件
echo 'console.log("Node.js is running:", process.version);' > test.js
# 运行测试文件
node test.js # Node.js is running: v18.13.0
# 初始化 npm 项目
mkdir test-npm && cd test-npm
npm init -y
# 安装一个包
npm install express
# 检查安装的包
ls node_modules/
# 设置全局安装路径
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
# 添加到 PATH
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 验证配置
npm config get prefix # /home/user/.npm-global
# 设置淘宝镜像
npm config set registry https://registry.npmmirror.com
# 验证配置
npm config get registry # https://registry.npmmirror.com
# 临时使用官方镜像
npm install express --registry https://registry.npmjs.org
# 避免使用 sudo 安装全局包
# 方法一:使用 npm 配置
npm config set prefix ~/.npm-global
# 方法二:使用 npx
npx create-react-app my-app
# 方法三:修改 npm 默认目录权限
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
# 列出可用的远程版本
nvm ls-remote
# 列出已安装的本地版本
nvm ls
# 安装最新 LTS 版本
nvm install --lts
# 安装特定版本
nvm install 18.13.0
# 切换版本
nvm use 18.13.0
# 设置默认版本
nvm alias default 18.13.0
# 运行特定版本的单个命令
nvm exec 18.13.0 node app.js
# 安装 n
npm install -g n
# 安装最新 LTS 版本
n lts
# 安装最新版本
n latest
# 安装特定版本
n 18.13.0
# 切换版本
n use 18.13.0
# 列出已安装版本
n ls
# 移除版本
n rm 16.13.0
| 场景 | 推荐版本 | 说明 |
|---|---|---|
| 生产环境 | LTS (如 18.x) | 稳定,长期支持 |
| 开发环境 | LTS 或最新 | 新功能,多版本测试 |
| 测试环境 | 特定版本 (如 16.x/18.x) | 兼容性验证 |
# Ubuntu/Debian
sudo apt-get remove nodejs
sudo apt-get autoremove
# CentOS/RHEL/Fedora
sudo yum remove nodejs
sudo yum autoremove
# Ubuntu/Debian
sudo apt-get purge nodejs
sudo rm -r /etc/apt/sources.list.d/nodesource.list
sudo apt-get autoremove
# CentOS/RHEL/Fedora
sudo yum remove nodejs
sudo rm /etc/yum.repos.d/nodesource-el*.repo
sudo yum autoremove
# 卸载特定版本
nvm uninstall 18.13.0
# 完全卸载 NVM
rm -rf ~/.nvm
# 然后编辑 ~/.bashrc 或 ~/.zshrc,删除 NVM 相关配置
sudo snap remove node
# 删除二进制文件和符号链接
sudo rm -rf /usr/local/node
sudo rm /usr/bin/node
sudo rm /usr/bin/npm
# 删除环境变量
# 编辑 ~/.bashrc 或 ~/.profile,删除相关配置
# 问题:npm install -g 时出现 EACCES 错误
# 解决方案 1:配置 npm 使用不同目录
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 解决方案 2:修改 npm 默认目录权限
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
# 问题:连接 NPM 仓库超时
# 解决方案 1:更换镜像源
npm config set registry https://registry.npmmirror.com
# 解决方案 2:设置代理
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
# 解决方案 3:使用 VPN 或其他网络工具
# 问题:系统中存在多个 Node.js 版本
# 解决方案 1:使用 NVM 管理
nvm ls
nvm use 18.13.0
# 解决方案 2:更新 PATH 优先级
echo 'export PATH="/path/to/preferred/node/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 问题:Node.js 运行时提示缺少共享库
# 解决方案:安装构建工具和依赖
# Ubuntu/Debian
sudo apt-get install -y build-essential
# CentOS/RHEL/Fedora
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python3
# 使用特定用户运行 Node.js 应用
sudo useradd -m -s /bin/bash nodeuser
sudo su - nodeuser
# 配置防火墙
sudo ufw allow 3000/tcp # 开放应用端口
sudo ufw allow 22/tcp # 开放 SSH 端口
sudo ufw enable
# 提高文件描述符限制
echo '* soft nofile 65536' >> /etc/security/limits.conf
echo '* hard nofile 65536' >> /etc/security/limits.conf
# 调整内核参数
echo 'net.core.somaxconn = 65536' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_max_syn_backlog = 65536' >> /etc/sysctl.conf
sysctl -p
# 安装 PM2 进程管理器
npm install -g pm2
# 启动应用
pm2 start app.js
# 设置开机自启
pm2 startup
pm2 save
# 监控应用
pm2 monit
# 使用 logrotate 管理 Node.js 日志
sudo nano /etc/logrotate.d/nodejs
# 添加以下内容
/home/nodeuser/app/logs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644
nodeuser
nodeuser
}
| 安装方法 | 适用场景 | 易用性 | 灵活性 | 管理便捷性 |
|---|---|---|---|---|
| 官方仓库 | 快速部署,测试环境 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ |
| NodeSource | 生产环境,稳定版本 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| NVM | 开发环境,多版本管理 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Snap | 容器化,简化管理 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 二进制包 | 离线环境,定制安装 | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
graph TD
A[选择安装方法] --> B{环境类型}
B -->|生产环境| C[NodeSource 仓库]
B -->|开发环境| D[NVM]
B -->|测试环境| E[官方仓库]
B -->|离线环境| F[二进制包]
B -->|容器环境| G[Snap]
C -->|优点| H[稳定版本,官方维护]
D -->|优点| I[多版本切换,项目隔离]
E -->|优点| J[简单快速]
F -->|优点| K[无需网络,完全控制]
G -->|优点| L[自动更新,沙箱安全]
最终建议:对于大多数用户,我们推荐使用 NVM 管理开发环境中的 Node.js 版本,使用 NodeSource 仓库 安装生产环境的 Node.js。这两种方法结合使用,可以提供最大的灵活性和稳定性,满足各种场景的需求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online