首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau
百百 BLOG
首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau

Kurau Blog

「隨心而寫,真真假假,都是我」

一個記錄生活、輸出興趣的個人空間。
遊戲、影視、閱讀、學習……每一段體驗都值得留下文字。

頁面導覽

  • 學習紀錄
  • 遊戲心得
  • 影視Life
  • 書單
  • 委託作品與二創
  • Kurau
  • 合作邀請

找到我

歡迎來 Discord 找我聊天!

“曾經發生的事不可能忘記,只是暫時想不起來而已。”-《神隱少女》

© 2026 Kurau All rights reserved

部署與DevOps

如何布置靜態網站 (免費資源) ⇒ Next.js

By Kurau·2023-03-13·Updated 2026-05-09·5 分鐘閱讀

如何部署靜態網站(免費資源) — Next.js

TL;DR
Next.js 部署選擇:Vercel(母公司,零設定,動態功能完整)、Cloudflare Pages(全球 edge,免費額度大)、GitHub Pages(只能靜態 export)、自架(VPS / Docker)。2026 年首選 Vercel,需要極大流量或 edge 場景考慮 Cloudflare。

Next.js 部署選擇對比

選擇動態功能免費額度設定難度
Vercel✅ 完整(SSR / ISR / API / Middleware)100GB 頻寬⭐ 零設定
Cloudflare Pages✅ 大部分(透過 Workers)無限請求⭐⭐
Netlify✅ 大部分100GB 頻寬⭐⭐
GitHub Pages❌ 只能靜態 export100GB 頻寬⭐⭐
==自架(VPS + Docker)✅ 完整(要錢)⭐⭐⭐⭐

為什麼選 Vercel

Vercel 是 Next.js 的母公司,部署體驗是業界最好之一:

1. push 到 GitHub
2. Vercel 自動 build
3. 自動部署
4. 自動 preview deploy(每個 PR 一個 URL)
5. 自動 SSL
6. 自動 CDN

整個流程零設定,連 Dockerfile 都不用寫。

部署步驟

# 方法 1:GUI
# 1. 去 vercel.com
# 2. Import GitHub repo
# 3. 點 Deploy
# 完成

# 方法 2:CLI
npm i -g vercel
cd my-nextjs-project
vercel              # 跟著 prompt 走,2 分鐘起站
vercel --prod       # 部署 production
bash

Vercel 內建優化

功能說明
Automatic SSLLet's Encrypt 自動續
Edge Network全球 100+ POP
Image Optimizationnext/image 走 Vercel,自動 WebP/AVIF
Font Optimizationnext/font 走 Vercel CDN
Preview Deployments每個 PR 一個獨立 URL,reviewer 可以看
Analytics內建 Web Vitals 監控
Speed InsightsRUM 真實使用者效能

Vercel vs GitHub 角色差異

很多人搞混 Vercel 跟 GitHub。它們 互補不衝突:

維度GitHubVercel
角色程式碼倉儲前端應用部署平台
收費Public repo 免費個人 / hobby 免費
主要功能版本控制 + 協作build + deploy + 託管
適合所有專案現代 Web App
自定義程度高低(trade off:換最佳預設值)

典型流程:

寫 code → push GitHub → Vercel webhook 接到 → build → deploy → URL 出來

兩者搭配 才是現代前端部署 pipeline。


Cloudflare Pages(2026 強推)

免費額度比 Vercel 大很多:

無限請求數 / 500 build/月 / 不限頻寬

適合:

  • 流量大(免頻寬限制)
  • 需要 Cloudflare Workers 配合(KV / R2 / D1 / Durable Objects)
  • 想用 其他 framework(Astro / SvelteKit / Remix)
# 部署 Next.js 到 Cloudflare Pages
npm install --save-dev @cloudflare/next-on-pages
bash
// next.config.js
module.exports = {
  // 用 Edge Runtime
  experimental: { runtime: 'edge' },
};
javascript
# build & deploy
npx @cloudflare/next-on-pages
npx wrangler pages deploy .vercel/output/static
bash

陷阱:

  • SSR 要走 Edge Runtime,不能用所有 Node.js API
  • Image Optimization 要自己處理(沒有 Vercel 的內建)

GitHub Pages(只能靜態)

Next.js 走 GitHub Pages 必須做 static export:

// next.config.js
module.exports = {
  output: 'export',          // ⭐ 靜態 export
  images: {
    unoptimized: true,       // ⭐ 沒 Vercel,圖片優化關掉
  },
  basePath: '/my-repo',      // ⭐ 部署到 user.github.io/my-repo
  assetPrefix: '/my-repo/',
};
javascript

限制:

  • ❌ 沒 SSR / ISR / API Routes
  • ❌ 沒 Middleware
  • ❌ next/image 要關掉優化
  • ❌ 沒 dynamic route 帶 server data
  • ✅ 純 SSG 部落格 / 文件 OK

配 GitHub Actions 部署(詳見 React專案無法正常Github Action):

- run: npm run build
- uses: actions/upload-pages-artifact@v3
  with:
    path: ./out                # ⭐ Next.js 靜態 export 在 out/
- uses: actions/deploy-pages@v4
yaml

自架(VPS + Docker)

需要完全控制 / 客製化 / 不想 vendor lock-in:

# Dockerfile
FROM node:20-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci

FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
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"]
dockerfile
// next.config.js
module.exports = {
  output: 'standalone',      // ⭐ 產生最小化的 Node.js server
};
javascript
# 部署到任何 Linux VPS
docker build -t my-app .
docker run -p 3000:3000 my-app

# 配 Caddy 反向代理 + SSL
caddy reverse-proxy --from yourdomain.com --to localhost:3000
bash

適合:

  • 完全控制 server 環境
  • 已有 VPS 想多塞東西
  • 規避 Vercel 流量限制

代價:

  • 自己負責 更新、監控、SSL、scaling
  • 沒有 preview deploy 等便利功能

部署平台選型決策樹

你寫 Next.js 嗎?
├── 是 → 流量大?
│       ├── 否(< 50K MAU)→ ==Vercel==(zero config)
│       └── 是 → ==Cloudflare Pages==(無頻寬限制)
│
└── 否(其他 framework / 純靜態)
    └── 想簡單 → ==Cloudflare Pages== / ==Netlify==

進階:多環境部署

# .github/workflows/deploy.yml
on:
  push:
    branches: [main, staging]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20 }
      - run: npm ci
      - run: npm run build
      - name: Deploy to Vercel
        run: npx vercel --token ${{ secrets.VERCEL_TOKEN }} ${{ github.ref == 'refs/heads/main' && '--prod' || '' }}
yaml

main → production、staging branch → preview,完全自動化。

目錄

    ◆ 相關文章

    • React專案無法正常Github Action

      2026-05-09
    • 如何找到你的ip與local

      2026-05-09
    • 免費伺服器 介紹

      2026-05-09
    • 網頁縮圖 - SEO

      2026-05-09
    ← 上一篇語言切換下一篇 →從現在開始改用Next.js

    ◆ 關於作者

    Kurau

    個人寫作 / 創作的 SoT,記錄遊戲、影視、學習與生活。

    更多 Kurau 的文章