GitHub 能託管網站嗎?Pages 與 VPS 差在哪裡
GitHub 只儲存程式碼,GitHub Pages 只提供靜態檔案,無法執行後端應用程式。了解「There isn't a GitHub Pages site here.」的原因,以及何時需要 VPS。
GitHub 能託管網站嗎?簡短答案
GitHub 能託管網站嗎?可以,只要網站是由靜態檔案組成,並透過稱為 GitHub Pages 的功能提供服務。如果網站需要在伺服器上執行程式碼,就不行。GitHub 是 Git 儲存庫的託管平台,也提供圍繞儲存庫的協作功能,包括 issues、pull requests、程式碼審查與權限管理。它會儲存你的程式碼,但不會執行程式碼。
最後這句話就是所有混淆的根源,也讓初學者浪費數週時間。專案位於 GitHub,程式碼就在那裡,測試也通過了,但網站仍未上線,表單也不會儲存任何內容。以下內容將詳細說明這句話背後的原因。
GitHub 實際儲存的內容
Git 是在自己電腦上執行的版本控制工具。它會記錄檔案的每項變更,因此你可以回到任何較早的狀態,並查看誰變更了哪些內容。儲存庫(repo)就是一個專案及其完整歷程記錄。
GitHub 會在其伺服器上保留該儲存庫的副本,並加入 Git 本身沒有的功能:用於瀏覽程式碼的網頁、用於追蹤工作的 issues、用於提出變更的 pull requests,以及用於決定誰可以 push 的權限控管。這就是該產品的核心。若要進一步了解,請閱讀 GitHub 是什麼,以及人們用它來做什麼;如果你仍分不清這兩個名稱,Git 與 GitHub 的差異會說明如何區分這項工具與這項服務。GitHub 也不是儲存庫唯一可使用的平台,因為 Gitea、Forgejo 與其他自架 Git 伺服器也能在你控制的硬體上執行相同工作。
GitHub Pages 會提供哪些內容,以及不會提供哪些內容
GitHub Pages 會從儲存庫的某個分支取得檔案,並發布到公開 URL。GitHub 的官方文件將它稱為靜態網站託管服務,可直接從儲存庫提供 HTML、CSS 與 JavaScript 檔案。靜態表示伺服器會按照檔案儲存時的內容原樣回傳。伺服器讀取位元組後將其傳送出去。你撰寫的任何程式碼都不會在 GitHub 連線的伺服器端執行。
若要啟用此功能,請先推送檔案,接著在 github.com 開啟儲存庫,前往 Settings,再開啟 Pages 區段。選擇要發布的分支與資料夾,可以是儲存庫根目錄或 /docs。
git init
git add index.html style.css
git commit -m "First version of the site"
git branch -M main
git remote add origin https://github.com/YOUR-NAME/YOUR-REPO.git
git push -u origin main第一次建置完成後,網站位於 https://YOUR-NAME.github.io/YOUR-REPO/。有一種儲存庫名稱的行為不同:名為 YOUR-NAME.github.io 的儲存庫會發布至 https://YOUR-NAME.github.io/,其後不會再接路徑。如果 URL 顯示「There isn't a GitHub Pages site here.」,表示建置尚未完成,或 Pages 指向的分支或資料夾中沒有 index.html。
以下範例可直接看出這項規則。提交一個名為 save.php 的檔案,在其中放入任意 PHP 程式碼,然後請求該檔案:
curl https://YOUR-NAME.github.io/YOUR-REPO/save.php你會收到自己的 PHP 原始碼,字元完全相同。Pages 會回傳該檔案,因為它只負責回傳檔案。該 URL 背後沒有 PHP 直譯器,因此程式碼沒有可執行的位置。.py 檔案的行為相同,其他語言也一樣。
為什麼大學專案中的表單無法運作
能夠儲存資料的功能分為兩個部分。瀏覽器端是 HTML 和 JavaScript,Pages 會正常提供這部分。伺服器端則負責接收提交內容,並將資料寫入能在請求結束後繼續保存的位置。Pages 沒有伺服器端,因此提交至 /save.php 的表單會連到檔案伺服器,而該伺服器唯一的行為就是傳回檔案。資料不會寫入任何位置,訪客只會看到空白頁面,或在瀏覽器的網路分頁中看到請求失敗。
有兩種常見的替代方案,但兩者都有需要了解的限制。將項目儲存在 localStorage 會把資料放在單一裝置上的單一瀏覽器中。因此,老師開啟相同連結時會看到空白清單,因為老師的瀏覽器使用另一份獨立儲存空間。將資料庫位址和密碼放入 JavaScript 確實能讓頁面運作,但也會公開該密碼:任何人都能下載 Pages 提供的每個檔案,而相同檔案也會存在公開儲存庫中。在後續 commit 中刪除檔案並不能撤銷這項公開,因為較早的 commit 仍會在歷史記錄中保留該檔案。
託管表單服務和後端平台確實能補足這項缺口。對課堂專案而言,這是合理的選擇。但必須清楚了解其含義:執行中的程式碼已移至他人的伺服器。GitHub 仍然只是儲存你的原始碼。
GitHub Actions 的用途,而不是用來託管服務
Actions 是 CI,也就是持續整合。當儲存庫發生事件時,例如 push 或 pull request,GitHub 會啟動暫時的機器,替你執行命令。
name: build
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 24
- run: npm ci
- run: npm test這台機器稱為 runner。GitHub 會為此工作建立 runner,並在工作結束後將其刪除,因此最後執行 npm start 並不會託管任何服務。只要你的程序持續在前景執行,工作就會占用 runner;接著 workflow 達到時間限制並被終止,期間也沒有訪客能從網際網路連線到該程序。步驟失敗時,日誌會以 Process completed with exit code 1 結尾,幾秒後這台機器就會被刪除。
Actions 真正適合處理的是應用程式周邊的工作。它可以建置網站所需的靜態檔案,執行 Vite 或 Jekyll 建置,並將輸出發布到 Pages。它也能在每個 pull request 上執行測試,讓錯誤的變更在合併前被發現。此外,它可以連線到你擁有的伺服器並在該處部署,下一節將說明這部分。
這類專案適合採用 Pages 的範圍
- 作品集或履歷網站,無論是手寫或使用靜態網站產生器建立:可以。Pages 原本就是為此設計的。
- 沒有後端的 React 或 Vue 應用程式:可以。建置步驟會產生靜態檔案。請先將基底路徑設為
/YOUR-REPO/,否則建置後的頁面會在網域根目錄要求/assets/index.js;該路徑不存在,瀏覽器主控台也會出現大量 404 錯誤。 - 專案文件,包括在建置時產生搜尋索引的文件網站:可以。
- 聯絡表單或任何會儲存資料的頁面:不可以。必須有某個元件接收並保存提交的資料。
- 使用者名稱與密碼登入:不可以。驗證密碼需要執行訪客無法讀取的程式,而 Pages 提供的每個檔案都能由訪客讀取。
- 供行動應用程式呼叫的小型 API(application programming interface):不可以。API 是持續執行並回應請求的程式,而 Pages 沒有執行中的程式。
- 任何需要 API key 的功能,例如付款服務或 AI 模型:不可以,因為該金鑰會存放在整個網際網路都能下載的檔案中。
- 依排程更新資料的頁面:有限度地可以。Actions workflow 可以每天晚上執行、擷取資料、提交更新後的 JSON 檔案,接著由 Pages 提供該檔案。頁面本身仍是靜態的,資料的新鮮度取決於上次執行時間。
替代方案的樣子:執行應用程式的伺服器
只要專案需要執行程式碼,就需要一台持續開機並執行程式碼的電腦。常見做法是使用 VPS(virtual private server,虛擬私有伺服器):租用實體機器的一部分,按月付費,具備獨立的 Linux 安裝環境與 IP 位址,並由你取得 root 存取權限。應用程式會以服務形式在該伺服器上執行,並在開機時啟動;Nginx 等 Web 伺服器則在前端監聽 80 與 443 埠,資料庫可執行在同一台主機或另一台主機上。從頭瞭解 VPS會介紹伺服器本身,人們實際在 VPS 上執行的各類服務則能讓你了解其應用範圍。
你的 repository 不會搬移。GitHub 仍是程式碼存放與程式碼審查的地方,而伺服器會從 GitHub 取得程式碼。最簡單的部署方式,是在伺服器上執行 git pull,接著重新啟動服務。再進一步,則是在測試通過後,由 Actions workflow 透過 SSH(secure shell)連線到伺服器,替你執行相同操作。這就是 CI 與實際主機接軌的方式。你需要接手的是 Pages 默默處理的部分:系統更新、防火牆、備份,以及 TLS(transport layer security)憑證。Django 搭配 Gunicorn 與 Nginx 的完整部署範例會從頭到尾展示這種架構,而託管與非託管的取捨則會協助你決定維護工作中有多少仍須由自己負責。
GitHub Pages 的限制,以及查閱位置
免費方案的數值可能變動,因此應直接查閱 GitHub 官方頁面,不要相信文章中的數字,包括本文在內。截至 September 2026,GitHub Pages limits page 列出的限制包括:已發布網站大小不得超過 1 GB,以及每月 100 GB 的軟性頻寬限制。該頁面也記載傳統建置流程每小時 10 次建置的軟性限制。
同一頁面還有一項比任何數字都重要的規則。Pages 不適合用作線上企業或電子商務網站的免費網頁託管服務,網站也不應處理密碼或卡號等敏感交易。Actions 執行時間是另一項配額,公開與私有儲存庫的計算方式不同;GitHub 在其 Actions billing page 中說明相關規則。規劃任何方案前,請先查閱這兩個頁面。
FAQ
我可以在 GitHub Pages 上託管 Node.js 或 Python 應用程式嗎?
不行。Pages 會原樣傳回儲存的檔案,因此以 Node 撰寫的 .js 檔案或 .py 檔案,會以文字形式傳送到瀏覽器,而不是執行。使用 curl 提出請求時,取回的是你自己的原始程式碼。執行伺服器端程式碼需要持續運作的機器,例如 VPS,或能代為執行應用程式的平台。GitHub Actions 也無法補足這項需求,因為工作完成後,runner 會立即刪除。
為什麼我的 GitHub Pages 網站顯示「There isn't a GitHub Pages site here.」?
當 URL 存在,但其下沒有任何已發佈內容時,就會顯示此頁面。常見原因是建置尚未完成,或 Pages 指向的分支或資料夾沒有包含 index.html。開啟 Settings,再選取 Pages,確認目前選取的分支和資料夾。確認檔案名稱以小寫 index.html 命名,因為 URL 會區分大小寫。如果網站由工作流程建置,請確認最近一次執行已成功完成。
GitHub Pages 網站可以將資料儲存到資料庫嗎?
無法單獨完成。頁面可以在瀏覽器中透過 JavaScript 呼叫外部服務,許多學生確實會這樣做,但該服務的認證資訊會存放在任何人都能從公開儲存庫下載的檔案中。如果資料很重要,與資料庫通訊的程式碼應在你控制的伺服器上執行,而儲存庫則維持在 GitHub 上。
GitHub Pages 足以用來建立作品集網站嗎?
可以。作品集屬於靜態內容,這正是 Pages 最適合處理的用途。你會取得具備 HTTPS 的公開 URL,並在每次 push 後重新建置。自訂網域也可以使用:將 DNS 記錄指向 GitHub,再於 Pages 設定中設定該網域。只有在加入必須執行的功能時,才需要移轉到伺服器,例如會儲存所收到訊息的聯絡表單。