Syncthing
Syncthing 是一款開放原始碼的點對點(P2P)檔案同步工具,常被用於自架私有雲環境中,替代依賴第三方伺服器的同步方案。在 oracle-cloud Ampere A1(ARM64)架構上,可透過 docker 容器化部署,搭配 cloudflare-tunnel 與 WireGuard 實現安全且高效的檔案同步。
部署架構¶
Syncthing 的部署通常整合至 git 儲存庫(如 shinggo8000/oracle-arm-stacks),並透過 Dockhand 這類 gitops 工具進行自動化更新。建議使用 lscr.io/linuxserver/syncthing:latest 映像檔,因其原生支援 linux/arm64。
核心的 docker-compose.yml 需注意以下幾點:
- 使用外部網路
cf_network,避免直接對外暴露管理介面。 - 僅開放 P2P 同步埠:
22000/tcp、22000/udp(QUIC)以及21027/udp(區網發現)。 - 禁止映射 Web 管理介面(8384),改以內部網路或安全隧道存取。
- 設定
restart: unless-stopped確保服務持續運行。
PUID 與 PGID¶
在 Linux 主機(如 Oracle Linux 9)上,需透過 id 指令查詢目前用戶的 UID 與 GID,並填入環境變數 PUID 與 PGID。這樣可確保 Syncthing 容器內建立的檔案,與主機端帳號(如 opc)的權限一致,避免出現 Permission denied 錯誤。
id
# 輸出範例:uid=1000(opc) gid=1000(opc)
安全連線與管理¶
Syncthing 的 Web GUI 具備高權限,不宜直接暴露至公開網路。常見的合規存取策略有兩種:
- WireGuard 內部存取:連線至虛擬區網後,直接透過容器內部 DNS 或 IP 存取
http://syncthing:8384。 - cloudflare Tunnel 安全暴露:設定 Public Hostname(如
sync.benhoweb.com),並在 Cloudflare Access 中綁定嚴格的身份驗證策略(如 GitHub/Google IdP、Email 或硬體金鑰)。
自動化與監控¶
Dockhand v1.0.34 可從 Git 拉取最新配置並部署。此外,可整合 n8n 進行狀態監控:透過 Syncthing REST API(內部呼叫 http://syncthing:8384/rest/system/ping)定時檢查同步狀態,並在衝突或節點斷線時推送告警至 telegram 或 Slack。
與 Obsidian 的整合¶
Syncthing 常用於同步 obsidian 筆記庫。在 Oracle 私有雲中,若筆記同時透過 Nextcloud(S3 Object Storage)同步,則可採用 rclone Sidecar 模式,將 ObsidianVault 從 Nextcloud WebDAV 拉取至本地目錄,再交由 quartz-5 建置數位花園。此架構可搭配 cloudflare-pages 進行靜態託管,達成 Zero-Maintenance 的混合雲部署。
參考配置摘要¶
services:
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: syncthing
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Hong_Kong
volumes:
- /opt/appdata/syncthing/config:/config
- /opt/data/sync_shares:/data1
networks:
- cf_network
ports:
- "22000:22000/tcp"
- "22000:22000/udp"
- "21027:21027/udp"
restart: unless-stopped
部署時務必透過 GitHub 儲存庫統一管理配置,並使用 Dockhand 進行版本更新,避免手動操作造成設定漂移。