Nodejs部署
一、Node.js 部署后台 Web 服务的核心流程
Node.js 部署 Web 服务的核心是将代码发布到服务器,并通过 Node.js 进程启动服务,同时保证服务稳定运行、可访问、可监控。以下是最简且工业级的部署流程(以 Express/Koa 框架为例):
1. 基础部署步骤(手动启动)
(1)服务器环境准备
- 安装 Node.js + npm/yarn:
- 服务器(Linux/macOS/Windows)先安装对应版本的 Node.js(推荐 LTS 版,如 20.x),可通过 nvm 管理版本:
# 安装 nvm(Linux/macOS)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 安装 Node.js LTS
nvm install --lts nvm use --lts
- 验证安装:node -v / npm -v
(2)代码部署
- 将本地 Web 服务代码(如 Express 项目)上传到服务器(通过 git clone/scp/FTP 等);
- 进入项目目录,安装依赖:
cd your-project npm install --production # 仅安装生产依赖(跳过 devDependencies)
(3)启动服务
- 假设项目入口文件是 app.js(基础 Express 示例):
// app.js(最简 Web 服务示例)
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Node.js Web 服务运行中!');
});
app.listen(port, () => {
console.log(`服务运行在 http://localhost:${port}`);
});
- node app.js
- 验证访问:服务器 IP + 端口(如 http://192.168.1.100:3000),需确保服务器防火墙开放对应端口。
2. 手动部署的问题
- 终端关闭 → 服务终止(前台进程);
- 服务崩溃后无法自动重启;
- 无进程监控、日志管理、负载均衡;
- 无法灵活管理多实例 / 多环境。
这就是 PM2 要解决的核心问题。
二、PM2 是什么?
PM2(Process Manager 2)是 Node.js 进程管理工具,专为生产环境设计,核心作用是:守护 Node.js 进程、自动重启、负载均衡、日志管理、监控运维,是 Node.js 服务部署的工业级标准工具。
1. PM2 核心功能
|
功能 |
作用 |
|
进程守护 |
服务崩溃 / 服务器重启后自动重启进程,避免服务中断 |
|
后台运行 |
将 Node.js 进程转为后台守护进程(脱离终端) |
|
负载均衡 |
自动启动多个 Node.js 实例,利用多核 CPU 提升并发能力 |
|
日志管理 |
聚焦收集 stdout/stderr 日志,支持日志分割、轮转,避免日志文件过大 |
|
监控运维 |
实时监控进程 CPU / 内存占用、请求量,支持远程监控、进程重载(无停机) |
|
配置化部署 |
通过配置文件管理多服务、多环境(开发 / 测试 / 生产) |
2. PM2 安装与核心使用
(1)全局安装 PM2
npm install pm2 -g
(2)核心命令(以app.js为例)
|
命令 |
作用 |
|
pm2 start app.js |
启动服务(后台运行) |
|
pm2 start app.js –name my-api |
启动并命名进程(方便管理多服务) |
|
pm2 start app.js -i max |
启动多实例(max 自动适配 CPU 核心数,实现负载均衡) |
|
pm2 list |
查看所有运行的进程 |
|
pm2 restart my-api |
重启指定进程 |
|
pm2 stop my-api |
停止指定进程 |
|
pm2 delete my-api |
删除指定进程 |
|
pm2 logs |
查看实时日志(支持 pm2 logs my-api 查看指定进程日志) |
|
pm2 monit |
进入监控面板(实时查看 CPU / 内存 / 日志) |
|
pm2 startup |
生成开机自启脚本(服务器重启后自动启动 PM2 及所有进程) |
|
pm2 save |
保存当前进程列表(配合 startup 实现开机自启) |
(3)配置文件部署(推荐,适配多服务 / 复杂配置)
创建 ecosystem.config.js(PM2 标准配置文件):
module.exports = {
apps: [
{
name: "my-web-api", // 进程名
script: "./app.js", // 入口文件
cwd: "./", // 工作目录
instances: "max", // 实例数(max 适配多核)
exec_mode: "cluster", // 集群模式(负载均衡)
env: {
NODE_ENV: "development", // 开发环境变量
PORT: 3000
},
env_production: {
NODE_ENV: "production", // 生产环境变量
PORT: 8080
},
log_date_format: "YYYY-MM-DD HH:mm:ss", // 日志时间格式
out_file: "./logs/out.log", // 标准输出日志
error_file: "./logs/error.log", // 错误日志
merge_logs: true, // 多实例日志合并
autorestart: true, // 崩溃自动重启
watch: false, // 开发环境可开启(文件变更自动重启),生产环境关闭
max_memory_restart: "1G" // 内存占用超过 1G 自动重启
}
]
};
- 启动生产环境:pm2 start ecosystem.config.js –env production
- 重启:pm2 restart ecosystem.config.js
三、Node.js + PM2 生产部署最佳实践
- 基础配置:用 pm2 startup + pm2 save 实现开机自启;开启日志分割(安装 pm2-logrotate 插件:pm2 install pm2-logrotate);生产环境关闭 watch 模式,避免文件变更误重启。
- 性能优化:用 cluster 模式(exec_mode: cluster)充分利用多核 CPU;限制进程内存(max_memory_restart),避免内存泄漏导致服务崩溃。
- 扩展部署:前端静态资源用 Nginx 反向代理 + 缓存,Node.js 仅处理 API 逻辑;Nginx 配置示例(转发请求到 PM2 管理的 Node.js 服务):
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8080; # 指向 PM2 启动的 Node.js 服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- 监控与运维:用 pm2 monit 实时监控,或接入 PM2 Plus(云端监控);定期备份日志和配置文件。
总结
- Node.js 部署 Web 服务:核心是将代码放到服务器,通过 Node.js 启动进程,解决端口、依赖、网络访问问题;
- PM2 核心价值:解决手动部署的 “进程易中断、无监控、难扩展” 问题,是 Node.js 生产环境的必备工具;
- 最佳实践:PM2 + 配置文件 + Nginx 反向代理,兼顾稳定性、性能和可维护性。
