如何通过命令行让Next.js应用在Linux后台正常运行?
在Linux后台运行Next.js应用的正确方法
你遇到的问题核心是Next.js生产模式启动依赖预构建产物,且pm2的启动参数需要精准匹配npm脚本的执行逻辑,以下是几种可靠的解决方案:
方法一:用pm2正确启动生产模式应用
- 先完成项目构建(生产启动必须步骤):
npm run build
- 用pm2启动,推荐两种写法:
- 通过npm脚本启动(明确指定执行
start脚本):
pm2 start npm --name "nextjs-13" -- run start- 直接启动Next.js生产服务器(更稳定,避免npm层的参数歧义):
pm2 start node_modules/.bin/next --name "nextjs-13" -- start - 通过npm脚本启动(明确指定执行
- 验证运行状态:
pm2 list # 查看所有pm2进程 pm2 logs nextjs-13 # 查看应用日志,确认是否输出"ready started server on 0.0.0.0:3000"
方法二:使用pm2配置文件(适合长期维护)
在项目根目录创建ecosystem.config.js配置文件,方便统一管理进程参数:
module.exports = { apps: [{ name: "nextjs-13", script: "node_modules/.bin/next", args: "start", instances: "max", // 根据CPU核心数启动多进程 exec_mode: "cluster", env: { NODE_ENV: "production" } }] };
然后执行启动命令:
pm2 start ecosystem.config.js
方法三:临时后台运行(适合快速测试)
如果不需要pm2的进程监控、自动重启功能,可临时用nohup实现后台运行:
nohup npm run start > next.log 2>&1 &
注意:这种方式在终端会话关闭后可能意外终止,仅适合短期测试场景。
额外排查点
如果按上述步骤仍无法访问,检查:
- 服务器防火墙是否开放3000端口:
sudo ufw allow 3000 - 确认Next.js绑定地址为
0.0.0.0(生产模式默认配置,允许外部访问) - 查看pm2日志是否有报错信息:
pm2 logs nextjs-13
内容的提问来源于stack exchange,提问作者Bang Andre
相关产品推荐
相关产品推荐

