用 Astro + VPS 建立自己的數碼花園
Lifesbyte 目前使用的框架、內容管理方式與自動發佈流程
Lifesbyte 最初是一個傳統博客:文章按時間排列,寫好 Markdown,再由靜態網站產生器建立頁面。這套方式很簡單,但我漸漸希望它不只是文章列表,而是一個可以同時容納短記錄、長文、項目與近況的個人空間。
現在的 Lifesbyte 已經改用 Astro,並部署在自己的 VPS 上。網站仍然保持靜態、快速和容易維護,但內容結構和發佈流程都更貼近我真正的使用方式。
為甚麼改用 Astro?
我對個人網站的要求其實不複雜:
- 以 Markdown 寫作,不被某個平台綁定
- 頁面載入要快,不需要在瀏覽器執行大量 JavaScript
- 結構可以逐步擴充,除了文章,也能加入 Notes、Projects 和 Now
- 設計完全由自己控制,不受現成主題限制
Astro 適合這類以內容為主的網站。它在建置時產生靜態 HTML,瀏覽者打開頁面時不需要等待一套完整前端應用啟動;需要互動的部分,例如 Garden 的內容篩選,才加入少量 JavaScript。
Lifesbyte 的技術組合
| 部分 | 現在的選擇 | 用途 |
|---|---|---|
| 網站框架 | Astro | 產生靜態頁面與內容路由 |
| 內容格式 | Markdown | 保存 Notes、Essays、Projects 和 Now |
| 內容管理 | Sveltia CMS | 在瀏覽器中編輯及發佈內容 |
| 程式碼管理 | GitHub | 保存網站原始碼與文章版本 |
| 自動化 | GitHub Actions | 測試、建置及部署網站 |
| 伺服器 | Ubuntu VPS | 保存並提供正式網站 |
| Web Server | Caddy | 處理 HTTPS 與靜態檔案 |
| 網絡入口 | Cloudflare | DNS、代理與基本防護 |
這套組合沒有資料庫,也沒有長期運行的 Node.js 網站服務。Astro 完成建置後,正式網站只是一組 HTML、CSS、JavaScript 和圖片,因此資源需求很低,也適合目前這台小型 VPS。
內容如何組織?
網站目前有四種主要內容:
- Notes:短想法、圖片和現場記錄
- Essays:較完整的長篇文章
- Projects:正在建立或已經完成的項目
- Now:此刻正在關注、學習和經歷的事情
每篇內容都可以標示為香港繁體、廣東話或英文。網站預設使用香港繁體,日後可以自然加入英文文章和廣東話記錄,而不需要另外建立一個網站。
我現在如何寫作?
有兩種方式。
第一種是直接建立 Markdown 檔案。這種方式適合長文,可以在本機編輯、預覽,再提交到 GitHub。
第二種是使用網站內的 Studio。它提供簡單的編輯介面,可以新增文章、選擇語言、加入標籤和上載圖片,最後直接提交到 GitHub。即使不打開程式碼編輯器,也能完成一次發佈。
不論使用哪種方式,內容最終仍然是普通 Markdown 檔案。日後即使更換框架,也可以完整帶走。
自動發佈流程
當內容推送到 GitHub 的 main 分支後,GitHub Actions 會自動執行以下步驟:
- 安裝固定版本的依賴
- 執行內容測試與 Astro 類型檢查
- 建立所有靜態頁面、RSS 和 Sitemap
- 把新版本上載到 VPS 的獨立 release 目錄
- 通過網站存活檢查後,才切換到新版本
- 如果檢查失敗,保留上一個可用版本
部署使用版本目錄而不是直接覆蓋正式網站,因此切換時間很短,也避免上載到一半時讓訪客看到不完整頁面。
為甚麼使用自己的 VPS?
GitHub Pages 或其他靜態託管服務已經足以建立博客,但 VPS 讓我可以把不同個人服務放在同一套基礎設施上,並自行控制網域、HTTPS、日誌和發佈方式。
代價是需要處理系統更新、備份與安全設定。所以我仍然把網站設計成純靜態:即使伺服器上的其他服務需要維護,博客本身也保持簡單,沒有資料庫遷移或應用程式狀態需要照顧。
小結
這次改版的重點不是由 Hugo 換成 Astro,而是重新想清楚這個網站要保存甚麼。
博客是按時間發佈文章;數碼花園則容許內容以不同速度生長。Astro、Markdown、GitHub 和 VPS 只是支撐這個空間的工具。真正值得長期維護的,仍然是自己的文字、照片、項目和生活記錄。
留言
使用 GitHub 帳戶參與討論。