想在自己的伺服器上部署一個服務時,我們當然可以通過 Google 或 ChatGPT 查詢方案。但搜尋有一個前提:首先要知道這個服務存在,也要知道應該搜尋什麼名字。

這篇文章不是 All-in-One 的安裝教程,而是一份服務地圖。我會按用途簡要介紹自己使用或納入管理的服務,包括 GitLab、Immich、Transmission、Jellyfin、Nextcloud 等。讀者可以先認識它們,再選擇感興趣的方向繼續瞭解。

1. 開發與內容釋出

1.1 GitLab:程式碼託管與持續整合

GitLab 是一套完整的 DevOps 平臺。除了儲存 Git 倉庫,它還提供 Issue、Merge Request、CI/CD、軟體包倉庫和使用者權限管理。

在我的 All-in-One 中,GitLab 是程式碼和自動化流程的中心。網站、服務設定和部署指令碼都可以通過分支與 Merge Request 審查,再由 CI/CD 完成測試、構建或部署。它適合希望把程式碼與自動化留在自己控制範圍內的人。

1.2 BookOrbit:個人書庫與閱讀管理

BookOrbit 用來管理電子書和閱讀相關資料。它不只是一個檔案目錄,而是為書籍提供檢索、中繼資料和應用層的管理能力,並使用 PostgreSQL 與 pgvector 支援資料儲存和向量能力。

如果電子書分散在多個目錄中,或者希望圍繞書庫繼續增加搜尋、推薦和 AI 功能,這類專用應用會比直接瀏覽檔案系統更方便。

1.3 Overleaf:線上 LaTeX 寫作

Overleaf 是線上 LaTeX 編輯器,適合編寫論文、報告和包含複雜公式的技術說明文件。瀏覽器提供編輯介面,伺服器負責儲存專案並執行 LaTeX 編譯。

自託管版本適合希望控制說明文件資料、需要內網協作,或者想建立穩定 LaTeX 編譯環境的使用者。它由應用、MongoDB 和 Redis 等元件組成,因此比普通文本編輯器需要更多資源和安全管理。

2. 照片、檔案與個人資料

2.1 Immich:照片和影片管理

Immich 是面向自託管場景的照片與影片管理服務,常被用作手機相簿備份和瀏覽工具。它提供時間線、相簿、搜尋、人物識別、地圖和移動端自動備份等功能。

我的部署還包括 PostgreSQL/VectorChord、Valkey 和使用 CUDA 的機器學習服務。Immich 適合希望保留原始照片、又想獲得接近現代雲相簿使用體驗的人,但照片庫和資料庫都必須進入可靠的備份計劃。

2.2 Nextcloud:檔案同步與協作

Nextcloud 可以理解為自託管的檔案雲。它支援瀏覽器訪問、桌面與移動端同步、檔案共享、版本記錄,並可以通過應用擴充日曆、聯繫人和協作功能。

它適合在多臺裝置之間同步說明文件,或者為家庭成員提供統一檔案入口。與普通網路共享相比,Nextcloud 更關注跨裝置同步和 Web 協作;代價是需要維護資料庫、快取和後臺任務。

Nextcloud 還提供標準的 WebDAV 介面,可以作為其他應用和裝置的檔案同步端點。例如,Obsidian 可以配合 WebDAV 同步外掛在不同裝置之間同步知識庫,Sony Digital Paper(DPT)也可以通過 WebDAV 同步 PDF 和批註說明文件。這樣,兩類工具都可以繼續使用原有工作方式,而檔案統一儲存在自己的伺服器中。

2.3 Joplin Server:筆記同步後端

Joplin 是一款支援 Markdown 的筆記應用,Joplin Server 則為桌面端和移動端提供自託管同步服務。

如果已經使用 Joplin 寫筆記,又不希望依賴第三方同步平臺,可以用它集中儲存筆記、附件和同步狀態。它的定位很明確:負責 Joplin 用戶端之間的同步,而不是替代完整的線上說明文件平臺。

2.4 Vaultwarden:輕量密碼管理

Vaultwarden 是相容 Bitwarden 用戶端的自託管密碼管理伺服器。瀏覽器外掛和移動端可以繼續使用熟悉的 Bitwarden 生態,服務端則執行在自己的基礎設施中。

它很適合個人或家庭儲存密碼、金鑰和安全筆記。不過,自託管密碼管理並不會自動變得更安全:訪問控制、HTTPS、更新和離線備份都必須認真處理。

3. 媒體與下載

3.1 Transmission:輕量 BitTorrent 用戶端

Transmission 是資源佔用較低的 BitTorrent 用戶端。它可以在伺服器上持續執行,通過 Web UI 新增種子、檢視進度、設定速度限制和管理下載目錄,不需要讓個人電腦一直開機。

它適合承擔長期下載任務。Web 管理介面可以通過 HTTPS 訪問,而 peer 流量使用獨立的 TCP 和 UDP 埠,兩類流量應該分別設定網路和安全規則。

3.2 Jellyfin:個人媒體中心

