Running Sia on a Synology NAS via Docker

Michael Lynch

透過 Docker 在 Synology NAS 上執行 Sia

原文由 Michael Lynch 發布,訂閱此部落格

概覽

Sia 是一個去中心化、點對點的網路,用於買賣電腦儲存空間。如果你有多餘的儲存空間,Sia 能讓你將它賣給想在 Sia 雲端網路上儲存檔案的人。

在個人筆電或桌機上架設 Sia 伺服器可能會有些挑戰。一般人有時會關機,或至少會定期重新啟動電腦。這對 Sia 這類應用程式來說是個問題,因為它需要維持高可用性,才能為網路上的客戶端提供服務。

一個方便的解決方案是在網路附加儲存(NAS)裝置上執行 Sia。NAS 的設計就是長時間保持開機,幾乎不需要重新啟動。而且,NAS 本來的用途就是提供大量的儲存空間,所以通常會有多餘的空間可以運用。許多商用 NAS 裝置都支援 Docker,這是一種可以執行 Sia 的虛擬化工具。

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

為什麼要架設主機?

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

SiaHub 截圖

儲存空間租賃市場尚未達到關鍵規模。我最喜歡的 Sia 主機瀏覽器 SiaHub 顯示,截至 2017-05-25,Sia 網路的總儲存容量高達 1.1 PB,但只有 2% 的容量被租用。在空間如此過剩的情況下,除非將價格壓到幾乎為零,否則主機根本賣不掉儲存空間。

所以雖然目前還賺不到什麼錢,但這裡有幾個你仍然可能想參與的理由:

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

Storj 等競爭對手不同,Sia 的目標是將儲存空間賣給企業客戶,而非一般家庭用戶。截至目前,還沒有大型企業大量依賴 Sia,但只要有一家中大型企業開始將 Sia 作為儲存後端,就可能徹底帶動整個市場。

當使用者在 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 所有的狀態資訊,包括加密的錢包檔案和區塊鏈資料庫。

在 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)上連接埠 9980-9982 的流量,轉發到 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」共用資料夾中建立一個名為 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 與遠端節點通訊。若使用家用路由器,請將其設定為把這些連接埠轉發到 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 撰寫了一份很棒的指南:

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

留言