兩種小成本架設靜態網站的方法 Github vs AWS S3

簡單來說: GitHub Pages 追求的是 (免費與簡便), 而 AWS S3 追求的是 (效能, 彈性與專業控制)

GitHub Pages
GitHub Pages 是 GitHub 提供的靜態網站託管服務,主要設計給開發者用來展示個人作品集 (Portfolio)、
開源專案文件或部落格。

** 優點 (Advantages) **
1. 完全免費 (Free of Charge):
這是最大的誘因。只要您的程式碼儲存庫 (Repository) 是**公開 (Public)**的,託管就是完全免費的。
(若使用私有儲存庫 (Private Repo) 則需要付費的 GitHub Pro 方案)

2. 極度簡便 (Ease of Use):
設定非常簡單,只需在儲存庫設定中點幾下,或是在專案中建立一個 gh-pages 分支。
與 Git 完美整合:部署流程就是您熟悉的 git push。只要將程式碼推送到指定的分支,網站就會自動更新。

3. 內建版本控制 (Version Control):
由於網站本身就是一個 Git 儲存庫,您的所有網頁內容都自動享有了完整的版本控制歷史。

4. 支援自訂網域 (Custom Domain):
您可以輕鬆地將自己的網域(例如 www.yourname.com)指向您的 GitHub Pages 網站。
GitHub 會自動提供免費的 SSL 憑證 (HTTPS),設定簡單。

5. Jekyll 整合 (Jekyll Integration):
內建支援 Jekyll,這是一個流行的靜態網站生成器 (SSG),非常適合用來寫部落格。

** 缺點 (Disadvantages) **
1. 僅限公開儲存庫 (Public Repos Only):
如上所述,免費方案要求您的網站原始碼必須是公開的,這對於某些商業專案或私密內容可能不適合。

2. 效能與限制 (Performance & Limits):
它不是一個全球 CDN (內容分發網路)。雖然速度不差,但對於全球訪客的載入速度可能不如 S3 + CloudFront
有「軟性」的使用限制。官方不建議用於高流量的商業網站,如果流量過大 (例如每月超過 100GB 頻寬或 10 萬次請求)
GitHub 可能會要求您轉移到其他平台。

3. 控制權有限 (Limited Control):
您無法自訂伺服器行為,例如設定複雜的重新導向 (Redirects)、自訂 HTTP 標頭 (Headers) 
或快取策略 (Caching Policy)。

4. 功能單一 (Single Purpose):
它只是一個靜態網站託管服務,無法像 AWS 一樣擴展整合資料庫、後端 API 等服務(當然,您可以另外架設)。
AWS S3 靜態網站託管
Amazon S3 (Simple Storage Service) 是一個物件儲存服務,但它有一個功能可以將儲存桶 (Bucket) 
設定為靜態網站託管模式。通常,它會搭配 AWS CloudFront (全球 CDN) 一起使用,以達到最佳效能。

** 優點 (Advantages) **
1. 極高的可靠性與擴展性 (High Reliability & Scalability):
S3 本身設計具有 99.999999999% (11 個 9) 的資料持久性,極度可靠。
它可以承受幾乎無限的流量,完全不用擔心網站因流量過大而掛點,非常適合專業和企業級的網站。

2. 全球 CDN 效能 (Global CDN Performance):
當 S3 搭配 AWS CloudFront (CDN) 使用時,您的網站內容會被快取到全球數百個邊緣節點。
這代表無論訪客在世界的哪個角落,都能以極低延遲(最快速度)載入您的網站。

3. 完整的控制權 (Full Control):
您可以精細控制網站的每一個細節,包括:
HTTP 標頭:設定快取時間 (Cache-Control)、安全性標頭等。
路由規則:設定複雜的頁面重新導向或重寫規則。
存取控制:透過 IAM 和 S3 儲存桶策略,精確控制誰可以存取。

4. 完整的 AWS 生態系 (Full AWS Ecosystem):
S3 可以與 AWS 的其他服務無縫整合,例如:
Route 53: 用於 DNS 網域管理。
AWS Certificate Manager (ACM): 提供免費的 SSL 憑證 (搭配 CloudFront)。
Lambda@Edge: 可以在 CDN 邊緣執行程式碼,實現動態內容或 A/B 測試。
AWS WAF: 網站應用程式防火牆,抵擋 DDoS 等網路攻擊。

** 缺點 (Disadvantages) **
1. 成本 (Cost):
不是免費的(雖然有新用戶免費額度)。
採用「隨用隨付」(Pay-as-you-go) 計價,您需要支付儲存空間的費用、資料傳輸(頻寬)的費用,以及 
CloudFront 的請求費用。
成本預估較難:對於新手來說,很難預估一個月會花多少錢。如果網站突然爆紅,費用也可能跟著飆升。

2. 設定複雜 (Complexity):
這是最大的門檻。與 GitHub Pages 相比,S3 的設定非常繁瑣。
一個完整的設定流程通常需要:
建立 S3 儲存桶並設定公開權限。
啟用靜態網站託管。
建立 CloudFront Distribution (CDN)。
(可選) 到 Route 53 設定網域。
(可選) 到 ACM 申請 SSL 憑證並綁定到 CloudFront。
這個過程涉及多個 AWS 服務,學習曲線非常高。

3. 部署流程 (Deployment Flow):
不像 GitHub Pages 有內建的 git push 部署。您需要手動將檔案上傳到 S3,或者使用 AWS CLI (命令列工具),
或是自己設定 CI/CD 流程 (例如使用 GitHub Actions 或 AWS CodePipeline) 來自動化部署。
特性GitHub PagesAWS S3 (搭配 CloudFront)
成本免費 (公開儲存庫)隨用隨付 (有免費額度)
易用性⭐⭐⭐⭐⭐ (非常簡單)⭐ (非常複雜)
部署方式git push (內建)需手動或自行設定 CI/CD
效能良好 (非 CDN)極佳 (全球 CDN)
擴展性良好 (有軟性限制)幾乎無限
控制權有限完全控制 (HTTP 標頭, 快取…)
SSL/HTTPS免費且自動設定免費 (需搭配 CloudFront & ACM)
生態系GitHub (版控、Actions)完整 AWS 雲端服務
所以是你的話該如何選擇?
  選擇 GitHub Pages,如果...
    您是個人開發者、學生。
    您需要一個免費的平台來架設個人作品集、部落格、開源專案文件。
    您希望部署流程盡可能簡單 (git push)。
    您的網站原始碼可以公開。
    您預期的流量不大。

  選擇 AWS S3 (+ CloudFront),如果...
    您正在架設一個專業的商業網站、企業形象網站或高流量的應用。
    您需要全球訪客都有極致的載入速度 (需要 CDN)。
    您需要精確控制快取策略、HTTP 標頭或安全性規則。
    您的網站原始碼需要保密。
    您已經在使用或不排斥學習 AWS 生態系,且願意支付合理的費用。

More From Author

使用 aws S3 架設 static website(靜態網頁), 網頁內的 link 只有指向目錄, 沒有指向 index, html 怎麼辦?

利用 Gitea 的 wiki 功能進行工作日誌的撰寫

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *