DockerでSynology NASにSiaを導入する
概要
Siaは、コンピューターのストレージ容量を売買するための分散型P2Pネットワークです。余っているストレージがあれば、Siaを使ってSiaクラウドネットワークでファイルを保存したい人に販売できます。
個人のノートPCやデスクトップでSiaサーバーをホストするのは容易ではありません。個人用のマシンは電源を切ることが多く、少なくとも定期的に再起動するのが一般的です。Siaのようなアプリケーションにとっては、これが問題になります。ネットワーク上のクライアントにサービスを提供するには、高い可用性を維持する必要があるからです。
便利な解決策は、ネットワーク接続ストレージ(NAS)デバイスでSiaを動かすことです。NASは常時電源を入れたまま運用するように設計されており、再起動が必要になることもめったにありません。しかも、NAS本来の目的は大容量のストレージを提供することなので、空き容量にも余裕があるはずです。市販のNASデバイスの多くは、Siaを動かせる仮想化ツールであるDockerをサポートしています。
このガイドでは、Dockerを使ってNASデバイス上にSiaサーバーを構築する方法を紹介します。
なぜホストするのか
Siaを始めたばかりの人からは、「Siaでホストしてたくさん稼げるのですか?」という質問をよく受けます。正直なところ、Siaでのストレージのホスティングはまだ儲かりません。

ストレージレンタル市場はまだクリティカルマスに達していません。私のお気に入りのSiaホストエクスプローラーであるSiaHubによると、Siaネットワーク全体のストレージ容量は(2017年5月25日時点で)なんと1.1ペタバイトに上ります。そのうち実際にレンタルされているのはわずか2%です。これほど供給が過剰では、ほぼゼロに近い価格でなければストレージを売ることはできません。
まだ大金が転がり込んでくる状況ではありませんが、それでも参加を検討する理由はいくつかあります。
レンタル市場が成功したときに有利な立場に立てる
Storjなどの競合とは異なり、Siaは家庭ユーザーではなく法人顧客へのストレージ販売を狙っています。現時点では、Siaに大きく依存している大企業はありませんが、たとえ中規模から大規模の企業が1社でも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であればどれでも動作するはずです。また、QNAP NASのような高機能なコンシューマー向けNASであれば、別の機種向けに手順を応用するのも容易でしょう。
NASの設定
Dockerのインストール
まず、Dockerをインストールします。
Dockerは、DSM向けにSynologyが公式に提供している数少ないパッケージの一つです。パッケージセンターでdockerと検索し、「インストール」をクリックしてください。

Sia用ディレクトリの作成
次に、Sia専用の共有フォルダを作成します。このフォルダに、暗号化されたウォレットファイルやブロックチェーンのデータベースなど、Siaのすべての状態情報が保存されます。
File Stationから新規共有フォルダを作成し、名前を「sia」にします。

DiskStationへのSSHアクセスを有効にする
Sia用の既製のDockerイメージは存在しないため、Dockerイメージを定義するDockerfileを作成します。DSMのDockerアプリではDockerfileからのイメージ作成に対応していないため、この作業はコマンドラインで行います。
この機能を有効にするには、コントロールパネル > 端末とSNMPを開き、「SSHサービスを有効にする」の横にあるチェックボックスをオンにしてください。

Dockerコンテナの作成
ネットワーク上の別のマシンからSSHでNASに接続します。LinuxやOS Xのユーザーはターミナルから以下のコマンドを実行できます。WindowsユーザーはCygwinなどのSSHクライアントが必要です。
ssh admin@diskstationSSHで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と通信できる人はホストを完全に制御でき、たとえばウォレットを空にすることも可能です。この対策は、ネットワークがこのポートを外部に公開していなければ厳密には必要ありませんが、念のための有用な予防策です。 - 私のNASのIPアドレスは
10.0.0.101です。NASのIPアドレスは、ローカルネットワーク上の別のマシンからdig diskstation +shortコマンドで確認できます。
- 重要:ポート
成功したか確認する
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]ホスト用ストレージの追加
他のSiaユーザーに販売するストレージ領域を作成するには、「sia」共有フォルダの中にhost-storageという専用のサブディレクトリを作成してください。

次に、siacを使ってそのフォルダを新しいSiaホストストレージフォルダとして追加します。
./siac --addr DISKSTATION:9980 host folder add /sia-data/host-storage 500GBなお、/sia-data/host-storageはDockerコンテナ内から見たデーモン側のパスであり、siac側から見たパスではないことに注意してください。
ファイアウォールでSiaを許可する
Siaはポート9981と9982でリモートピアと通信する必要があります。家庭用ルーターを使用している場合は、これらのポートをSynology NASに転送するように設定してください。詳しい手順はルーターによって異なりますが、おおむね次のようになります。
注:10.0.0.101はお使いのSynology NASのIPアドレスに置き換えてください。

ポート9980はSiaのAPI通信用のポートなので、公開しないでください。インターネットに公開すると、Siaホストが侵害される危険性があります。
Siaのアップグレード方法
Siaはまだ新しいテクノロジーであり、数か月ごとに重要な新リリースが公開されます。レンタルユーザーはサーバーのバージョンを見て、どのホストからファイル契約を購入するかを決めるため、新しいリリースが出たら早めにアップグレードするのが得策です。
このガイドどおりに設定していれば、Siaのすべての状態はDockerコンテナの外部に保持されるため、Siaウォレットやストレージ契約に影響を与えることなく安全にアップグレードできます。
adminとしてNASにSSH接続します。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ノードのアップグレードはとても簡単です。
参考文献
このガイドではホストを立ち上げて稼働させる方法を紹介しましたが、ホストを設定し、利益を最大化するために最適化するには、さらにやるべきことがあります。SiaコミュニティメンバーのRBZL氏が優れたガイドを書いています。
記事をランダムに読む