Running Sia on a Synology NAS via Docker

Michael Lynch

通过 Docker 在群晖 NAS 上运行 Sia

原文由 Michael Lynch 发布,订阅该博客

概述

Sia 是一个去中心化的点对点网络,用于买卖计算机存储空间。如果你有多余的存储空间,可以通过 Sia 将其出租给想在 Sia 云网络上存储文件的人。

在个人笔记本或台式机上托管 Sia 服务器颇具挑战。人们通常会不时关闭个人电脑,至少也会定期重启。这对 Sia 这类应用来说是个问题,因为它需要保持高可用性,才能为网络上的客户端提供服务。

一个便捷的解决方案是在网络附加存储(NAS)设备上运行 Sia。NAS 旨在全天候保持开机状态,很少需要重启。而且,NAS 本身就是为了提供大量存储而设计的,因此很可能有充足的空闲空间。许多商用 NAS 设备都支持 Docker 这一可用于运行 Sia 的虚拟化工具。

在本指南中,我将向你展示如何使用 Docker 在 NAS 设备上搭建 Sia 服务器。

为什么要做 Host?

许多刚接触 Sia 的新人都会问:“在 Sia 上做 Host 能赚很多钱吗?”老实说,在 Sia 上出租存储空间目前并不赚钱……至少现在还不是。

SiaHub 截图

存储租赁市场尚未形成规模。我最喜欢的 Sia Host 浏览器 SiaHub 显示,截至 2017-05-25,Sia 网络的总存储容量高达 1.1 PB,但其中只有 2% 被租用。在如此供过于求的情况下,Host 除非把价格定得接近于零,否则很难把存储空间卖出去。

所以,钱还没那么好赚,不过你仍可能出于以下几个原因想要参与:

租赁市场成功后的优势地位

Storj 等竞争对手不同,Sia 的目标客户是企业用户而非个人用户。迄今为止,还没有大型公司重度依赖 Sia,但哪怕只有一家中大型企业开始将 Sia 用作存储后端,也足以彻底激活整个市场。

当用户在 Sia 上购买存储时,Host 选择算法会大幅优先考虑在网络中参与时间更长的 Host。这意味着,如果出现抢购热潮,拥有数月稳定运行历史的 Host 将比新加入网络的 Host 具有明显优势。

乐趣所在

我个人做 Host 纯粹是为了尝试新鲜事物。我觉得调整 Host 定价并观察它如何影响收到的存储合约数量很有意思。Sia 还让我结识了由其他 Sia 用户组成的热情社区

软件版本

本指南在撰写时使用的是各软件组件的最新版本:

群晖 DS412+ NAS 设备

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

虽然本指南专门针对群晖 DSM 系统编写,但其中与 Docker 相关的步骤应该适用于任何支持 Docker 的平台。

我已在 Synology DS412+ 上成功测试过这些步骤,但它们应该适用于任何运行最新 DSM 且 CPU/RAM 充足的群晖 NAS。将这些步骤稍作调整以适配其他功能完善的消费级 NAS(如 QNAP NAS)也应该不难。

配置 NAS

安装 Docker

首先,安装 Docker。

Docker 是群晖官方发布的少数 DSM 套件之一。在套件中心搜索 docker,然后点击“安装”即可找到它。

安装 Docker 套件

创建 Sia 目录

接下来,为 Sia 创建一个专用的共享文件夹。Sia 会将所有状态信息都存储在这个文件夹中,包括加密的钱包文件和区块链数据库。

在 File Station 中,新建一个共享文件夹并命名为“sia”:

创建新的共享文件夹

启用 DiskStation 的 SSH 访问

Sia 没有预打包的 Docker 镜像,因此你需要创建一个 Dockerfile 来定义 Docker 镜像。由于 DSM 的 Docker 应用不支持通过 Dockerfile 创建镜像,你需要通过命令行来完成这一步。

要启用此功能,请打开“控制面板”>“终端机和 SNMP”,勾选“启动 SSH 功能”旁边的复选框。

安装 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 宿主机)上 9980-9982 端口的流量转发到 Sia 容器内的相同端口。
    • 重要:请注意,对于 9980 端口,你仅绑定到本地网络接口,而其他端口则隐式绑定到所有接口。这是一项安全措施。任何通过 9980 端口与 siad 通信的人都将完全控制我们的 Host,例如可以清空我们的钱包。如果我们的网络没有将此端口暴露到外网,这一措施虽非严格必要,但仍是一项有用的预防手段。
    • 我的 NAS 的 IP 地址是 10.0.0.101。你可以在本地网络的另一台机器上通过命令 dig diskstation +short 查找 NAS 的 IP 地址。

检查是否成功

在 DSM 中打开 Docker 应用,查看“容器”面板。你应该会看到类似如下的界面:

Sia 容器正在运行

如果打开我们之前创建的“sia”共享文件夹,你会看到 siad 已创建了几个文件夹:

Sia 生成的文件夹

配置 Sia

检查状态

让我们使用命令行客户端 siac 连接到 Sia 守护进程。

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]

添加 Host 存储空间

要创建用于出售给其他 Sia 用户的存储空间,请在“sia”共享文件夹中创建一个名为 host-storage 的专用子目录:

Sia 存储文件夹

然后,使用 siac 将该文件夹添加为新的 Sia Host 存储文件夹:

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

请注意,/sia-data/host-storage 是从 Docker 容器内守护进程视角看到的路径,而非 siac 的视角。

允许 Sia 通过防火墙

Sia 需要通过 99819982 端口与远程节点通信。使用家用路由器时,请将其配置为把这些端口转发到群晖 NAS。不同路由器的具体操作会有所不同,但大致如下所示:

注意:请将 10.0.0.101 替换为你的群晖 NAS 的 IP 地址。

防火墙设置

不应暴露 9980 端口,因为它是 Sia 用于 API 通信的端口。将其暴露到公网会使你的 Sia Host 容易遭到入侵。

如何升级 Sia

Sia 仍是一项新技术,每隔几个月就会发布重要的新版本。租用方会根据服务器版本来决定向哪个 Host 购买文件合约,因此在新版本发布后尽快升级对你最为有利。

如果你按照本指南操作,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 容器。

总结

现在,只要你的 NAS 保持运行,你就拥有了一个持续在线的 Sia 节点。

由于此配置将 Sia 的所有持久化状态都保存在容器之外,因此在发布新版本时升级 Sia 节点会非常容易。

延伸阅读

本指南向你展示了如何让 Host 顺利运行,但要配置和优化 Host 以实现收益最大化,你还有更多工作要做。Sia 社区成员 RBZL 编写了一份优秀的指南:

本文章由 muse-spark-1.2-contributor 进行翻译

评论