🚀 Astro 內容網站開發路線圖:從零到內容發布

本文檔提供了一個完整的開發路線圖,指導您如何在 Cloudflare Pages 環境下,成功整合 Decap CMS 作為內容後端。

本路線圖涵蓋了從 Astro 專案初始化到內容在網站上成功顯示的每一個關鍵步驟,方便大家在佈建網站時能夠可以依循參考。

概覽:三階段開發流程

我們將流程分為三個核心階段,以解決最棘手的 OAuth 認證問題,並確保內容能被 Astro 正確渲染,分別為:

  1. 結構初始化:建立專案結構、內容集合與 CMS 所需檔案。
  2. CMS 整合與 GitHub OAuth 認證:部署 Cloudflare Pages Functions 代理,配置 GitHub 認證密鑰,確保登入功能正常。
  3. 內容渲染與發布:建立 Astro 路由和頁面,將 CMS 寫入的內容正確顯示在網站上。

階段一:專案結構與初始化

此階段專注於為 Astro 和 Decap CMS 建立必要的工作環境。

1.1 專案與目錄初始化

  • Astro 專案初始化: 在 Codespaces 或本地環境中運行 npm create astro@latest 創建新專案。
  • CMS 靜態結構: 創建 /public/admin 資料夾,用於放置 CMS 介面檔案。
  • Functions 結構: 創建 /functions 資料夾,用於放置 Cloudflare Pages Functions 程式碼。

1.2 定義內容集合 Schema

  • 目標: 在 Astro 中定義您的文章資料格式。
  • 操作: 創建 /src/content/config.ts,使用 defineCollection 定義 blog 集合的欄位(例如 title, date, draft),確保其與 CMS 的 config.yml 欄位一致。

階段二:Decap CMS 整合與 OAuth 認證(核心挑戰)

此階段是整個流程中最複雜的部分,確保 CMS 登入功能在 Cloudflare Pages 上能正常運作。

2.1 配置 CMS 介面檔案

  • 文件放置: 在 /public/admin/ 中放置 index.html 和 config.yml。
  • 關鍵修正 index.html: 必須移除所有對 netlify-identity-widget.js 的引用,避免 Netlify 污染。

2.2 設置 GitHub OAuth 應用程式

  • 創建應用程式: 在 GitHub Developer Settings 中創建 OAuth App,並獲取 Client ID 和 Client Secret。
  • 關鍵回撥 URL: GitHub OAuth App 的 Authorization callback URL 必須精確設定為您的 Pages Functions 認證端點,例如:https://Mountos.pages.dev/.netlify/functions/auth。

2.3 配置 Cloudflare 環境變數

  • 目的: 保護 Client Secret,供 Functions 代理使用。
  • 操作: 在 Cloudflare Pages 儀表板的環境變數中設定 GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET。

2.4 部署 Functions 程式碼

  • 實作代理: 將包含 OAuth 邏輯的 auth.js 檔案放置在 /functions 資料夾中。這個程式碼負責處理 GitHub 的重定向與 Token 交換。

2.5 最終修正 config.yml 認證配置

  • 目的: 指導 CMS 呼叫正確的 Pages Functions 代理端點。
  • 配置範例:
    backend:
    name: github
    repo: Mountos/web
    branch: main
    base_url: https://mountos.pages.dev
    auth_endpoint: /.netlify/functions/auth

2.6 Git 推送與部署

  • 操作: 執行 git add .、git commit、git push。這將把 Functions 程式碼和 CMS 配置上線,並啟用 Functions。

階段三:內容渲染與發布

此階段是確保網站能夠讀取 CMS 寫入的內容並將其顯示出來。

3.1 撰寫並發布第一篇文章

  • 驗證登入: 訪問 https://mountos.pages.dev/admin/ 成功登入 Decap CMS。
  • 發布內容: 在 CMS 中撰寫並發布一篇文章,確認內容檔案已成功推送到 GitHub 倉庫的 src/content/blog/ 資料夾。

3.2 建立文章列表頁

  • 路徑: /src/pages/blog/index.astro
  • 功能: 使用 astro:content 的 getCollection(‘blog’) 讀取並列出所有已發布的文章標題。

3.3 建立單篇文章頁(動態路由)

  • 路徑: /src/pages/blog/[…slug].astro
  • 功能: 使用 getStaticPaths 根據文章的 slug 生成獨立頁面,並使用 entry.render() 渲染 Markdown 內容。

3.4 最終驗證

檢查: 重新部署網站後,訪問您的網站,確認文章列表與單篇文章頁面均可正常顯示,證明整個發布流程(CMS 寫入 -> GitHub 存儲 -> Cloudflare 部署 -> Astro 渲染)已打通。

以實際行動支持獨立新聞媒體

article information

分享你的想法

訂閱電子報

每週生活旅遊情報與科技資訊電子新知


    留言

    發佈留言

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

    搜尋更多