Nuxt 3 生产环境使用 PM2 守护的核心是启动构建后的 Nitro 服务器入口文件,而不是开发服务器。适用场景为 Linux 生产环境部署,风险边界在于必须先完成 npm run build 且确保端口未被占用。
先说结论:PM2 守护的是 .output/server/index.mjs 文件,而非 nuxt start 或 dev 命令。
- 适合:生产环境 SSR 部署
- 先准备:完成 npm run build 构建
- 验收:pm2 status 显示 online 且页面可访问
命令速用版
直接构建并启动服务的命令如下,适用于快速验证流程。
npm run build
pm2 start .output/server/index.mjs `--name` nuxt-app为什么会这样
Nuxt 3 服务端由 Nitro 引擎驱动,构建后生成独立 Node 服务。
Nuxt 3 架构与 Nuxt 2 不同,生产构建后输出标准的 Node.js 服务器代码到 .output 目录。PM2 的作用是监控这个 Node 进程,确保意外退出后自动重启,并管理日志。
分步处理
按顺序执行构建、配置、启动和持久化操作。
1. 构建项目:运行 npm run build,确认 .output 目录生成。
2. 创建配置文件:新建 ecosystem.config.js,定义脚本路径和实例数。
3. 启动服务:运行 pm2 start ecosystem.config.js。
4. 开机自启:运行 pm2 save 和 pm2 startup 生成系统级守护。
怎么验证是否生效
通过进程状态日志和网络请求确认服务正常。
执行 pm2 status 查看进程状态是否为 online。执行 pm2 logs 查看实时输出是否有报错。使用 curl http://localhost:3000 检查返回 HTML 内容。
常见坑
环境变量丢失和构建目录错误是最常见问题。
1. 环境变量:.env 文件不会自动打入构建包,需在 PM2 配置中 env 字段显式声明。
2. 路径错误:确保 PM2 脚本指向 .output/server/index.mjs,而非 server/index.js。
3. 权限问题:pm2 startup 生成的命令需带 sudo 执行,否则开机自启无效。
常见问题
开发环境可以用 PM2 守护吗
不建议,开发环境应使用 npm run dev 自带的热重载。
PM2 日志文件在哪里
默认在 ~/.pm2/logs 目录下,或通过 pm2 logs 命令查看。
如何修改实例数量
在 ecosystem.config.js 中设置 instances 字段,SSR 通常设为 1 以避免端口冲突。
参考来源
Nuxt 文档 - Deployment: https://nuxt.com/docs/getting-started/deployment
PM2 文档 - Quickstart: https://pm2.io/docs/runtime/quickstart/