如何在自建Node.js环境运行Next.js?CI部署遇问题求解
Next.js SSR部署VPS的CI流水线问题解答
问题原因分析
你遇到的next start提示缺少.next目录,大概率是两个细节没做好:
- 部署时遗漏了
.next目录:.next是隐藏目录,很多CI工具或传输命令(比如rsync)默认会忽略隐藏文件/目录,导致部署后服务器上没有这个关键目录。 - 执行
next start的工作目录错误:next start必须在包含.next目录的项目根目录下运行,如果你的终端当前路径不是/apps/myapp,就会找不到该目录。
核心疑问解答:是否必须在生产服务器执行next build?
不是必须的!文档里提到的"部署源码并执行build"只是其中一种部署方案,而非唯一标准。两种方案都可行:
- 方案A(推荐,适合低配VPS):在CI环境完成
next build,仅把构建产物和必要文件部署到服务器 - 方案B:把源码传到服务器,在服务器本地执行
next build+next start(适合需要在服务器注入特定环境变量的场景)
修正你的CI流水线步骤
调整后的完整流程应该是:
- 代码推送到Git仓库
- CI触发
next build(确保CI环境的Node.js版本和服务器一致,避免兼容性问题) - 打包并传输以下文件到VPS的
/apps/myapp目录:.next/整个目录(打包时明确包含隐藏目录,比如用tar -czf build.tar.gz .next package.json package-lock.json public/)package.json和package-lock.json(或yarn.lock)public/目录(如果项目里有)
- 在VPS上执行:
# 进入项目根目录 cd /apps/myapp # 安装生产依赖(如果没提前传输node_modules) npm install --production # 启动服务(可指定端口,默认3000) next start -p 3000
额外优化建议
用pm2管理Next.js进程,避免终端关闭后服务停止:
# 先安装pm2 npm install -g pm2 # 启动服务并命名 pm2 start npm --name "my-next-app" -- start # 查看进程状态 pm2 status # 设置开机自启 pm2 startup pm2 save
内容的提问来源于stack exchange,提问作者Artur Kedzior
相关产品推荐
相关产品推荐

