Next.js 安装部署教程
Next.js 16 要求 Node.js 20.9+,默认打包器已切换为 Turbopack,默认集成 React Compiler,并原生支持 AI Agent 通过 MCP 协议对接 DevTools。
一、环境准备
node -v # 需要 >= 20.9
npm -v可选工具:
# 容器化部署需要
docker --version
# Kubernetes 部署需要
kubectl versionmacOS 推荐用 nvm 管理 Node 版本:
nvm install 20
nvm use 20二、项目初始化
方式 A:新建项目
npx create-next-app@latest my-app
cd my-app交互式选项中建议:
- TypeScript:Yes
- ESLint:Yes
- Tailwind CSS:按需开启
- App Router:Yes
- Turbopack:Yes(默认)
方式 B:克隆开源项目
git clone https://github.com/vercel/next.js.git
cd next.js
npm install三、本地开发
npm run dev浏览器访问 http://localhost:3000。
package.json 核心脚本:
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint"
}
}本地开发不要用 Docker 跑 next dev,macOS / Windows 下文件系统性能较差。
四、生产构建
npm run build
npm startnpm run build 生成 .next 目录;npm start 启动内置 Node.js 服务器,完整支持 SSR、ISR、API Routes、Server Components。
五、部署方式
1. Vercel(最快上手)
npm install -g vercel
vercel login
vercel --prod或直接在 Vercel Dashboard 导入 GitHub 仓库,push 即自动部署。
2. Node.js 自托管
npm run build
pm2 start npm --name next-app -- start
pm2 save前面挂 Nginx 反向代理 + HTTPS 即可上线。
3. Docker(standalone 模式)
next.config.ts 中开启 standalone:
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
output: "standalone",
};
export default nextConfig;Dockerfile(多阶段构建):
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
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"]构建运行:
docker build -t next-app .
docker run -p 3000:3000 next-appstandalone 模式下,运行时必须用 node server.js,不能用 npm start / next start。
4. Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: next-app
spec:
replicas: 2
selector:
matchLabels:
app: next-app
template:
metadata:
labels:
app: next-app
spec:
containers:
- name: next-app
image: next-app:latest
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
---
apiVersion: v1
kind: Service
metadata:
name: next-app
spec:
selector:
app: next-app
ports:
- port: 80
targetPort: 3000
type: ClusterIP外部访问再加 Ingress 或 Gateway API。多副本 ISR 场景需共享存储卷。
5. 静态导出(仅静态站点)
const nextConfig: NextConfig = { output: "export", };npm run build产物在 out/ 目录,可托管到 Nginx / S3 / GitHub Pages。不支持 SSR、ISR、API Routes、Server Actions。
六、常见问题
- 构建失败:检查 Node 版本 ≥ 20.9、依赖是否完整、环境变量是否缺失。
- standalone 启动失败:确认已复制
.next/static和public,且用node server.js启动。 - 环境变量不生效:前端变量必须
NEXT_PUBLIC_前缀,服务端变量在部署平台注入。 - K8s 多副本 ISR 异常:需配置共享卷让副本共享 ISR 缓存。
- UUID 兼容:IP 访问(非 HTTPS/localhost)时
crypto.randomUUID可能受限,建议用第三方 uuid 库。