Jellyfin 用於整理和播放電影、劇集、音樂等本地媒體。它會讀取媒體目錄、獲取中繼資料,並向電視、瀏覽器和移動裝置提供統一的媒體庫介面。

它是 Plex 的常見開源替代方案,適合希望由自己控制媒體檔案和播放服務的人。Transmission 負責下載,Jellyfin 負責呈現已經整理好的內容;兩者可以使用相鄰的資料流程,但不必繫結成一個不可拆分的系統。

4. 儲存與通訊

4.1 Garage:S3 相容物件儲存

Garage 是為自託管和分散式環境設計的 S3 相容物件儲存。應用可以使用標準 S3 API 儲存附件、備份和其他物件,而不必依賴公有云物件儲存。

我的 All-in-One 使用單節點 Garage,主要目的是獲得統一的物件儲存介面,並不代表已經實現高可用或資料冗餘。單節點中的資料仍然需要備份,管理介面也只應在可信網路中開放。

4.2 Stalwart Mail Server:自託管郵件系統

Stalwart Mail Server 是一個現代郵件伺服器,覆蓋 SMTP、IMAP、JMAP 等協定,可用於建立自己的郵箱服務。

郵件服務比一般 Web 應用更依賴公網 DNS、TLS、反向解析、埠可達性和反垃圾信譽,因此它被作為獨立服務管理。知道這個專案可以幫助我們瞭解自託管郵件的選擇,但真正公開部署之前還需要專門規劃。

4.3 Certbot:申請和續期本地 HTTPS 憑證

Certbot 是用於申請和續期 Let’s Encrypt 憑證的自動化工具。在我的 All-in-One 中,它通過 Cloudflare DNS 驗證域名所有權,因此不需要為了憑證籤發而開放 HTTP 埠。

簽發後的憑證和私鑰儲存在本機,由 Nginx 以只讀方式掛載並提供給不同域名使用。續期成功後再重新載入 Nginx,就可以讓各項服務持續使用受瀏覽器信任的 HTTPS 憑證。這裡的“本地憑證”是指憑證檔案由本機儲存和管理,並不是自簽名憑證。

5. 監控與日誌

5.1 Prometheus:收集和查詢指標

Prometheus 定期採集帶時間戳的指標,例如 CPU、記憶體、磁碟空間、網路流量、容器資源以及應用內部狀態,並提供查詢語言用於分析這些資料。

我的 Prometheus 會彙總主機、容器和 Immich 等應用的指標。它解決的是“系統正在發生什麼”,例如磁碟是否接近寫滿、某個容器是否持續佔用大量記憶體,或者照片處理任務是否停滯。

5.2 Grafana:把指標和日誌變成儀表盤

Grafana 是視覺化和觀測入口。它可以連線 Prometheus、Loki 等資料來源,把查詢結果組織成儀表盤,也可以進一步設定告警。

All-in-One 總覽展示整臺主機和各容器的狀態,另外還可以為 Immich、GitLab 等關鍵服務製作專用頁面。Grafana 本身不負責採集資料,它負責把分散的觀測資訊放到一個容易閱讀的位置。

5.3 Loki:集中儲存日誌

Loki 是面向日誌的儲存與查詢系統,經常與 Grafana 配合使用。它讓不同容器的日誌進入同一個查詢入口,排查問題時不必逐臺機器、逐個容器查詢。

這套環境中的 Loki 使用檔案系統儲存一段時間的日誌,並保持在私有網路內。它適合規模不大的 All-in-One:結構簡單,又能提供比臨時檢視 Docker 日誌更完整的歷史記錄。

5.4 node_exporter、cAdvisor 與 Alloy:資料採集器

監控系統還需要負責採集資料的代理:

  • node_exporter 採集整臺 Linux 主機的 CPU、記憶體、磁碟、檔案系統和網路指標;
  • cAdvisor 採集每個容器的資源使用情況;
  • Grafana Alloy 發現 Docker 容器,並把它們的日誌轉發到 Loki。

它們通常沒有複雜的使用者介面,卻是可觀測鏈路的起點。Prometheus、Loki 和 Grafana 能看到什麼,取決於這些採集器提供了什麼。

6. 這些服務如何組成一個整體

6.1 統一入口,獨立執行

Nginx 作為統一的 HTTPS 入口,根據域名把請求轉發給各個 Web 應用。只有需要接收 Web 請求的應用容器加入共享的 proxy 網路,資料庫、快取和管理端點繼續留在各自的內部網路中。

每項服務仍然是獨立的 Git 倉庫和 Docker Compose 專案。升級 Immich 不需要同時重啟 GitLab,暫停 Jellyfin 也不會影響 Nextcloud。All-in-One 倉庫只負責記錄這些專案在當前環境中的版本、網路和部署差異。

6.2 設定、金鑰和資料分開管理

Git 儲存能夠公開審查和重新執行的設定;密碼、憑證和環境變數儲存在倉庫之外;照片、說明文件、資料庫與媒體檔案則進入持久化儲存和備份體系。

這項邊界比安裝了多少應用更重要。容器和原始碼通常可以重新獲得,個人資料和金鑰卻不能在故障後憑空重建。