Next.js第十七课 - 部署

前面我们学习了很多 Next.js 的功能和特性,本节来聊聊部署。把应用部署到生产环境是开发流程的最后一步,也是让用户能够访问你应用的关键步骤。

部署概述

Next.js 可以部署到多个平台:

  1. Vercel - 官方平台,零配置
  2. 自托管 - Node.js 服务器
  3. Docker - 容器化部署
  4. 静态导出 - 纯静态托管
  5. 其他平台 - Netlify、Railway、AWS 等

Vercel 是 Next.js 的官方平台,提供最佳的性能和体验。

准备部署

构建应用

在部署前,先在本地测试构建:

bash 复制代码
# 安装依赖
npm install

# 构建生产版本
npm run build

# 测试生产版本
npm start

环境变量

创建 .env.production

env 复制代码
# 数据库
DATABASE_URL=postgresql://...

# API 密钥
API_KEY=your_production_api_key
API_SECRET=your_production_secret

# 应用配置
NEXT_PUBLIC_APP_URL=https://yourdomain.com

检查清单

部署前检查:

  • 所有环境变量都已配置
  • 构建成功无错误
  • 生产环境下测试正常
  • 数据库迁移已完成
  • 静态资源(图片、字体)已优化

部署到 Vercel

安装 Vercel CLI

bash 复制代码
npm install -g vercel

登录 Vercel

bash 复制代码
vercel login

部署项目

bash 复制代码
vercel

按照提示操作,Vercel 会自动:

  1. 检测项目类型(Next.js)
  2. 构建项目
  3. 部署到边缘网络
  4. 提供一个 HTTPS URL

配置环境变量

在 Vercel 控制台中配置环境变量:

  1. 进入项目设置
  2. 找到 Environment Variables
  3. 添加所有环境变量
  4. 重新部署项目

自定义域名

在 Vercel 控制台中添加自定义域名:

  1. 进入项目设置
  2. 找到 Domains
  3. 添加你的域名
  4. 按照提示配置 DNS

部署到其他平台

部署到 Netlify

创建 netlify.toml

toml 复制代码
[build]
  command = "npm run build"
  publish = ".next"

[[plugins]]
  package = "@netlify/plugin-nextjs"

部署到 Railway

Railway 支持 Docker 和直接部署,推荐使用 Docker:

dockerfile 复制代码
# Dockerfile
FROM node:20-alpine AS base

# Install dependencies only when needed
FROM base AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci

# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app

ENV NODE_ENV production

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs

COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

USER nextjs

EXPOSE 3000

ENV PORT 3000

CMD ["node", "server.js"]

部署到 Docker

构建 Docker 镜像:

bash 复制代码
docker build -t my-nextjs-app .

运行容器:

bash 复制代码
docker run -p 3000:3000 my-nextjs-app

自托管

如果你有自己的服务器,可以自托管 Next.js 应用。

使用 standalone 模式

next.config.js 中启用 standalone 模式:

javascript 复制代码
module.exports = {
  output: 'standalone',
}

构建后,会生成一个独立的服务器:

bash 复制代码
npm run build

启动服务器:

bash 复制代码
node .next/standalone/server.js

使用 PM2 管理进程

安装 PM2:

bash 复制代码
npm install -g pm2

启动应用:

bash 复制代码
pm2 start .next/standalone/server.js --name my-nextjs-app

静态导出

如果你的应用完全是静态的,可以导出为静态 HTML。

配置静态导出

next.config.js 中配置:

javascript 复制代码
module.exports = {
  output: 'export',
  images: {
    unoptimized: true,
  },
}

构建静态站点

bash 复制代码
npm run build

构建完成后,out 目录包含所有静态文件,可以部署到任何静态托管服务。

部署到静态托管

部署到 Nginx、Apache、GitHub Pages、Netlify 等静态托管服务。

性能优化

启用压缩

next.config.js 中启用压缩:

javascript 复制代码
module.exports = {
  compress: true,
}

配置 CDN

Vercel 默认提供 CDN,其他平台需要手动配置。

监控性能

使用 Vercel Analytics 或其他监控工具:

tsx 复制代码
// app/layout.tsx
import { Analytics } from '@vercel/analytics/react'

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html>
      <body>
        {children}
        <Analytics />
      </body>
    </html>
  )
}

CI/CD

GitHub Actions

创建 .github/workflows/deploy.yml

yaml 复制代码
name: Deploy to Vercel

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: amondnet/vercel-action@v25
        with:
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          vercel-org-id: ${{ secrets.ORG_ID }}
          vercel-project-id: ${{ secrets.PROJECT_ID }}
          vercel-args: '--prod'

实用建议

这里分享几个在部署应用时特别有用的技巧。

使用环境变量

实际开发中,使用环境变量管理敏感信息是最基本也最重要的实践:

env 复制代码
# 推荐这样做 - 使用环境变量
DATABASE_URL=postgresql://...
API_KEY=secret_key

# 避免这种情况 - 硬编码敏感信息非常危险

定期备份

这里有个小建议:定期备份数据库和重要文件,这个习惯能在关键时刻救你一命。

监控应用

这个技巧特别有用------使用日志和监控工具跟踪应用状态,能帮你快速发现和解决问题。

安全配置

最后分享几个安全方面的建议:

  • 始终使用 HTTPS
  • 正确配置 CORS
  • 设置 CSP 头增强安全性
  • 定期更新依赖包修复漏洞

总结

本节我们学习了 Next.js 应用的部署方法,包括 Vercel、自托管、Docker、静态导出等。选择合适的部署方式取决于你的需求和预算。Vercel 是最简单的选择,自托管提供更多控制权。

到这里,我们的 Next.js 教程就结束了。如果你对任何内容有疑问,欢迎在评论区提出来,我们一起学习讨论。祝你在 Next.js 的学习之路上越走越远!

原文地址: blog.uuhb.cn/archives/ne...

相关推荐
xiaoxue..2 分钟前
讲讲 浏览器的缓存机制
前端·缓存·面试·浏览器
Data_Journal5 分钟前
Node.js网络爬取指南——简单易上手!
大数据·linux·服务器·前端·javascript
a11177616 分钟前
可视化角色权限配置页面(html 开源)
前端·开源·html
Lee川23 分钟前
个人中心与 AI 头像生成:从页面到 DALL-E 的完整实现
前端·架构
tedcloud1236 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
UXbot9 小时前
AI原型设计工具如何支持团队协作与快速迭代
前端·交互·个人开发·ai编程·原型模式
ZC跨境爬虫10 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频
PieroPc11 小时前
CAMWATCH — 局域网摄像头监控系统 Fastapi + html
前端·python·html·fastapi·监控
巴巴博一12 小时前
2026 最新:Trae / Cursor 一键接入 taste-skill 完整教程(让 AI 前端告别“AI 味”)
前端·ai·ai编程
kyriewen12 小时前
半夜三点线上崩了,AI替我背了锅——用AI排错,五分钟定位三年老bug
前端·javascript·ai编程