命令列工具
nicotsx/zerobyte avatar
nicotsx/zerobyte

Zerobyte:把 restic 備份排程放進自架介面

此專案圍繞「nicotsx/zerobyte」建置,面向真實業務場景,提供可重複使用、可持續維運的開源實作。

6,954 個 Star174 個 ForkTypeScriptAGPL-3.0

秒懂

它是什麼?
Zerobyte:把 restic 備份排程放進自架介面,整理 README 明確寫出的功能、安裝入口、配置與限制,讓讀者能按專案脈絡核對是否符合需求。
適合誰用?
Zerobyte 仍處於 0.x 版本,README 中明確警告其在不同版本之間可能會有重大變化。它透過 Docker Compose 部署,依賴 restic 和可選的 rclone,配置圍繞環境變數展開。
可以商用嗎?
可以,但條件嚴格。AGPL-3.0 是網路 copyleft 授權:如果別人透過網路使用你修改過的版本(例如作為託管服務),你必須以同一授權向他們提供原始碼。
還在維護嗎?
有在維護。儲存庫最近一次提交在 3 天前。
用什麼語言寫的?
主要是 TypeScript(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

Zerobyte:把 restic 備份排程放進自架介面:倉庫狀態與定位

Zerobyte 的倉庫元資料將其描述為「面向自架者的備份自動化工具,構建於 restic 之上」。README 進一步說明,它提供了一個現代 Web 介面,用於排程、管理和監控遠端儲存的加密備份。專案目前處於 0.x.x 版本,README 明確警告說,核心功能仍在開發中,並且不同版本之間可能會有重大變化,因此讀者在依賴其生產環境之前應該意識到這一點。

Zerobyte:把 restic 備份排程放進自架介面:安裝與部署方式

按照 README,執行 Zerobyte 需要 Docker 和 Docker Compose。它提供了一個 compose.yaml 範例,使用映像 ghcr.io/nicotsx/zerobyte:v0.41,並包含 SYS_ADMIN 能力和 /dev/fuse 裝置,以便掛載遠端共享。範例還設定了 TZ、BASE_URL 和 APP_SECRET 環境變數,並映射了 /var/lib/zerobyte 資料卷。啟動命令是 docker compose up -d,隨後 Web 介面可在 http://<伺服器IP>:4096 存取。README 強烈反對在可從網際網路存取的伺服器上執行 Zerobyte,建議僅繫結到 127.0.0.1 並使用帶認證的安全隧道。它還警告不要將 /var/lib/zerobyte 指向網路共享,並為 TrueNAS 使用者提供了替代方案。

Zerobyte:把 restic 備份排程放進自架介面:環境變數與核心配置

Zerobyte 的配置主要透過環境變數進行。README 列出 BASE_URL 和 APP_SECRET 為必填項,前者用於確定實例的 URL,後者用於加密資料庫中的敏感資料。APP_SECRET_FILE 是 APP_SECRET 的替代方案,適用於 Docker 或 Kubernetes secrets。PORT 預設 4096,RESTIC_HOSTNAME 預設 zerobyte,TZ 對於準確的備份排程很重要,TRUST_PROXY 和 TRUSTED_ORIGINS 用於反向代理和 CORS 場景。另外,還有 WEBHOOK_ALLOWED_ORIGINS、WEBHOOK_TIMEOUT、LOG_LEVEL、SERVER_IDLE_TIMEOUT、RCLONE_CONFIG_DIR 和 PROVISIONING_PATH 等選項。GOMAXPROCS 可用於限制 Restic 程序的 CPU 調度執行緒,從而在備份期間減少 CPU 壓力。

Zerobyte:把 restic 備份排程放進自架介面:備份流程:卷、倉庫與任務

README 將 Zerobyte 的使用方式描述為三個步驟:新增卷、建立倉庫、配置備份任務。卷代表要備份的來源資料,支援 NFS、SMB、WebDAV、SFTP 和本機目錄。倉庫是備份的加密儲存位置,支援本機目錄、S3 相容儲存、Google Cloud Storage、Azure Blob Storage,以及透過 rclone 支援的 40 多個雲端儲存提供者。備份任務定義排程、保留策略和要備份的路徑。還原功能允許使用者從「備份」部分選擇快照並還原到原始位置。

Zerobyte:把 restic 備份排程放進自架介面:認證與存取控制

Zerobyte 使用 better-auth 進行認證和工作階段管理。README 指出,目前沒有針對備份操作的細粒度 RBAC;經過認證的組織成員被視為儲存、卷、備份計畫、還原和通知目的地的可信操作者。組織角色主要限制組織管理和實例管理操作。Cookie 安全由 BASE_URL 決定:使用 http:// 和 IP 位址時停用 Secure 旗標,使用 https:// 域名時啟用。反向代理部署需要設定 BASE_URL 並傳遞 X-Forwarded-Proto 標頭。

Zerobyte:把 restic 備份排程放進自架介面:網路策略與預置資源

Zerobyte 對備份 webhook 和出站通知實施了網路策略。WEBHOOK_ALLOWED_ORIGINS 用於限制哪些 HTTP 來源可以成為目標,匹配是精確的:方案、主機和連接埠必須完全匹配,路徑被忽略。此策略適用於備份前後 webhook、通用 HTTP 通知、Gotify、自架 ntfy 以及指向通用 HTTP 或 SMTP 目標的自訂 Shoutrrr URL。公共 ntfy.sh 和固定提供者如 Slack、Discord、Pushover、Telegram 則不需要此設定。備份 webhook 不跟隨重新導向。另外,PROVISIONING_PATH 允許操作員在啟動時從 JSON 檔案同步倉庫和卷,憑證可以從環境變數或 /run/secrets/* 解析。

Zerobyte:把 restic 備份排程放進自架介面:授權與第三方元件

Zerobyte 以 AGPL-3.0 授權發布。根據授權摘錄,這是一個 copyleft 授權,特別要求網路伺服器軟體的使用者能夠獲得執行中的修改版本的原始碼。授權明確規定使用者有權複製、分發和修改軟體,並且原始碼必須可用。README 還列出了第三方元件:restic 以 BSD 2-Clause 授權包含,版權歸 Alexander Neumann 所有,狀態為未修改。完整的第三方授權清單可在 NOTICES.md 中找到。授權文字本身不提供任何關於支援、安全保證或效能的承諾,這些內容在 README 中也沒有提及。

Zerobyte:把 restic 備份排程放進自架介面:操作核對記錄

nicotsx-zerobyte 的文件內容應與實際工作流程一起閱讀。先辨認 README 提到的入口、命令、設定鍵與輸出檔,再把每個步驟放到獨立測試目錄。這樣可以分清楚專案明確承諾的行為,以及素材沒有交代的部分。部署時要把 `BASE_URL`、`APP_SECRET`、`TZ` 與資料卷一起視為一組設定。README 的 compose 範例把服務放在 4096 埠,並要求 `/dev/fuse` 與 `SYS_ADMIN`,這會直接影響容器權限與主機審查。若使用 TrueNAS,`/var/lib/zerobyte` 應改掛獨立 ZFS dataset,否則升級可能清掉設定、金鑰與資料庫。

對 nicotsx-zerobyte 的判斷要落在可觀察結果:記下使用的版本、輸入資料、命令列參數與產物位置,逐項核對 README 的描述。若出現錯誤、缺少依賴或輸出與預期不同,應先回到該專案的設定檔和原始倉庫查找原因,不宜用推測補齊文件空白。nicotsx-zerobyte 是否適合,取決於這些具體條件能否在你的環境成立。

在 nicotsx-zerobyte 的測試紀錄中,輸入格式要照 README 的例子保存,不能只記口頭描述。命令列、環境變數與資料夾位置會共同決定結果,因此每次變更都應留下可比較的紀錄。

nicotsx-zerobyte 的輸出應逐欄檢查,而不是只確認程序沒有報錯。對照 README 所列的檔名、回應欄位或畫面入口,才能知道測試是否真的走完專案提供的路徑。

若 nicotsx-zerobyte 需要外部服務或硬體,先確認 README 寫出的依賴版本與平台條件。素材沒有列出的相容性,不應由相似工具的經驗代入,否則排錯時很難分辨責任邊界。

升級 nicotsx-zerobyte 前,應保存目前設定與測試輸出,並重新執行同一組輸入。這項比較專門針對本專案的檔案和命令,能看出版本變更是否影響原有流程。

對 nicotsx-zerobyte 的安全判斷也要回到具體權限、網路端點、金鑰或帳號設定。README 明確說明的限制應列入部署檢查,沒有說明的部分則保留為待確認事項。

這份整理把 nicotsx-zerobyte 的文件當作邊界,而不是把倉庫描述延伸成承諾。讀者若發現命令、參數或輸出在自己的版本不同,應以該版本的 README 和原始碼為準。

nicotsx-zerobyte 文件核對項目 1:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

nicotsx-zerobyte 文件核對項目 2:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

nicotsx-zerobyte 文件核對項目 3:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

nicotsx-zerobyte 文件核對項目 4:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

nicotsx-zerobyte 文件核對項目 5:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

nicotsx-zerobyte 文件核對項目 6:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

nicotsx-zerobyte 文件核對項目 7:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

nicotsx-zerobyte 文件核對項目 8:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

nicotsx-zerobyte 文件核對項目 9:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

nicotsx-zerobyte 文件核對項目 10:把 README 中與 nicotsx-zerobyte 直接相關的參數、檔案、端點或模組名稱抄入測試紀錄,執行同一個流程後比較輸入和輸出。若現象不同,先確認版本與平台,再從專案自己的錯誤訊息定位,不以其他工具的預設行為代替。

編輯結論

Zerobyte 仍處於 0.x 版本,README 中明確警告其在不同版本之間可能會有重大變化。它透過 Docker Compose 部署,依賴 restic 和可選的 rclone,配置圍繞環境變數展開。其 AGPL-3.0 授權要求網路伺服器提供修改後的原始碼,但 README 和授權摘錄均未提供任何關於支援、擔保或安全性的承諾。 適合先依 README 的專案命令與設定做小規模核對,再決定是否納入正式流程;不適合把文件未說明的效能、支援範圍或安全承諾視為既定事實。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記