以 Astro 與 Cloudflare Workers 建立的雙語內容發佈系統,提供公開筆記、文章、 人工審閱選輯,以及只限部署者使用的內容管理介面。
公開網站 · 健康檢查 · 文檔 · 版本記錄 · Releases
本 repository 的專案自有軟件及相關技術文件依 GNU AGPL v3.0 only 提供。品牌、使用者/部署者資料與第三方內容不在 授權範圍內;詳見 授權範圍。
Personal Space 是一個單一部署者管理的全端發佈網站。公開讀者無需登入即可瀏覽 內容、搜尋、分類、標籤、月份封存、RSS feeds 及 sitemap;草稿、媒體、來源、修訂 與發佈工作則留在受保護的 Studio。
這不是純靜態模板。Astro 產生 Cloudflare 相容的 server output,Worker 處理動態 頁面、API 與可選排程事件,Workers Static Assets 提供建置後資產,D1 與私人 R2 分別保存部署者自己的應用資料和媒體。
| 項目 | 狀態 | 可核對資料 |
|---|---|---|
| 公開閱讀 | 可用 | 網站 · 健康檢查 |
| 管理介面 | 單一部署者、Cloudflare Access 保護 | 安全政策 |
| Source | v0.8.0,main 持續整合 |
package.json · CHANGELOG.md |
| GitHub Release | v0.8.0 |
最新 Release |
| 部署模型 | Cloudflare Workers + Static Assets + D1 + R2 | 自部署指南 |
本地 build、CI、preview、GitHub Release 與 production 是不同證據;完整定義見 專案狀態。
- 公開筆記與長篇文章的列表、詳情及閱讀時間;
- 全文搜尋、時間動態、分類、標籤與月份封存;
- Notes、Articles、Editions 的獨立 RSS feeds,以及 sitemap;
- 草稿、預覽、發佈、排程、封存及修訂工作流;
- 經驗證的圖片上載與受控媒體回應;
- 可選的 RSS/Atom 來源擷取、人工審閱及 Edition 發佈;
- 響應式公開介面與 Studio;
- 對未發佈內容、私人媒體及受保護路由採取 fail-closed 行為。
不在目前範圍內:多租戶、公開帳戶、公開投稿、訂閱、付款,以及 runtime 生成式 AI。完整產品邊界見 專案概覽。
flowchart LR
Reader[Public reader] --> Worker[Cloudflare Worker]
Owner[Operator] --> Access[Cloudflare Access]
Access --> Studio[Protected Studio]
Studio --> Worker
Cron[Cron Triggers] --> Worker
Worker --> Assets[Workers Static Assets]
Worker --> D1[(D1)]
Worker --> R2[(Private R2)]
| 範疇 | 技術 | 責任 |
|---|---|---|
| Application | Astro、TypeScript | 頁面、API、server output 與介面 |
| Runtime | Cloudflare Workers | 動態請求、API 及排程事件 |
| Static delivery | Workers Static Assets | CSS、SVG 及其他建置資產 |
| Data | Cloudflare D1 | 部署者自己的內容及應用資料 |
| Media | Cloudflare R2 | 部署者自己的私人媒體物件 |
| Access | Cloudflare Access + 應用層 owner 核對 | 保護 Studio 及寫入操作 |
| Quality | ESLint、Prettier、Astro check、Vitest | 格式、靜態分析、型別及測試 |
套件的固定版本以 package.json 及
package-lock.json 為準。
需求:Node.js 22.22.3 或以上、npm 10 或以上。
npm ci
npm run db:migrate:local
npm run dev如需在 loopback 環境測試 Studio,可先建立只含虛構值的本機設定:
cp .dev.vars.example .dev.vars完整檢查與 built-Worker 預覽:
npm run check
npm run preview各指令、目錄責任與測試策略見 開發指南。 讀者與 Studio 的完整內容流程見 使用指南。
部署會修改你的 Cloudflare 帳戶。執行遠端步驟前,請先閱讀完整的 Cloudflare 自部署指南,並確認你有權使用本程式碼。
- 以自己的 Cloudflare 帳戶建立全新的 D1 database 與私人 R2 bucket。
- 複製公開範本至已被 Git 忽略的
wrangler.self-host.jsonc。 - 只在該私人設定填入自己的資源名稱與 identifiers;不要修改 binding 名稱。
- 執行本地 migration、
npm run check、私人設定 build 與 Wrangler dry-run。 - 以
--remote對全新 D1 套用 migration,再部署至workers.dev測試網址。 - 設定 Cloudflare Access、應用程式 secrets,以及
/studio和相關 API 的保護。 - 核對公開頁、受保護路由、D1、R2、logs 與 Git 狀態後,才連接自訂 domain。
Repository 不保存 production secrets、真實內容、Cloudflare resource identifiers、 Access 設定、logs 或備份。它也沒有提供會略過這些核對的一鍵部署流程。
| 位置 | 內容 |
|---|---|
src/pages |
公開頁面、Studio 頁面及 API routes |
src/components |
共用公開與 Studio 介面元件 |
src/server |
認證、發佈、來源、feeds、媒體與 HTTP 邊界 |
src/worker.ts |
Cloudflare Worker fetch/scheduled 入口 |
migrations |
可重建空白環境的版本化 D1 migrations |
tests |
使用合成資料的單元與邊界測試 |
examples |
不含 production 資料的 Markdown 範例 |
docs |
目前說明與歷史設計/交付記錄 |
| 文件 | 用途 |
|---|---|
| 文檔索引 | 目前文檔、歷史記錄與閱讀順序 |
| 專案概覽 | 產品範圍、架構、資料責任與技術棧 |
| 使用指南 | 公開閱讀、Studio、內容、媒體與 Editions |
| 介面設計系統 | 色彩角色、版面、元件、responsive 與可存取性 |
| 開發指南 | 本地環境、指令、測試與貢獻流程 |
| 自部署指南 | Workers、D1、R2、Access、domain 及 rollback |
| 驗證指南 | 隔離本機、production 唯讀及 release QA |
| 專案狀態 | 版本、成熟度與證據定義 |
| 安全政策 | 私人漏洞回報與部署安全要求 |
| 更新記錄 | 公開安全的版本變更摘要 |
- 一般錯誤或功能建議:使用 GitHub Issues。
- 開始較大改動前:先閱讀 貢獻指南 並建立 issue 對齊範圍。
- 安全問題:依 安全政策 使用 Private vulnerability reporting, 不要建立公開 issue。
Issue、PR、截圖與 logs 都不得包含 secret、真實內容、私人資料、Cloudflare identifiers 或本機絕對路徑。
Copyright © 2026 kyeunga25.
專案自有軟件、測試、建置腳本及相關技術文件依
AGPL-3.0-only 提供。透過網絡提供修改版本時須留意 AGPL 第 13 節
的相應原始碼義務。品牌、使用者/作者/部署者內容與資料、私人設定及第三方材料
均不包含在授權內。請閱讀 LICENSING.md、
COPYRIGHT.md 及
THIRD_PARTY_NOTICES.md。