如何在Plesk主域名下安全部署Next.js更新站点?
在Plesk VPS上为主域名部署Next.js应用的解决方案
第一步:解决端口占用问题(EADDRINUSE: :::3000)
- 通过SSH连接VPS,查找占用3000端口的进程:
netstat -tulpn | grep :3000 # 或用lsof命令 lsof -i :3000 - 找到对应进程PID后,强制终止:
kill -9 <进程PID> - 若不想终止现有进程,可修改Next.js启动端口,在Start命令后加
-p参数指定新端口(比如3001),后续所有配置需对应这个新端口。
第二步:标准Plesk部署流程(安全替换旧站点)
1. 备份旧站点文件
先把主域名下的原有HTML/CSS/JS站点打包备份,避免数据丢失:
tar -czf /var/www/vhosts/your-domain.com/old-site-backup.tar.gz /var/www/vhosts/your-domain.com/httpdocs
2. 上传并配置Next.js项目
- 将本地已执行
npm run build的Next.js项目文件(包括.next、package.json、package-lock.json)上传到主域名的独立目录,比如/var/www/vhosts/your-domain.com/next-app。 - 登录Plesk面板,进入主域名的「网站与域名」页面,找到「Node.js」选项并启用:
- 应用根目录:选择刚才上传的
next-app目录(绝对路径); - 文档根目录:设置为
/var/www/vhosts/your-domain.com/next-app/.next/static; - 启动文件:留空或填写
node_modules/next/dist/bin/next; - Build命令:填写
npm run build(确保项目package.json里有"build": "next build"脚本); - Start命令:填写
next start -p 3001(用之前确定的未占用端口)。
- 应用根目录:选择刚才上传的
3. 配置反向代理
Plesk通常会自动生成反向代理规则,若未生效,手动在「Apache & Nginx设置」的「附加Nginx指令」中添加:
location / { proxy_pass http://localhost:3001; 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; }
4. 启动并验证
点击Node.js面板的「启动」按钮,查看日志确认无错误后,访问主域名检查站点是否正常运行。
第三步:备选方案——用PM2管理进程(更稳定)
若需要更可靠的进程管理,可使用PM2:
- 通过SSH安装PM2:
npm install pm2 -g - 在Next.js项目目录创建
ecosystem.config.js:module.exports = { apps: [{ name: 'your-next-app', script: 'node_modules/next/dist/bin/next', args: 'start -p 3001', cwd: '/var/www/vhosts/your-domain.com/next-app', env: { NODE_ENV: 'production' } }] }; - 启动进程并设置开机自启:
pm2 start ecosystem.config.js pm2 startup pm2 save - 同样配置Nginx反向代理指向3001端口即可。
安全注意事项
- 确保Plesk中选择的Node.js版本与本地开发环境一致,避免兼容性问题;
- 部署前关闭旧站点的相关服务,彻底释放端口;
- 定期备份Next.js项目文件和Plesk配置;
- 开启Plesk防火墙,仅对外开放80、443端口,内部端口(如3001)限制为本地访问。
内容的提问来源于stack exchange,提问作者empty room.
相关产品推荐
相关产品推荐

