TERRI LISTENS

系統關係圖

三個 Repo・觸發鏈・R2・Access 的對應關係

圖表
1 / 3・關係圖
更新
2026-07-10
狀態
Staging 已驗證
內容與版本控制 CMS 與身分驗證 建置與遞送 圖片儲存 線的顏色=連到哪個分區;箭頭=誰連到誰/誰觸發誰

圖 A・建置與觸發鏈——git push 怎麼變成一次建置

push main push main push 任一分支 POST 2 條 deploy hook

GH · 2

terri-listens-cms

子資料夾 oauth-worker/

GH · 1

terri-listens-content

artworks / series / settings

GH · 2

terri-listens-cms

config.yml + oauth-worker/

GH · 3

terri-listens-frontend

Astro 原始碼(develop)

ACT · 1

GitHub Action

trigger-rebuild.yml

CF · 1

Pages · cms

cms.terrilistens.com

CF · 2

Pages · frontend

main→prod/develop→preview

CF · 3

oauth-worker

手動部署

圖 B・執行期存取與門禁——誰能進去、又怎麼寫入資料

登入 同一份允許清單 頁面裡按登入 編輯文字、系列、全域設定 已登入後貼 R2 金鑰,直傳圖片

你/協作者

在瀏覽器操作

ACC · 1

Cloudflare Access

IdP:GitHub

CF · 1

Pages · cms

cms.terrilistens.com

CF · 2

Pages · frontend

staging.terrilistens.com(Preview)

CF · 3

oauth-worker

換取 GitHub 寫入權杖

GH · 1

terri-listens-content

commit 寫入目標

R2 · 1

R2 Bucket

terri-listens-media

怎麼讀這兩張圖

兩張圖都由上往下閱讀。圖 A 只有一種關係:紀錄一次 push 如何觸發下一步建置。圖 B 呈現的是存取流程——先經過 Access 才能載入後台頁面,接著不論是編輯文字內容還是上傳圖片,都得再通過 oauth-worker 登入才能寫入,圖片不會繞過這道門禁直接進 R2。線的顏色對應它連到的框:門禁色代表 Access 到 oauth-worker 這整段身分驗證,內容色代表寫入文字,圖片色代表寫入圖片。

登入 你按儲存,文字存進去 你上傳圖片,直接存進去 自動觸發,重新製作網頁 做網頁時來這裡拿圖片 大家都能看 只有受邀的人看得到

你/協作者

在瀏覽器操作

後台

編輯文字、上傳圖片

需要受邀

內容資料

所有文字和版面

圖片保管箱

所有上傳的圖片

網站產生器

自動把資料做成網頁

正式網站

任何人都能瀏覽

預覽網站

先看看改完的樣子

需要受邀

TERRI LISTENS

三種修改流程

改前端/改後台/改內容——各自怎麼上線

圖表
2 / 3・流程圖
更新
2026-07-10
狀態
Staging 已驗證
內容與版本控制 CMS 與身分驗證 建置與遞送 圖片儲存

修改前端

版面/樣式/Astro 程式碼

git push 直接觸發 Cloudflare Pages 建置,不經 Action。

01

本機編輯 frontend repo

src/、astro.config.mjs…

02

npm run dev 本機驗證

讀取旁邊 ../content,不 clone

03

commit → push develop

04

Pages 自動建置 Preview 環境

git 整合,無需 Action/hook

05

staging.terrilistens.com 更新

06

確認無誤後 push main

目前尚未執行,正式站待上線

07

Production 自動建置

terrilistens.com 更新

修改後台

Sveltia Schema/OAuth Worker

同一個 repo,兩種部署機制並存。

主線・config.yml/介面

01

本機編輯 cms repo

config.yml、index.html

02

(可選)本機測試 schema

Sveltia「Work with Local Repository」,不動真實 content repo

03

commit → push main

04

Pages 自動建置

cms.terrilistens.com 更新

注意已開著舊分頁的協作者要強制重新整理(Ctrl+F5),否則儲存時可能用舊 schema 整檔覆寫新內容——2026-07-09 發生過一次。

支線・oauth-worker(很少變動)

01

編輯 cms/oauth-worker/src

02

手動部署

cd oauth-worker && npx wrangler deploy

push 到 GitHub 不會自動生效

修改內容

畫作/系列/全域設定

日常使用路徑,經 Action 觸發兩個環境同時重建。

01

開啟 cms.terrilistens.com

通過 Access(GitHub 登入)

02

編輯畫作/系列/全域設定

03

上傳圖片:瀏覽器直傳 R2

首次會跳出要求貼 Secret Access Key

04

按儲存

Sveltia commit + push 到 content repo main

05

GitHub Action 觸發

POST 2 條 deploy hook

06

frontend Pages 兩環境同時重建

Production + Preview

07

兩站皆更新

staging 含草稿;正式站僅 published,約 30 秒~數分鐘

TERRI LISTENS

協作者權限管理

如何新增/移除協作者

圖表
3 / 3・操作指南
更新
2026-07-10
狀態
目前僅使用者一人
現況 目前僅使用者一人,尚未邀請過協作者——以下是未來需要時的操作指南。frontend/cms repo 不用邀請協作者,協作者完全不會碰到它們。

新增協作者

邀請一位新協作者

兩份名單都要加,順序不影響結果。

01

加進 Cloudflare Access 允許清單

Zero Trust → Access → Applications → 找到涵蓋 cms.terrilistens.com + staging.terrilistens.com 的 application → Policy → Include → Emails → 新增協作者的 GitHub 帳號 email

02

加進 GitHub content repo

terri-listens-content → Settings → Collaborators → Add people → 給 Write 權限

03

安全交付 R2 金鑰

把現有 R2 API Token 的 Secret Access Key 用密碼管理器或當面告知交給協作者,不可用明文 email

04

驗證

請協作者用無痕視窗登入 cms.terrilistens.com,確認能通過 Access、看到後台內容

提醒協作者第一次在 Sveltia 上傳圖片時,會跳出提示框要求貼入 R2 Secret Access Key——存在瀏覽器 local storage,換裝置或換瀏覽器要重貼一次。

移除協作者

撤銷一位協作者

急用時第 1 步優先,最快斷門。

01

從 Access 允許清單移除

同一個 application 的 Policy → 從 email 清單刪掉——立即生效,最快斷門

02

從 GitHub content repo 移除

terri-listens-content → Settings → Collaborators → 移除該帳號

03

視情況:重新產生 R2 金鑰

若擔心金鑰外流,重新產生 API Token 的 Secret Access Key,並重新分享給其餘協作者