Heroku 部署教學:免費方案與付費方案完整比較
「Heroku 不是有免費方案嗎?怎麼現在要收費了?」
如果你是在 2022 年之前學程式的,應該對 Heroku 的免費方案印象深刻。但時代變了,2022 年 11 月起,Heroku 取消了免費方案,現在是純付費平台。
不過,Heroku 仍然是最容易上手的 PaaS 平台之一。這篇文章會帶你了解 Heroku 目前的方案選擇、完整的部署流程,以及如果預算有限,有哪些免費替代方案可以考慮。
Heroku 是什麼?
在討論方案和價格前,先認識一下 Heroku 這個平台。
Heroku 平台介紹
Heroku 是 Salesforce 旗下的 PaaS(Platform as a Service)平台,2007 年創立,是最早讓開發者可以「專注寫程式,不管伺服器」的雲端服務之一。
Heroku 的核心理念:
git push 就能部署,其他的事情我們來處理。
當你把程式碼 push 到 Heroku,平台會自動:
1. 偵測你的程式語言
2. 安裝相依套件
3. 編譯(如果需要)
4. 啟動應用程式
5. 提供一個 xxx.herokuapp.com 網址
這種「零設定」的體驗,讓 Heroku 在過去十幾年成為新手學習部署的首選。
Heroku 的優缺點
優點
| 優點 | 說明 |
|---|---|
| 簡單易用 | 幾乎零設定,push 即部署 |
| 多語言支援 | Node.js、Python、Ruby、Java、PHP、Go 等 |
| Add-ons 生態系 | 資料庫、快取、監控等一鍵安裝 |
| Pipeline 功能 | 內建 staging/production 流程 |
| 可靠穩定 | 老牌平台,文件完整 |
缺點
| 缺點 | 說明 |
|---|---|
| 沒有免費方案 | 2022 年取消,最低 $5/月 |
| 冷啟動問題 | Eco/Basic 方案閒置會休眠 |
| 費用較高 | 相比新興平台,性價比較低 |
| 區域限制 | 主要在美國和歐洲,亞洲延遲較高 |
適合什麼類型的專案
適合用 Heroku
- 小型到中型 Web 應用
- 需要快速上線的 MVP 或 Side Project
- 團隊熟悉 Heroku 生態系
- 需要豐富的 Add-ons(如 PostgreSQL、Redis)
可能不適合
- 預算有限的個人專案
- 需要低延遲的亞洲用戶服務
- 需要持續運行的背景任務(Eco 方案會休眠)
- 大流量生產環境(費用會很高)
想了解更多 PaaS 平台的選擇,可以參考 程式部署完整指南。
Heroku 方案比較
取消免費方案後,Heroku 目前有哪些選擇?
免費方案(已取消)的替代方案
2022 年 11 月 28 日,Heroku 正式取消免費方案。如果你需要免費的部署平台,可以考慮:
| 替代方案 | 免費額度 | 適合類型 |
|---|---|---|
| Railway | $5/月額度 | 全端應用 |
| Render | 靜態網站免費 | 前端/靜態網站 |
| Fly.io | 一定免費額度 | 全球分散部署 |
| Vercel | 前端免費 | Next.js/前端專案 |
| Netlify | 靜態網站免費 | 靜態網站/JAMstack |
如果你的專案是後端 API,Railway 是最接近 Heroku 體驗的替代方案,可以參考 Railway 部署教學。
Eco / Basic / Standard 方案比較
Heroku 目前的主要方案:
| 方案 | 月費 | Dyno 時數 | 記憶體 | 休眠 | 適合用途 |
|---|---|---|---|---|---|
| Eco | $5 | 1000 小時/月 | 512 MB | 30 分鐘閒置休眠 | 個人專案、學習 |
| Basic | $7/dyno | 無限 | 512 MB | 30 分鐘閒置休眠 | 小型專案 |
| Standard 1X | $25/dyno | 無限 | 512 MB | 不休眠 | 正式環境 |
| Standard 2X | $50/dyno | 無限 | 1 GB | 不休眠 | 中型應用 |
| Performance | $250+/dyno | 無限 | 2.5 GB+ | 不休眠 | 大型應用 |
關鍵差異解釋
Dyno 是什麼?
Dyno 就是 Heroku 的運算單位,可以理解為一個容器。一個 Web 應用至少需要一個 Web Dyno。
Eco vs Basic
- Eco:$5 買 1000 小時,可以多個 App 共享
- Basic:每個 App 獨立計費,每個 $7/月
休眠機制
Eco 和 Basic 方案,如果 30 分鐘沒有請求,App 會進入休眠。下次請求需要等待 10-30 秒喚醒(冷啟動)。
費用試算範例
情境一:個人 Side Project
- 1 個 Node.js API
- 預計每天訪問幾次
- 可接受冷啟動延遲
→ Eco 方案:$5/月
情境二:小型正式服務
- 1 個 Web App
- 需要 24/7 運行
- 不能有冷啟動
→ Standard 1X:$25/月
情境三:完整 Web 應用
- 1 個 Web App
- 1 個 Worker(背景任務)
- PostgreSQL 資料庫
→ Standard 1X × 2 + Postgres Hobby:$25 × 2 + $9 = $59/月
💡 不確定該選 Heroku 還是其他平台? 現在有很多 PaaS 選擇,各有優缺點。如果你對費用或功能有疑問,讓 VibeFix 幫你評估,我們可以根據你的需求推薦最適合的方案。
Heroku 部署實戰
接下來實際動手,把一個 Node.js 專案部署到 Heroku。
安裝 Heroku CLI
首先安裝 Heroku 命令列工具:
# macOS
brew tap heroku/brew && brew install heroku
# Windows(使用安裝程式)
# https://devcenter.heroku.com/articles/heroku-cli
# Ubuntu/Debian
curl https://cli-assets.heroku.com/install.sh | sh
# 驗證安裝
heroku --version
登入 Heroku
heroku login
# 會開啟瀏覽器進行登入
建立 Heroku App
方法一:使用 CLI
# 在專案目錄執行
cd my-node-app
# 建立 Heroku App
heroku create my-awesome-app
# 如果不指定名稱,Heroku 會自動產生
heroku create
建立後會得到:
- App 網址:https://my-awesome-app.herokuapp.com
- Git remote:heroku(自動加到你的 Git 設定)
方法二:使用 Dashboard
- 登入 Heroku Dashboard
- 點選「New」→「Create new app」
- 輸入 App 名稱
- 選擇區域(United States 或 Europe)
- 點選「Create app」
設定環境變數
不要把機密資訊寫在程式碼裡!使用 Config Vars:
# 設定單一環境變數
heroku config:set NODE_ENV=production
# 設定多個環境變數
heroku config:set DATABASE_URL=postgres://... API_KEY=your-key
# 查看所有環境變數
heroku config
# 刪除環境變數
heroku config:unset API_KEY
在程式碼中讀取:
// Node.js
const apiKey = process.env.API_KEY;
const port = process.env.PORT || 3000;
注意:Heroku 會自動設定 PORT 環境變數,你的應用必須監聽這個 Port。
部署程式碼
準備 Procfile
Heroku 需要知道如何啟動你的應用。在專案根目錄建立 Procfile(沒有副檔名):
web: node server.js
或者如果用 npm scripts:
web: npm start
確認 package.json
{
"name": "my-node-app",
"version": "1.0.0",
"engines": {
"node": "18.x"
},
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.18.2"
}
}
執行部署
# 確保程式碼已 commit
git add .
git commit -m "Ready for Heroku deployment"
# 部署到 Heroku
git push heroku main
# 如果你的主分支是 master
git push heroku master
部署過程 Heroku 會:
1. 偵測到 Node.js 專案
2. 安裝 dependencies
3. 執行 build script(如果有)
4. 啟動 web dyno
開啟應用
heroku open
連接資料庫
Heroku 最常用的資料庫是 Heroku Postgres:
# 安裝 Postgres Add-on(Hobby Dev 方案,免費但有限制)
heroku addons:create heroku-postgresql:mini
# 查看資料庫資訊
heroku pg:info
# 取得連線字串
heroku config:get DATABASE_URL
安裝後,DATABASE_URL 環境變數會自動設定。在 Node.js 中使用:
const { Pool } = require('pg');
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
});
想深入了解 Node.js 的部署技巧,可以參考 Node.js 部署教學。
Heroku 常見問題
部署 Heroku 時最常遇到的錯誤和解決方法。
H10 App Crashed
錯誤訊息
Error H10 (App crashed)
常見原因與解決方法
-
缺少 Procfile 或格式錯誤
# 正確格式(注意冒號後有空格) web: node server.js -
沒有監聽正確的 PORT
```javascript
// 錯誤:寫死 port
app.listen(3000);
// 正確:使用環境變數
const port = process.env.PORT || 3000;
app.listen(port);
```
- 依賴安裝失敗
```bash
# 檢查 logs
heroku logs --tail
# 確保 dependencies 在正確位置(不是 devDependencies)
```
- 啟動腳本錯誤
json // 確認 package.json 的 start script { "scripts": { "start": "node server.js" } }
R14 Memory Exceeded
錯誤訊息
Error R14 (Memory quota exceeded)
原因
應用程式使用的記憶體超過方案限制(Eco/Basic 是 512 MB)。
解決方法
-
檢查記憶體使用
bash heroku logs --tail | grep memory -
優化程式碼
- 檢查記憶體洩漏
- 減少一次載入的資料量
- 使用 streaming 處理大檔案 -
升級方案
- Standard 2X 有 1 GB 記憶體
- Performance 有 2.5 GB 以上
Slug Size Too Large
錯誤訊息
Compiled slug size: 600M is too large (max is 500M)
原因
打包後的應用程式太大,超過 500 MB 限制。
解決方法
-
加入 .slugignore
# .slugignore *.md docs/ test/ .git -
清理不必要的依賴
bash npm prune --production -
使用 .gitignore 排除大檔案
- 不要 commit node_modules
- 不要 commit 測試資料
Heroku 替代方案比較
如果覺得 Heroku 太貴或不符合需求,這些是熱門的替代方案:
| 平台 | 免費額度 | 特色 | 適合 |
|---|---|---|---|
| Railway | $5/月 | 體驗最接近 Heroku | 全端應用 |
| Render | 靜態網站免費 | 自動 SSL、簡單介面 | 靜態網站、Web Service |
| Fly.io | 有限免費 | 全球邊緣部署 | 需要低延遲 |
| Vercel | 前端免費 | Next.js 首選 | 前端專案 |
| Netlify | 靜態網站免費 | 強大的 CI/CD | 靜態網站 |
如果你要從 Heroku 遷移
- 前端/靜態網站 → Vercel 或 Netlify
- 後端 API → Railway 或 Render
- 全端應用 → Railway
- 需要全球分散 → Fly.io
FAQ 常見問題
Heroku 還值得用嗎?
對於有預算的團隊或公司專案,Heroku 仍然是可靠的選擇。優點是生態系成熟、文件完整、穩定性高。但對於個人專案或預算有限的情況,Railway 或 Render 可能更划算。
Eco 方案的 1000 小時怎麼計算?
1000 小時是所有 Eco Dyno 共享的總時數。如果你有 2 個 App 都用 Eco,每個每天運行 12 小時,一個月就用掉 720 小時(12 × 30 × 2)。超過 1000 小時後 App 會停止運行直到下個月。
如何避免冷啟動?
- 升級到 Standard 方案:不會休眠
- 使用外部監控服務:每隔幾分鐘 ping 一次你的 App
- 接受它:如果只是個人專案,10-30 秒冷啟動可能不是大問題
Heroku 可以部署前端專案嗎?
可以,但不推薦。前端專案用 Vercel 或 Netlify 更適合,而且有免費方案。Heroku 的優勢在後端和全端應用。
如何查看應用程式日誌?
# 即時查看日誌
heroku logs --tail
# 查看最近 100 行
heroku logs -n 100
# 只看 web dyno 的日誌
heroku logs --dyno web
Heroku 部署方案選擇建議與重點整理
Heroku 雖然取消了免費方案,但作為老牌 PaaS 平台,它的部署體驗仍然是業界標竿。如果你的專案有預算,Heroku 的穩定性和完整生態系值得考慮。
選擇建議:
| 情境 | 推薦 |
|---|---|
| 個人學習/Side Project | Railway(有免費額度) |
| 小型正式服務 | Heroku Standard 或 Railway |
| 公司/團隊專案 | Heroku Standard/Performance |
| 純前端專案 | Vercel 或 Netlify |
重點整理:
- 認清現實:Heroku 已無免費方案,最低 $5/月
- 選對方案:正式服務至少用 Standard,避免冷啟動
- 設定正確:Procfile、PORT 環境變數是關鍵
- 有替代方案:Railway、Render 是不錯的選擇
🔧 部署失敗?別擔心! Heroku 的錯誤訊息有時候不太直覺,H10、R14 這些代碼看得人頭痛。如果你在部署過程中遇到問題,讓 VibeFix 幫你解決,我們有豐富的 PaaS 部署經驗,可以快速找出問題所在。