視頻教程#
前言與項目特點#
在當今文件存儲需求日益增長的環境下,我成功打造了一個 高效、靈活的私人文件存儲集群,結合了 R2、GitHub 和 GitLab 多平台的優勢,形成了一個高度可靠、分佈式的存儲系統。這套方案的核心亮點包括:
- 多節點分佈式存儲:文件按策略分散存儲,規避單點故障風險。
- 自動化備份與同步:數據在不同節點間高效同步,確保一致性和安全性。
- 智能加速訪問:借助 Cloudflare 全球邊緣服務,訪問速度得到極大提升,用戶體驗極為流暢。
- 無限擴展潛力:得益於分佈式架構,理論上可以存儲幾乎無限量的文件。
這不僅是一個簡單的圖床解決方案,更是一個適合代碼、文檔乃至任何數據存儲的多功能分佈式存儲系統。
部署條件#
- GitHub 帳號,https://github.com
- GitLab 帳號,https://gitlab.com
- Cloudflare 帳號,https://www.cloudflare.com
- 安裝 PicGo,https://molunerfinn.com/PicGo
流程和工具介紹#
PicGo 上傳文件:使用 PicGo,並安裝 s3 插件,上傳文件到 Cloudflare R2 存儲桶。
GitHub action 1:定時遷移 Cloudflare R2 存儲桶上的文件到 GitHub,負載存儲文件。
GitHub action 2:定時把 GitHub 節點鏡像到 GitLab,避免文件全部丟失的風險。
獲取經過 Worker 重寫的鏈接:通過 Worker 隱藏 GitHub, GitLab 和 R2 私庫的 PAT,輸出自定義域名 url。
利用全球 Edge CDN 加速訪問: 透過 Cache Rules 緩存靜態文件,減少回源請求,大幅提升訪問速度與穩定性。
GitHub 建 n 個私庫作節點,獲取一個 PAT#
訪問 https://github.com/new ,以建 3 個為例子,建 3 個私庫,要求有相同的前綴,加數字序號,如 node-1, node-2, node-3 ...
為這 3 個私庫創建 PAT,訪問 https://github.com/settings/tokens
GitLab 建 n 個同名私庫作節點,獲取 n 個 PAT 和 Repo ID#
訪問 https://gitlab.com/projects/new#blank_project ,建 3 個同名的私庫,要求與前面建的私庫名字完全一樣,數量也一樣
n 個 CloudFlare 賬戶各自建 R2 存儲桶,獲取 n 個 API 密鑰#
把所有的 PAT 和 Project ID 記錄起來#
PicGo 壓縮插件 s3#
安裝好 PicGo 後,繼續在軟件裡安裝 s3 插件
自定義鏈接格式填 https://< 自定義域名 & gt/$fileName$extName
文件路徑 files/{fileName}.{extName}
GitHub 建私庫,運行兩個定時任務#
https://github.com/fscarmen2/pic-hosting-cluster 獲取代碼,在 GitHub 新建一個用於定時同步任務的私庫,從我的倉庫複製代碼
正式使用流程#
上傳文件#
通過 PicGo 上傳文件到 GitHub,可以使用快捷鍵(默認 Ctrl + Shift + P)或拖拽文件到 PicGo 界面。
上傳成功進度條是藍色的,如果是紅色,請檢查設置是否有誤。上傳成功後自定義域名鏈接會自動在粘貼板
在 GitHub Action 裡手動運行定時任務#
進階#
url 的參數有以下這些
參數 query | 說明 |
---|---|
https://<自定義域名>/< 自定義檢測密碼 > | 檢測各節點狀態 |
https://<自定義域名>/< 文件名 >?from=r2 | 指定從 R2 獲取 |
https://<自定義域名>/< 文件名 >?from=github | 指定從 GitHub 獲取 |
https://<自定義域名>/< 文件名 >?from=gitlab | 指定從 GitLab 獲取 |
https://<自定義域名>/< 文件名 >?from=where | 查詢文件和歸屬節點信息 |
檢測各節點狀態#
指定文件從 R2 獲取#
指定文件從 GitHub 獲取#
指定文件從 GitLab 獲取#
查詢文件和歸屬節點信息#
總結#
通過本方案,我們成功搭建了一個融合 R2、GitHub 和 GitLab 的高效分佈式文件存儲集群。這一架構不僅提升了文件的安全性與備份可靠性,還充分利用了 Cloudflare 全球 Edge CDN 的加速能力,讓文件訪問更快、更穩定。
無論是存儲圖片、代碼,還是其他重要文件,這個集群都能以低成本、高效率的方式滿足需求。希望這個方案能夠為你的工作和學習帶來啟發和便利。如果你對這個集群感興趣,不妨嘗試搭建,享受創新帶來的樂趣!