Running Sia on a Synology NAS via Docker

Michael Lynch

透過 Docker 在 Synology NAS 上執行 Sia

概覽

Sia 是一個 decentralized(去中心化) 的 peer-to-peer network(點對點網路),用於買賣電腦儲存空間。如果您有多餘的儲存空間,Sia 讓您可以將其出售給想在 Sia 雲端網路上儲存檔案的人。

在個人筆記型電腦或桌上型電腦上架設 Sia 伺服器可能頗具挑戰性。人們通常會不時關閉個人電腦,或至少定期重新啟動。這對像 Sia 這樣的應用程式來說會造成問題,因為它需要維持 high availability(高可用性),才能為網路上的客戶端提供服務。

一個方便的解決方案是在網路附加儲存裝置(NAS)上執行 Sia。NAS 的設計理念是保持全天候開機,且很少需要重新啟動。此外,NAS 的主要用途就是提供大量儲存空間,因此通常有許多閒置容量。許多商用 NAS 裝置都支援 Docker,這是一種可以執行 Sia 的 virtualization tool(虛擬化工具)。

在本指南中,我將向您展示如何使用 Docker 在 NAS 裝置上設定 Sia 伺服器。

為何要架設主機?

許多剛接觸 Sia 的新手會問:「在 Sia 上提供儲存空間能賺很多錢嗎?」老實說,在 Sia 上提供儲存空間目前並無利可圖……至少現在還不是。

SiaHub 螢幕截圖

儲存空間租賃市場尚未達到臨界規模。SiaHub 是我最喜愛的 Sia 主機探索工具,它顯示 Sia 網路的總儲存容量(截至 2017-05-25)高達 1.1 petabytes。僅有 2% 的容量已被租用。在如此供過於求的情況下,除非主機將價格壓到幾近於零,否則難以售出儲存空間。

所以目前還無法財源滾滾,但以下有幾個您仍可能想參與的理由:

若租賃市場成功,將佔據有利位置

Storj 等競爭對手不同,Sia 的目標是向企業客戶而非家庭用戶銷售儲存空間。迄今為止,尚無大型企業重度依賴 Sia,但只要有一家中大型企業開始將 Sia 作為儲存後端,就可能徹底帶動市場。

當使用者在 Sia 上購買儲存空間時,host selection algorithm(主機選擇演算法)會大幅優先考慮參與網路時間較長的主機。這意味著若出現搶購熱潮,擁有數個月穩定紀錄的主機,將比剛加入網路的新主機具有明顯優勢。

樂趣

我個人架設主機只是為了嘗試新事物。我覺得調整主機價格、觀察其對收到的儲存合約數量的影響很有趣。Sia 也讓我結識了其他 Sia 使用者組成的熱情社群

軟體版本

本指南在撰寫時使用各軟體元件的最新版本:

Synology DS412+ NAS 裝置

  • DiskStation Manager (DSM) 6.1.2-15132
  • Sia v.1.3.4
  • Docker v.1.11.2

雖然本指南專為 Synology DSM 系統撰寫,但其中與 Docker 相關的步驟應適用於任何支援 Docker 的平台。

我在 Synology DS412+ 上成功測試過,但這些步驟應適用於任何搭載最新 DSM 且具備足夠 CPU/RAM 的 Synology NAS。將這些說明稍作調整,也應能輕易套用到其他全功能的消費級 NAS,例如 QNAP NAS

設定 NAS

安裝 Docker

首先,請安裝 Docker。

Docker 是少數由 Synology 官方發布、可供 DSM 使用的套件之一。請在 Package Center 中搜尋 docker,然後按一下「Install」。

安裝 Docker 套件

建立 Sia 目錄

接下來,請為 Sia 建立一個專用的 Shared Folder。這個資料夾將存放 Sia 所有的狀態資訊,包括加密的錢包檔案和 blockchain database(區塊鏈資料庫)。

在 File Station 中,建立一個新的 Shared Folder 並將其命名為「sia」:

建立新的共用資料夾

啟用 DiskStation 的 SSH 存取

目前沒有為 Sia 預先打包好的 Docker 映像檔,因此您將建立一個 Dockerfile 來定義 Docker 映像檔。由於 DSM 的 Docker 應用程式不支援從 Dockerfile 建立映像檔,您需要透過命令列來完成。

若要啟用此功能,請開啟 Control Panel > Terminal & SNMP,並勾選「Enable SSH service」旁的核取方塊。

安裝 Docker 套件

建立 Docker 容器

透過 SSH 從網路上的另一台電腦連線至您的 NAS。Linux 和 OS X 使用者可在終端機中執行下列指令。Windows 使用者則需要 SSH 用戶端,例如 Cygwin

ssh admin@diskstation

透過 SSH 連線至 NAS 後,請執行下列指令:

# NOTE: Replace 10.0.0.101 with the IP address of your Synology NAS on your
# local network.
LOCAL_IP=10.0.0.101

# Create a Docker container based on the Sia image and start running it in the
# background.
sudo docker run \
  --detach \
  --volume /volume1/sia:/sia-data \
  --publish "${LOCAL_IP}:9980:9980" \
  --publish 9981:9981 \
  --publish 9982:9982 \
  --restart always \
  --name sia-container \
  nebulouslabs/sia

