📦 一、部署目标总览
Next.js 支持多种运行模式,部署策略取决于你的需求:
| 模式 | 特点 | 部署方式 |
|---|---|---|
| 静态导出模式(Static Export) | 无需 Node 服务器,仅静态资源 | 放上 CDN 或任意静态托管服务 |
| 服务端渲染(SSR) | 每个请求实时渲染 | 需要 Node.js 环境 |
| 增量静态生成(ISR) | 混合静态与实时更新 | 需 Node 环境 + 边缘缓存 |
| Server Actions / Edge Runtime | 基于 Vercel Edge Functions 等平台 | 最靠近用户的无服务器架构 |
⚙️ 二、部署准备
确保开发完成后执行以下构建命令:
bash
npm run build
# 或
yarn build
# 或
pnpm build
这将生成:
.next/--- 编译后的应用目录.next/static/--- 静态资源.next/server/--- SSR 代码
🧰 构建环境要求
- Node.js ≥ 18.17
- npm / pnpm / yarn
- 环境变量通过
.env.production管理
🧱 三、常见部署方式汇总
🌩️ 1. 部署到 Vercel(一键官方方案)
Next.js 背后的公司------Vercel------提供最无痛的部署流程:
- 推送项目到 GitHub
- 登录 vercel.com
- 点击 "New Project"
- 选择你的仓库 → 自动检测 Next.js → 一键部署
Vercel 将自动处理:
- 自动构建
- Edge CDN 缓存
- ISR 更新策略
✅ 适用于:希望快速上线、自动扩缩、大规模分发的项目。
🧭 2. 部署到传统服务器(Node.js 环境)
在 Linux 服务器上执行:
arduino
npm install --production
npm run build
npm run start
默认监听端口为 3000 。
可通过设置环境变量来修改:
ini
PORT=8080 npm run start
配合反向代理的 Nginx 配置示例:
ini
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
}
✅ 适用于:企业内网、自建云服务器等灵活部署场景。
🔥 3. Docker 容器化部署
Docker 让部署 Next.js 稳定且可移植。
Dockerfile 示例:
bash
# 1️⃣ 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build
# 2️⃣ 运行阶段
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app ./
EXPOSE 3000
CMD ["npm", "start"]
构建并运行容器:
arduino
docker build -t nextjs-app .
docker run -d -p 3000:3000 nextjs-app
✅ 适用于:Kubernetes、Docker Compose、云上容器部署。
🪶 4. 静态导出模式(Static Export)
如果不需要 SSR,可以直接导出纯静态 HTML 文件。
lua
next build && next export
然后把 out/ 目录上传到:
- GitHub Pages
- AWS S3 / CloudFront
- Nginx
root目录 - Netlify / Cloudflare Pages
✅ 适用于:无动态需求的博客、落地页、文档网站。
🧠 四、性能与优化建议
| 优化方向 | 工具 / 方法 |
|---|---|
| 压缩和缓存 | 使用 next/image、next/script、CDN 缓存层 |
| ISR 更新策略 | 配置 revalidate 时间 |
| Edge Functions | 低延迟动态生成 |
| 环境变量分离 | 使用 .env.local / .env.production |
| 日志与监控 | 配合 PM2 / Datadog / Grafana |
🧩 五、PM2 生产进程管理
防止服务崩溃或重启,可以用 PM2 进程守护:
arduino
npm install -g pm2
pm2 start npm --name "nextjs-app" -- run start
pm2 save
pm2 startup
查看日志:
pm2 logs nextjs-app
🚀 即使系统意外重启,也能自动恢复服务。
📊 六、架构摘要图
scss
┌────────────┐
│ Client │
└──────┬─────┘
│ HTTP
┌──────▼──────┐
│ Reverse │
│ Proxy(Nginx)│
└──────┬──────┘
│
┌──────▼──────┐
│ Next.js App │ ← Node.js 运行 (SSR / API / ISR)
└──────┬──────┘
│
┌──────▼──────┐
│ Data Source │ (DB / API / Redis / CMS)
└─────────────┘
🎯 七、快速部署小抄
| 操作 | 命令 |
|---|---|
| 生产构建 | npm run build |
| 启动服务 | npm run start |
| 静态导出 | next export |
| 容器化部署 | docker build -t app . |
| 开发模式 | npm run dev |
| 环境变量配置 | .env.production |
💡 总结
Next.js 的部署逻辑本质上是三步曲:
- Build(构建) :打包优化,生成
.next/ - Serve(提供服务) :Node 运行 or 静态托管
- Optimize(优化) :缓存、CDN、ISR、PM2 守护
👉 通过灵活选择运行模式与部署方案,
你可以在成本、性能、体验之间找到完美平衡。
🌈 最后一行:
"部署不是终点,而是 Web 应用灵魂的上架仪式。" 🚀