5.1 KiB
5.1 KiB
Next.js 宝塔面板部署方案
适用于本项目的 Next.js(
output: 'standalone')在宝塔面板上的部署。统一入口:scripts/devlop.py。
一、方案概览
| 方式 | 命令 | 说明 |
|---|---|---|
| 推荐:deploy(直接覆盖) | python scripts/devlop.py --mode deploy |
本地 build → 打 tar.gz → SSH 上传解压到 /www/wwwroot/soul → 宝塔 API 重启 Node |
| devlop(dist 切换) | 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/soul(deploy 模式会把包解压到这里)。
3. 配置 Nginx 反向代理
- 域名示例:
soul.quwanzhi.com。 - 在对应站点的「设置」→「反向代理」中新增:
- 代理名称:随意(如 soul)
- 目标 URL:
http://127.0.0.1:30006
- 应用端口 30006 需与下面 PM2 的
PORT一致。
4. 添加 Node(PM2)项目
- 宝塔 → Node 项目(或 PM2 管理器)→ 添加项目:
- 项目名称:
soul(与脚本里DEPLOY_PM2_APP一致) - 项目路径:
- deploy 模式:
/www/wwwroot/soul - devlop 模式:
/www/wwwroot/soul/dist
- deploy 模式:
- 启动文件:
server.js - 启动方式:
node server.js(不要用npm start/next start,standalone 无 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_URL、BAOTA_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/环境变量等。
- 宝塔配置检查说明.md:Nginx/PM2/端口 排查。
- Next.js自动化部署流程.md:GitHub Webhook + 宝塔自动部署(可选)。
六、注意事项
- 端口一致:Nginx
proxy_pass、PM2 的PORT、脚本中的DEPLOY_PORT必须一致(默认 30006)。 - standalone 必须:
next.config.mjs已设置output: 'standalone',部署用node server.js,不要用next start。 - PM2 项目路径:deploy 用
/www/wwwroot/soul;devlop 用/www/wwwroot/soul/dist,否则易 404。 - 首次部署:若服务器上还没有代码,先执行一次
python scripts/devlop.py --mode deploy,再在宝塔里确认 Node 项目路径与启动方式。
按以上步骤即可在宝塔上稳定跑 Next.js 前台、后台和 API。