Skip to content
返回部署

部署 Next.js 应用

Next.js 的 SSR/SSG/ISR 部署,支持图片优化、API 路由和中间件,可部署到 Vercel 或自托管。

平台进阶

为什么

Next.js 在一个框架内支持混合渲染(SSG + SSR + ISR),Vercel(其创建者)提供零配置部署、边缘中间件和图片优化。通过 standalone 输出自托管可获完全控制。

何时使用

SEO 敏感的营销站、电商和需要 SSR 的仪表盘用 Next.js。需要自定义基础设施或气隙环境时自托管。

如何做

1. Vercel 路径 — git push,自动检测,零配置 2. 自托管 — next.config.js output: "standalone",生成 .next/standalone 3. Docker — 复制 standalone + static 到最小镜像,node server.js 4. API 路由 — Vercel 上为 serverless 函数,自托管在 Node 容器运行 5. 图片 — next/image 用 Vercel 优化器;自托管设 images.unoptimized 或自定义 loader 6. 中间件 — 边缘(Vercel)或 Node(自托管)运行,鉴权/地理/重写 7. ISR — revalidate 属性按需重生成页面,自托管需持久存储

示例

// next.config.js — 自托管 standalone 输出 /** @type {import('next').NextConfig} */ module.exports = { output: "standalone", images: { unoptimized: process.env.SELF_HOSTED === "true" }, }; // Dockerfile(自托管) FROM node:20-alpine AS builder WORKDIR /app COPY . . RUN npm ci && npm run build FROM node:20-alpine WORKDIR /app COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/public ./public EXPOSE 3000 CMD ["node", "server.js"] // middleware.ts — 边缘鉴权 export function middleware(req: NextRequest) { if (!req.cookies.get("token")) return NextResponse.redirect("/login"); } export const config = { matcher: ["/dashboard/:path*"] };

常见问题

  • ⚠自托管 ISR 重启丢缓存 — 无持久存储,页面冷重渲染
  • ⚠自托管图片优化 502 — 忘记禁用或配置 sharp/loader
  • ⚠中间件在 Node 而非边缘运行 — 旧版 Next.js 或自托管无边缘运行时

最佳实践

  • ✓Docker 部署用 output: 'standalone' — 生成最小自包含服务器
  • ✓images.formats 仅设所需格式(avif、webp)以减少优化成本
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答