將 Astro 網站部署到 GitHub Pages
你可以透過 GitHub Pages 直接從 GitHub 的儲存庫中部署你的 Astro 網站。
如何部署
標題為 如何部署你可以透過 GitHub Actions 自動將 Astro 網站搭建並部署到 GitHub Pages 上。正因如此,網站的原始碼必須要放在 Github 上。
Astro 官方提供的 withastro/action
可以只使用極少的設定就部署好專案。跟著下方的說明,即可在 GitHub pages 上部署你的 Astro 網站。詳細資訊請詳閱套件的 README。
在 Github Pages 設定 Astro
標題為 在 Github Pages 設定 Astro部署至 github.io
網址
標題為 部署至 github.io 網址請在 astro.config.mjs
的設定檔中設定 site
(EN) 與 base
(EN) 兩個選項。
import { defineConfig } from 'astro/config'
export default defineConfig({ site: 'https://astronaut.github.io', base: 'my-repo',})
site
標題為 site請確保 site
值為以下的其中之一:
- 以你的使用者名稱產生的網址,如:
https://<username>.github.io
- 為 GitHub 組織的不公開頁面所產生的亂數網址,如:
https://<random-string>.pages.github.io/
base
標題為 base你可能需要設定 base
,這樣 Astro 才會將儲存庫名稱(例如 /my-repo
)視為網站的根目錄。
如果你的情況符合以下其中之一,請不要設定 base
參數:
- 如果你的頁面由根資料夾所提供。
- 如果你的原始碼儲存庫在
https://github.com/<USERNAME>/<USERNAME>.github.io
。
base
的內容應該是你的儲存庫名稱,並以正斜線開頭,例如 /my-blog
。這樣做是為了讓 Astro 理解你的網站根目錄是 /my-repo
,而不是預設的 /
。
當設定了這個值後,你所有的內部頁面連結都必須以所設定的 base
值作為前綴:
<a href="/my-repo/about">關於本站</a>
你可以在設定 base
值 (EN)中找到更多相關資訊。
使用自定義網域名稱的 GitHub Pages
標題為 使用自定義網域名稱的 GitHub Pages你可以透過在專案建立 ./public/CNAME
檔案來設定自訂網域名稱:
sub.mydomain.com
這會將網站部署在所指定的自訂網域名稱下,而非 <YOUR_USERNAME>.github.io
。不要忘記為你的域名提供商設定 GitHub Pages。
為了設定 Astro 在 GitHub Pages 上使用你的自訂網域,請將網域名稱設定成 site
的值,並請不要設定 base
:
import { defineConfig } from 'astro/config'
export default defineConfig({ site: 'https://example.com',})
設定 GitHub Action
標題為 設定 GitHub Action-
在專案的
.github/workflows/
資料夾中建立名為deploy.yml
的新檔案,並將以下 YAML 設定貼進其中。deploy.yml name: Deploy to GitHub Pageson:# 在每次推送到 `main` 分支時觸發部署# 如果你想要在其他分支上觸發部署,請將 `main` 替換成你想要的分支名稱push:branches: [ main ]# 允許你在 GitHub 上的 Actions 分頁中手動觸發此部署workflow_dispatch:# 允許這個工作複製儲存庫並建立頁面部署permissions:contents: readpages: writeid-token: writejobs:build:runs-on: ubuntu-lateststeps:- name: Checkout your repository using gituses: actions/checkout@v4- name: Install, build, and upload your siteuses: withastro/action@v3# with:# path: . # 儲存庫中 Astro 專案的根位置。(可選)# node-version: 20 # 用於建置網站的特定 Node.js 版本,預設為 20。(可選)# package-manager: pnpm@latest # 應該使用哪個 Node.js 套件管理器來安裝相依套件和建置網站,會根據儲存庫中的 lockfile 自動檢測。(可選)deploy:needs: buildruns-on: ubuntu-latestenvironment:name: github-pagesurl: ${{ steps.deployment.outputs.page_url }}steps:- name: Deploy to GitHub Pagesid: deploymentuses: actions/deploy-pages@v4Astro GitHub Action 允許提供幾個選項,例如
path
、node-version
和package-manager
。這些選項是可選的,可以透過解除註解with:
行與你需要啟用的選項行來改變這些選項的設定。官方提供的 Astro GitHub Action 會透過掃描根目錄下的 lockfile 來檢查你所使用的套件管理器(如
npm
、yarn
、pnpm
或bun
)。正因如此,你應該將套件管理器自動產生的package-lock.json
、yarn.lock
、pnpm-lock.yaml
或是bun.lockb
檔案一起提交至你的儲存庫中。 -
在 GitHub 網站上,請切換到儲存庫中的 Settings 分頁,並找到 Pages 部分。
-
選擇 GitHub Actions 作為設定中的 Source。
-
將先前設定好的 workflow file 提交(Commit)並推送(Push)到 GitHub。
恭喜你!如此一來,你的 Astro 網站就會自動部署到 GitHub Pages 上了。如果你更改了你的網站原始碼並推送到前述的儲存庫,GitHub Actions 也會自動重新構建並部署你的網站,你不需要手動構建和部署。