通过 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 上出租存储空间目前并不赚钱……至少现在还不是。

存储租赁市场尚未形成规模。我最喜欢的 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,然后点击“安装”即可找到它。

创建 Sia 目录
接下来,为 Sia 创建一个专用的共享文件夹。Sia 会将所有状态信息都存储在这个文件夹中,包括加密的钱包文件和区块链数据库。
在 File Station 中,新建一个共享文件夹并命名为“sia”:

启用 DiskStation 的 SSH 访问
Sia 没有预打包的 Docker 镜像,因此你需要创建一个 Dockerfile 来定义 Docker 镜像。由于 DSM 的 Docker 应用不支持通过 Dockerfile 创建镜像,你需要通过命令行来完成这一步。
要启用此功能,请打开“控制面板”>“终端机和 SNMP”,勾选“启动 SSH 功能”旁边的复选框。

创建 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”共享文件夹,你会看到 siad 已创建了几个文件夹:

配置 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 的专用子目录:

然后,使用 siac 将该文件夹添加为新的 Sia Host 存储文件夹:
./siac --addr DISKSTATION:9980 host folder add /sia-data/host-storage 500GB请注意,/sia-data/host-storage 是从 Docker 容器内守护进程视角看到的路径,而非 siac 的视角。
允许 Sia 通过防火墙
Sia 需要通过 9981 和 9982 端口与远程节点通信。使用家用路由器时,请将其配置为把这些端口转发到群晖 NAS。不同路由器的具体操作会有所不同,但大致如下所示:
注意:请将 10.0.0.101 替换为你的群晖 NAS 的 IP 地址。

你不应暴露 9980 端口,因为它是 Sia 用于 API 通信的端口。将其暴露到公网会使你的 Sia Host 容易遭到入侵。
如何升级 Sia
Sia 仍是一项新技术,每隔几个月就会发布重要的新版本。租用方会根据服务器版本来决定向哪个 Host 购买文件合约,因此在新版本发布后尽快升级对你最为有利。
如果你按照本指南操作,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 容器。
总结
现在,只要你的 NAS 保持运行,你就拥有了一个持续在线的 Sia 节点。
由于此配置将 Sia 的所有持久化状态都保存在容器之外,因此在发布新版本时升级 Sia 节点会非常容易。
延伸阅读
本指南向你展示了如何让 Host 顺利运行,但要配置和优化 Host 以实现收益最大化,你还有更多工作要做。Sia 社区成员 RBZL 编写了一份优秀的指南:
随机一篇博客
评论
登录后参与讨论