透過 Docker 在 Synology NAS 上執行 Sia
原文由 Michael Lynch 于 發布,訂閱此部落格
概覽
Sia 是一個去中心化、點對點的網路,用於買賣電腦儲存空間。如果你有多餘的儲存空間,Sia 能讓你將它賣給想在 Sia 雲端網路上儲存檔案的人。
在個人筆電或桌機上架設 Sia 伺服器可能會有些挑戰。一般人有時會關機,或至少會定期重新啟動電腦。這對 Sia 這類應用程式來說是個問題,因為它需要維持高可用性,才能為網路上的客戶端提供服務。
一個方便的解決方案是在網路附加儲存(NAS)裝置上執行 Sia。NAS 的設計就是長時間保持開機,幾乎不需要重新啟動。而且,NAS 本來的用途就是提供大量的儲存空間,所以通常會有多餘的空間可以運用。許多商用 NAS 裝置都支援 Docker,這是一種可以執行 Sia 的虛擬化工具。
在本指南中,我將示範如何使用 Docker 在 NAS 裝置上架設 Sia 伺服器。
為什麼要架設主機?
許多剛接觸 Sia 的新手都會問:「在 Sia 上提供儲存空間能賺很多錢嗎?」老實說,在 Sia 上提供儲存空間目前並不好賺……至少現在還不是。

儲存空間租賃市場尚未達到關鍵規模。我最喜歡的 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” 即可找到並安裝。

建立 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 容器
從網路上的另一台電腦透過 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,你僅綁定至區域網路介面,而其他連接埠則隱含地綁定到所有介面。這是一項安全措施。任何透過連接埠9980與siad通訊的人,都能完全控制我們的主機,例如清空我們的錢包。如果我們的網路沒有對外公開這個連接埠,這項措施並非絕對必要,但無論如何都是有用的預防措施。 - 我的 NAS IP 位址是
10.0.0.101。你可以在區域網路上的另一台電腦上使用指令dig diskstation +short來查詢 NAS 的 IP 位址。
- 重要:請注意,對於連接埠
確認是否成功
在 DSM 中開啟 Docker 應用程式,並檢視 “Container” 面板。你應該會看到類似以下的畫面:

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

設定 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 的專用子目錄:

接著,使用 siac 將該資料夾新增為新的 Sia 主機儲存資料夾:
./siac --addr DISKSTATION:9980 host folder add /sia-data/host-storage 500GB請注意,/sia-data/host-storage 是從 Docker 容器內 daemon 的角度來看的路徑,而非 siac 的角度。
允許 Sia 通過防火牆
Sia 需要透過連接埠 9981 和 9982 與遠端節點通訊。若使用家用路由器,請將其設定為把這些連接埠轉發到 Synology NAS。實際操作步驟會因路由器而異,但大致會像以下這樣:
注意:請將 10.0.0.101 替換為你的 Synology NAS 的 IP 位址。

你不應該公開連接埠 9980,因為那是 Sia 用於 API 通訊的連接埠。將其暴露到公開網際網路會使你的 Sia 主機容易遭到入侵。
如何升級 Sia
Sia 仍是一項新技術,每隔幾個月就會推出重要的新版本。租用者會根據伺服器的版本來決定要向哪個主機購買檔案合約,因此在新版本推出後盡快升級對你最有利。
如果你已按照本指南操作,Sia 的所有狀態都會保存在 Docker 容器外部,因此你可以安全地升級,而不會影響 Sia 錢包或儲存合約。
以
admin身分透過 SSH 登入你的 NAS。ssh admin@diskstation執行以下指令:
# 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 撰寫了一份很棒的指南:
隨機一篇部落格
留言
登入後參與討論