Files
soul-yongping/开发文档/8、部署/Next.js宝塔部署方案.md
2026-02-09 15:09:29 +08:00

5.1 KiB
Raw Blame History

Next.js 宝塔面板部署方案

适用于本项目的 Next.jsoutput: 'standalone')在宝塔面板上的部署。统一入口:scripts/devlop.py


一、方案概览

方式 命令 说明
推荐deploy直接覆盖 python scripts/devlop.py --mode deploy 本地 build → 打 tar.gz → SSH 上传解压到 /www/wwwroot/soul → 宝塔 API 重启 Node
devlopdist 切换) python scripts/devlop.py--mode devlop 本地 build → 打 zip → 上传到 dist2 → 服务器 pnpm install → dist↔dist2 切换 → 重启,运行目录为 .../soul/dist
  • 日常建议:用 deploy 即可,简单、不依赖服务器上的 pnpm。
  • devlop 适合需要在服务器上再装依赖或做 dist 双目录无损切换的场景。

二、宝塔首次准备(做一次即可)

1. 安装/确认环境

  • Node.js:宝塔 → 软件商店 → 安装「Node 版本管理器」或「PM2 管理器」,并安装 Node建议 v18+,本项目默认 v22.14.0)。
  • Nginx:已安装并可添加站点。
  • Git(可选):若用 Webhook 拉代码再构建,需要 Git。

2. 创建网站目录

  • 在宝塔「网站」里添加站点,或先建好目录。
  • 本项目默认路径:/www/wwwroot/souldeploy 模式会把包解压到这里)。

3. 配置 Nginx 反向代理

  • 域名示例:soul.quwanzhi.com
  • 在对应站点的「设置」→「反向代理」中新增:
    • 代理名称:随意(如 soul
    • 目标 URLhttp://127.0.0.1:30006
  • 应用端口 30006 需与下面 PM2 的 PORT 一致。

4. 添加 NodePM2项目

  • 宝塔 → Node 项目(或 PM2 管理器)→ 添加项目:
    • 项目名称soul(与脚本里 DEPLOY_PM2_APP 一致)
    • 项目路径
      • deploy 模式:/www/wwwroot/soul
      • devlop 模式:/www/wwwroot/soul/dist
    • 启动文件server.js
    • 启动方式node server.js(不要用 npm start / next startstandalone 无 next 命令)
    • 环境变量PORT=30006(与 Nginx 反代一致)

也可在服务器上用 PM2 直接启动(与上面二选一):

cd /www/wwwroot/soul
PORT=30006 pm2 start server.js --name soul
# 或
PORT=30006 pm2 start ecosystem.config.cjs

5. 配置宝塔 API供脚本重启 Node

  • 宝塔面板 → 设置 → API 接口:开启并保存 API 密钥
  • 记下面板地址(如 https://你的服务器IP:9988)。
  • 脚本通过环境变量使用:BAOTA_PANEL_URLBAOTA_API_KEY

三、日常部署

1. 本机依赖

pip install paramiko requests
# 或
pip install -r requirements-deploy.txt

2. 执行部署(推荐 deploy

项目根目录执行:

# 完整流程:构建 + 上传 + 重启
python scripts/devlop.py --mode deploy

可选参数:

  • --no-build:跳过本地 pnpm build(已有 .next/standalone 时用)。
  • --no-upload:只打 tar.gz不上传用于调试或手动上传
  • --no-api:上传后不调宝塔 API不自动重启。

3. devlop 模式dist 切换)

python scripts/devlop.py
# 或
python scripts/devlop.py --mode devlop

流程:本地 build → zip 上传到服务器 dist2 → 在 dist2 执行 pnpm install → dist 与 dist2 互换 → 宝塔 API 重启,运行目录为 .../soul/dist

4. 仅重启 Node不传代码

代码已通过其他方式更新时,只重启 PM2

python scripts/deploy_baota_pure_api.py

四、环境变量(可选覆盖默认)

变量 说明 默认示例
DEPLOY_HOST 服务器 IP 43.139.27.93
DEPLOY_USER SSH 用户 root
DEPLOY_PASSWORD SSH 密码 -
DEPLOY_SSH_KEY SSH 私钥路径 -
DEPLOY_SSH_PORT SSH 端口 22022
DEPLOY_PROJECT_PATH 项目路径deploy /www/wwwroot/soul
DEPLOY_PORT / DEPLOY_APP_PORT 应用端口 30006
DEPLOY_PM2_APP PM2 项目名 soul
BAOTA_PANEL_URL 宝塔面板地址 https://IP:9988
BAOTA_API_KEY 宝塔 API 密钥 -
DEPLOY_NODE_PATH 服务器 Node 路径 /www/server/nodejs/v22.14.0/bin

五、与现有文档的关系

  • DEPLOYMENT.md:总览与 Vercel/环境变量等。
  • 宝塔配置检查说明.mdNginx/PM2/端口 排查。
  • Next.js自动化部署流程.mdGitHub Webhook + 宝塔自动部署(可选)。

六、注意事项

  1. 端口一致Nginx proxy_pass、PM2 的 PORT、脚本中的 DEPLOY_PORT 必须一致(默认 30006
  2. standalone 必须next.config.mjs 已设置 output: 'standalone',部署用 node server.js,不要用 next start
  3. PM2 项目路径deploy 用 /www/wwwroot/souldevlop 用 /www/wwwroot/soul/dist,否则易 404。
  4. 首次部署:若服务器上还没有代码,先执行一次 python scripts/devlop.py --mode deploy,再在宝塔里确认 Node 项目路径与启动方式。

按以上步骤即可在宝塔上稳定跑 Next.js 前台、后台和 API。