如何配置Linux服务器Node.js服务以实现高效稳定运行?
- 内容介绍
- 文章标签
- 相关推荐
运维人员常常会遇到以下痛点:
- 不同项目对 Node.js 版本要求不一致,手动切换容易出错。
- 服务进程意外退出后无法自动恢复,导致业务中断。
- 日志文件混乱,定位错误困难。
- Nginx 与 Node.js 的代理配置不当,引发请求超时或跨域问题。
- 缺乏统一的监控手段,无法及时发现性能瓶颈。
一、准备工作
在开始配置之前,请确保您的 Linux 服务器满足以下条件:
- 具备 root 或 sudo 权限。
- 已安装 curl、wget 等基本工具。
- 网络能够访问 GitHub。
1. 安装必备工具
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y curl wget build-essential
# CentOS/RHEL
sudo yum install -y curl wget gcc gcc-c++ make
二、使用 nvm 管理 Node.js 版本
痛点解决:通过 nvm 可以轻松在同一台服务器上为不同项目切换对应的 Node.js 版本,避免全局冲突。
1) 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 加载 nvm
source ~/.bashrc # 或者 source ~/.profile
2) 安装指定 Node.js 版本并切换
# 查看可用的 LTS 版本
nvm ls-remote --lts
# 安装最新 LTS
nvm install v20.11.1
# 设置默认版本
nvm alias default v20.11.1
# 切换到该版本
nvm use v20.11.1
3) 验证安装
# 检查 Node 和 npm 版本
node -v # v20.x.x
npm -v # 对应的 npm 版本
三、手动下载二进制包安装
痛点解决:在受限网络环境下仍能完成 Node.js 部署。
1) 下载并上传二进制包
# 在本地机器下载
wget https://nodejs.org/dist/v20.11.1/node-v20.11.1-linux-x64.tar.gz
# 上传至服务器,例如使用 scp:
scp node-v20.11.1-linux-x64.tar.gz user@your_server:/opt/
2) 解压并创建软链接
# 解压到 /opt/node-v20.11.1
tar -xvf /opt/node-v20.11.1-linux-x64.tar.gz -C /opt/
# 创建全局可执行软链接
sudo ln -s /opt/node-v20.*-linux-x64/bin/node /usr/local/bin/node
sudo ln -s /opt/node-v20.*-linux-x64/bin/npm /usr/local/bin/npm
sudo ln -s /opt/node-v20.*-linux-x64/bin/npx /usr/local/bin/npx
# 确认方法和版本
which node # /usr/local/bin/node
node -v # v20.x.x
npm -v # 对应 npm 版本
四、项目部署与依赖安装
1) 拉取项目源码并进入目录
# 示例:使用 git 拉取代码
git clone https://github.com/your/repo.git /var/www/your-app
cd /var/www/your-app
2) 安装项目依赖
# 推荐使用 npm ci 保持锁文件一致性
npm ci --production
# 若使用 yarn:
yarn install --production
五、设置环境变量 & 方法调整
痛点解决:统一的环境变量可以避免因方法不一致导致的模块找不到错误。
# 在 ~/.bashrc 或 /etc/profile 中添加:
export NODE_ENV=production # 设置运行环境为生产模式
export APP_ROOT=/var/www/your-app # 项目根目录变量
export PATH=$PATH:/usr/local/bin # 确保全局 node/npm 在 PATH 中
# 生效:
source ~/.bashrc # 或 source /etc/profile
六、使用 PM2 管理进程
1) 全局安装 PM2 并初始化守护进程
# 安装 PM2
npm install -g pm2
# 启动应用
pm2 start app.js --name your-app --watch --restart-delay=3000
# 将 PM2 设置为程序启动项
pm2 startup systemd -u $ --hp $)
pm2 save # 保存当前进程列表,以便重启后自动恢复
2) 常用 PM2 命令速查表
-
pm2 status查看运行状态。 -
pm2 logs实时看日志,快速定位错误。 -
pm02 restart all批量重启所有进程。 -
pm2 delete app删除指定进程。 -
pm2 monit图形化监控 CPU/内存使用。
七、配置 Nginx 反向代理 & HTTPS
a) 安装 Nginx
# Debian/Ubuntu:
sudo apt-get install -y nginx
# CentOS/RHEL:
sudo yum install -y nginx
# 启动并设置开机自启:
sudo systemctl enable nginx && sudo systemctl start nginx
b) 基础 HTTP 代理配置示例
# upstream 定义后端 Node.js 实例
upstream node_app {
server 127.0..0:3000;}
server {
listen 80;说起来,server_name yourdomain.com www.yourdomain.com;location / {
proxy_pass http://node_app;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;client_max_body_size 10m;keepalive_timeout 65;}
# 可选:静态资源直接由 Nginx 提供,提高响应速度
location /static/ {
alias /var/www/your-app/public/static/;expires max,access_log off;}
}
*将上述文件软链接到 sites-enabled 并测试配置:
# 创建软链接:
sudo ln -s /etc/nginx/sites-available/your-app.conf /etc/nginx/sites-enabled/
# 测试语法:
sudo nginx -t
# 重载生效:
sudo systemctl reload nginx
b) 配置 HTTPS
# 安装 Certbot sudo apt-get install -y certbot python3-certbot-nginx # 自动获取并配置证书: sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 设置自动续期检查: sudo systemctl status certbot.timer # 默认已开启,每天检查一次。
*常见 HTTPS 问题及排查*
- CERTIFICATE_VERIFY_FAILED:检查 DNS 是否指向正确 IP,并确认防火墙放行端口443。不过,
*防火墙放行示例*
# Ubuntu/UFW sudo ufw allow 'Nginx Full' # CentOS/firewalld sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
h4>八、日志管理与故障排查
p> 为了快速定位问题。需要统一收集 Node.js 与 Nginx 的日志。
h5>Node.js 日志
pre>
h5>Nginx 日志
pre>
p> 若出现 “502 Bad Gateway” 常见原因:后端服务未启动、端口冲突或防火墙阻断。怎么说呢,通过 pm23 status 与 netstat –tlnp | grep 3000 检查即可。
h6>九、持续监控与性能调整
ul>
li> 使用 PM₂ 内置监控:pm23 monit 实时展示 CPU、内存使用。li>
li> 集成 Promeus + GrafanaPM₂ Exporter 将指标暴露给 Promeus;Grafana 仪表盘帮助团队快速发现异常。li>
li> 定期执行 安全审计npm audit 检测依赖漏洞;按理说,ncu 升级至安全版。li>
ul>
p> 综合以上步骤,可实现 Linux 上 Node.js 服务的“一键部署—高可用—易维护”。当遇到新问题时只需回溯对应环节——Node 环境 → PM₂ → Nginx → 程序防火墙。即可快速定位并解决,从而保证业务持续稳定运行。按理说,
运维人员常常会遇到以下痛点:
- 不同项目对 Node.js 版本要求不一致,手动切换容易出错。
- 服务进程意外退出后无法自动恢复,导致业务中断。
- 日志文件混乱,定位错误困难。
- Nginx 与 Node.js 的代理配置不当,引发请求超时或跨域问题。
- 缺乏统一的监控手段,无法及时发现性能瓶颈。
一、准备工作
在开始配置之前,请确保您的 Linux 服务器满足以下条件:
- 具备 root 或 sudo 权限。
- 已安装 curl、wget 等基本工具。
- 网络能够访问 GitHub。
1. 安装必备工具
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y curl wget build-essential
# CentOS/RHEL
sudo yum install -y curl wget gcc gcc-c++ make
二、使用 nvm 管理 Node.js 版本
痛点解决:通过 nvm 可以轻松在同一台服务器上为不同项目切换对应的 Node.js 版本,避免全局冲突。
1) 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 加载 nvm
source ~/.bashrc # 或者 source ~/.profile
2) 安装指定 Node.js 版本并切换
# 查看可用的 LTS 版本
nvm ls-remote --lts
# 安装最新 LTS
nvm install v20.11.1
# 设置默认版本
nvm alias default v20.11.1
# 切换到该版本
nvm use v20.11.1
3) 验证安装
# 检查 Node 和 npm 版本
node -v # v20.x.x
npm -v # 对应的 npm 版本
三、手动下载二进制包安装
痛点解决:在受限网络环境下仍能完成 Node.js 部署。
1) 下载并上传二进制包
# 在本地机器下载
wget https://nodejs.org/dist/v20.11.1/node-v20.11.1-linux-x64.tar.gz
# 上传至服务器,例如使用 scp:
scp node-v20.11.1-linux-x64.tar.gz user@your_server:/opt/
2) 解压并创建软链接
# 解压到 /opt/node-v20.11.1
tar -xvf /opt/node-v20.11.1-linux-x64.tar.gz -C /opt/
# 创建全局可执行软链接
sudo ln -s /opt/node-v20.*-linux-x64/bin/node /usr/local/bin/node
sudo ln -s /opt/node-v20.*-linux-x64/bin/npm /usr/local/bin/npm
sudo ln -s /opt/node-v20.*-linux-x64/bin/npx /usr/local/bin/npx
# 确认方法和版本
which node # /usr/local/bin/node
node -v # v20.x.x
npm -v # 对应 npm 版本
四、项目部署与依赖安装
1) 拉取项目源码并进入目录
# 示例:使用 git 拉取代码
git clone https://github.com/your/repo.git /var/www/your-app
cd /var/www/your-app
2) 安装项目依赖
# 推荐使用 npm ci 保持锁文件一致性
npm ci --production
# 若使用 yarn:
yarn install --production
五、设置环境变量 & 方法调整
痛点解决:统一的环境变量可以避免因方法不一致导致的模块找不到错误。
# 在 ~/.bashrc 或 /etc/profile 中添加:
export NODE_ENV=production # 设置运行环境为生产模式
export APP_ROOT=/var/www/your-app # 项目根目录变量
export PATH=$PATH:/usr/local/bin # 确保全局 node/npm 在 PATH 中
# 生效:
source ~/.bashrc # 或 source /etc/profile
六、使用 PM2 管理进程
1) 全局安装 PM2 并初始化守护进程
# 安装 PM2
npm install -g pm2
# 启动应用
pm2 start app.js --name your-app --watch --restart-delay=3000
# 将 PM2 设置为程序启动项
pm2 startup systemd -u $ --hp $)
pm2 save # 保存当前进程列表,以便重启后自动恢复
2) 常用 PM2 命令速查表
-
pm2 status查看运行状态。 -
pm2 logs实时看日志,快速定位错误。 -
pm02 restart all批量重启所有进程。 -
pm2 delete app删除指定进程。 -
pm2 monit图形化监控 CPU/内存使用。
七、配置 Nginx 反向代理 & HTTPS
a) 安装 Nginx
# Debian/Ubuntu:
sudo apt-get install -y nginx
# CentOS/RHEL:
sudo yum install -y nginx
# 启动并设置开机自启:
sudo systemctl enable nginx && sudo systemctl start nginx
b) 基础 HTTP 代理配置示例
# upstream 定义后端 Node.js 实例
upstream node_app {
server 127.0..0:3000;}
server {
listen 80;说起来,server_name yourdomain.com www.yourdomain.com;location / {
proxy_pass http://node_app;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;client_max_body_size 10m;keepalive_timeout 65;}
# 可选:静态资源直接由 Nginx 提供,提高响应速度
location /static/ {
alias /var/www/your-app/public/static/;expires max,access_log off;}
}
*将上述文件软链接到 sites-enabled 并测试配置:
# 创建软链接:
sudo ln -s /etc/nginx/sites-available/your-app.conf /etc/nginx/sites-enabled/
# 测试语法:
sudo nginx -t
# 重载生效:
sudo systemctl reload nginx
b) 配置 HTTPS
# 安装 Certbot sudo apt-get install -y certbot python3-certbot-nginx # 自动获取并配置证书: sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 设置自动续期检查: sudo systemctl status certbot.timer # 默认已开启,每天检查一次。
*常见 HTTPS 问题及排查*
- CERTIFICATE_VERIFY_FAILED:检查 DNS 是否指向正确 IP,并确认防火墙放行端口443。不过,
*防火墙放行示例*
# Ubuntu/UFW sudo ufw allow 'Nginx Full' # CentOS/firewalld sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
h4>八、日志管理与故障排查
p> 为了快速定位问题。需要统一收集 Node.js 与 Nginx 的日志。
h5>Node.js 日志
pre>
h5>Nginx 日志
pre>
p> 若出现 “502 Bad Gateway” 常见原因:后端服务未启动、端口冲突或防火墙阻断。怎么说呢,通过 pm23 status 与 netstat –tlnp | grep 3000 检查即可。
h6>九、持续监控与性能调整
ul>
li> 使用 PM₂ 内置监控:pm23 monit 实时展示 CPU、内存使用。li>
li> 集成 Promeus + GrafanaPM₂ Exporter 将指标暴露给 Promeus;Grafana 仪表盘帮助团队快速发现异常。li>
li> 定期执行 安全审计npm audit 检测依赖漏洞;按理说,ncu 升级至安全版。li>
ul>
p> 综合以上步骤,可实现 Linux 上 Node.js 服务的“一键部署—高可用—易维护”。当遇到新问题时只需回溯对应环节——Node 环境 → PM₂ → Nginx → 程序防火墙。即可快速定位并解决,从而保证业务持续稳定运行。按理说,

