首頁/名詞解釋/環境變數 Environment Variable

階段 8 · 上線與維運(部署)

環境變數 Environment Variable

放 API key、資料庫網址、環境設定等不該寫死在程式裡的值。

先用一句話理解

放 API key、資料庫網址、環境設定等不該寫死在程式裡的值。

打個比方

像店家的保險箱密碼與營業設定,不能印在菜單上。

什麼時候會遇到

串資料庫、付款、Email、AI API、第三方服務時。

再往深一點看

環境變數是放在程式碼之外的設定值,讓同一套程式碼在不同環境(本機開發、preview、production)可以連接不同的服務或使用不同的密鑰,而不需要改程式碼。它的核心用途有兩種:第一是安全性——把資料庫密碼、Stripe secret key、OpenAI API key 這類不能洩漏的值從程式碼中抽離,不 commit 進 git;第二是環境切換——`NODE_ENV=development` 時連測試資料庫,`NODE_ENV=production` 時連正式資料庫,同一套程式行為不同。在 Next.js 裡,`NEXT_PUBLIC_` 開頭的環境變數會暴露給瀏覽器,沒有這個前綴的只存在伺服器端——把 secret key 放進 `NEXT_PUBLIC_` 等於公開給任何人。

舉個例子

你的專案有 `DATABASE_URL`、`STRIPE_SECRET_KEY`、`RESEND_API_KEY` 三個環境變數:本機放在 `.env.local`(這個檔案要加進 `.gitignore`),Vercel 的 production 和 preview 環境分別在 Vercel 後台的 Environment Variables 頁面設定,程式碼透過 `process.env.STRIPE_SECRET_KEY` 讀取,git 倉庫裡永遠看不到這些值。

常見誤解

  • - 把含有真實 secret key 的 `.env` 或 `.env.local` 檔案 commit 進 git 倉庫,就算後來刪掉該 commit,git 歷史裡依然查得到,GitHub 掃到後會通知服務方自動撤銷該 key。
  • - 忘了在 Vercel(或其他 hosting)後台設定環境變數,只在本機 `.env.local` 有設,deploy 到 production 後服務讀不到值,API 呼叫全部失敗。
  • - 把應該只在伺服器端用的 secret key 命名成 `NEXT_PUBLIC_STRIPE_SECRET_KEY`,前端程式碼可以讀到,瀏覽器 DevTools 直接就能看到完整 key。

相關名詞

相關服務

VercelGitHub

相關工具