上述指令會執行下列動作:

  • 下載我的非官方 Sia Docker 映像檔
  • 從該映像檔建立一個 Docker 容器,並在背景中啟動執行。
  • 將 NAS(Docker host(宿主機))上連接埠 99809982 的流量,轉送至 Sia 容器內相同的連接埠號碼。
    • 重要:請注意,對於連接埠 9980,您僅綁定至區域網路介面,而其他連接埠則隱含地綁定至所有介面。這是一項安全措施。任何透過連接埠 9980siad 通訊的人都將完全控制我們的主機,例如可以清空我們的錢包。即便我們的網路未對外暴露此連接埠,這項措施並非絕對必要,但作為預防措施仍然很有用。
    • 我的 NAS 的 IP 位址為 10.0.0.101。您可以在區域網路上的另一台電腦上使用指令 dig diskstation +short 來查詢 NAS 的 IP 位址。

確認是否成功

在 DSM 中,開啟 Docker 應用程式並檢視「Container」面板。您應該會看到類似以下的畫面:

Sia 容器執行中

如果您開啟稍早建立的「sia」Shared Folder,會看到 siad 已建立了數個資料夾:

Sia 產生的資料夾

設定 Sia

檢查狀態

讓我們使用命令列用戶端 siac 來連線至 Sia daemon(常駐程式)。

siad 在 NAS 上執行時,您可以從區域網路上的任何其他電腦與其通訊。該電腦需要 最新的 Sia 發行版本

siac 執行檔複製到您的電腦後,您可以在 addr 參數中指定 NAS 的主機名稱來執行 siac 指令:

# DISKSTATION is the hostname of the NAS on my local network, the default for
# Synology NAS devices.
$ ./siac --addr DISKSTATION:9980
Synced: No
Block:  0000000001ac2429ee234370ddf139ce87161277eded4bd58bcd31c5e5e2554f
Height: 727
Target: [0 0 0 0 12 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204]

新增主機儲存空間

若要建立可供出售給其他 Sia 使用者的儲存空間,請在「sia」Shared Folder 中建立一個名為 host-storage 的專用子目錄:

Sia 儲存資料夾

接著,使用 siac 將該資料夾新增為新的 Sia 主機儲存資料夾:

./siac --addr DISKSTATION:9980 host folder add /sia-data/host-storage 500GB

請注意,/sia-data/host-storage 是從 Docker 容器內 daemon 的角度來看的路徑,而非 siac 的角度。

允許 Sia 通過防火牆

Sia 需要透過連接埠 99819982 與遠端 peers(對等節點) 通訊。若使用家用路由器,請將其設定為把這些連接埠轉送至 Synology NAS。確切步驟會因路由器而異,但大致應如下所示:

注意:請將 10.0.0.101 替換為您的 Synology NAS 的 IP 位址。

防火牆設定

不應該對外開放連接埠 9980,因為那是 Sia 用於 API 通訊的連接埠。將其暴露至公共網際網路會使您的 Sia 主機容易遭到入侵。

如何升級 Sia

Sia 仍是一項新技術,每隔幾個月就會推出重要的新版本。租用者會依據伺服器版本來決定向哪個主機購買檔案合約,因此在新版本推出後盡快升級對您最有利。

如果您已依照本指南操作,Sia 的所有狀態都會保存在 Docker 容器之外,因此您可以安全地升級,而不會影響您的 Sia 錢包或儲存合約。

  1. admin 身分透過 SSH 登入您的 NAS。

    ssh admin@diskstation
  2. 執行下列指令:

    # Gracefully shut down Sia
    sudo docker exec -it sia-container ./siac stop
    
    # Remove the old container.
    # NOTE: If Docker says the container is still running, wait a few minutes to
    # allow siad to finish shutting down gracefully and re-try this command.
    # It may take up to 10 minutes.
    sudo docker rm sia-container
    
    # Upgrade to the latest Sia Docker image
    sudo docker pull nebulouslabs/sia
    
    # NOTE: Replace 10.0.0.101 with the IP address of the Synology NAS on your
    # local network.
    LOCAL_IP=10.0.0.101
    
    # Re-create the Docker container.
    sudo docker run \
      --detach \
      --volume /volume1/sia:/sia-data \
      --publish "${LOCAL_IP}:9980:9980" \
      --publish 9981:9981 \
      --publish 9982:9982 \
      --restart always \
      --name sia-container \
      nebulouslabs/sia

完成此流程後,您將擁有一個執行最新版本 Sia 的全新 Sia Docker 容器。

結論

您現在擁有一個可正常運作的 Sia 節點,只要 NAS 保持開機運行,它就會持續在線上。

由於此設定將 Sia 所有的持續性狀態保存在容器之外,因此當新版本發布時,升級 Sia 節點非常容易。

延伸閱讀

本指南已向您展示如何讓主機上線運作,但您仍需進一步設定主機並加以最佳化,以最大化收益。Sia 社群成員 RBZL 撰寫了一份出色的指南:

原文由 Michael Lynch 發布

本文章由 muse-spark-1.2-contributor 進行翻譯