Running Sia on a Synology NAS via Docker

Michael Lynch

DockerでSynology NAS上にSiaを動かす

原文は Michael Lynch により に公開されました。 このブログを購読する

概要

Siaは、コンピュータのストレージ容量を売買するための分散型ピアツーピアネットワークです。余ったストレージ容量があれば、Siaを使ってSiaクラウドネットワーク上にファイルを保存したい人に販売できます。

個人のノートPCやデスクトップでSiaサーバーをホストするのは容易ではありません。個人用のマシンは電源を切ることもあれば、少なくとも定期的に再起動する必要があります。これはSiaのようなアプリケーションにとって問題です。ネットワーク上のクライアントにサービスを提供するために、高い可用性を維持する必要があるからです。

手軽な解決策は、ネットワークアタッチトストレージ(NAS)デバイス上でSiaを動かすことです。NASは常時電源が入った状態で動作するよう設計されており、再起動が必要になることもめったにありません。しかも、NAS本来の目的は大容量のストレージを提供することなので、余剰容量も十分にあるはずです。多くの市販NASデバイスは、Siaを動かせる仮想化ツールであるDockerをサポートしています。

このガイドでは、Dockerを使ってNASデバイス上にSiaサーバーをセットアップする方法を解説します。

ホストする理由

Siaを始めたばかりの人の多くは、「Siaでホスティングすれば大儲けできるのか?」と尋ねます。正直に言うと、Siaでストレージをホストしても、まだ儲かりません

SiaHubのスクリーンショット

ストレージレンタル市場はまだクリティカルマスに達していません。私のお気に入りのSiaホストエクスプローラーであるSiaHubによると、Siaネットワーク全体のストレージ容量は(2017年5月25日時点で)なんと1.1ペタバイトですが、そのうちレンタルされているのはわずか2%です。供給が過剰なため、ホストはほぼ0円で価格設定しない限り、ストレージ容量を売ることができません。

つまり、まだ大金が転がり込んでくる状況ではありませんが、それでも参加する価値がある理由がいくつかあります。

レンタル市場が成功した際の優位性

Storjなどの競合とは異なり、Siaは家庭ユーザーではなく法人顧客へのストレージ販売を狙っています。現時点ではSiaに大きく依存している大企業はありませんが、中規模以上の企業が1社でも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でも動作するはずです。また、QNAP NASのような高機能なコンシューマー向けNASであれば、この手順を応用するのも難しくないでしょう。

NASの設定

Dockerのインストール

まずはDockerをインストールします。

DockerはDSM向けにSynologyが公式に提供している数少ないパッケージの1つです。パッケージセンターでdockerを検索し、「インストール」をクリックしてください。

Dockerパッケージのインストール

Sia用ディレクトリの作成

次に、Sia専用の共有フォルダを作成します。このフォルダは、暗号化されたウォレットファイルやブロックチェーンデータベースなど、Siaのすべての状態情報を保存する場所になります。

File Stationから新規共有フォルダを作成し、名前を「sia」にします。

新規共有フォルダの作成

DiskStationへのSSHアクセスを有効化する

Sia用の既製Dockerイメージはないため、Dockerイメージを定義するDockerfileを作成します。DSMのDockerアプリはDockerfileからのイメージ作成をサポートしていないため、これはコマンドラインで行います。

この機能を有効にするには、コントロールパネル > 端末とSNMP を開き、「SSHサービスを有効にする」のチェックボックスをオンにします。

SSHの有効化

Dockerコンテナの作成

ネットワーク上の別のマシンからSSHでNASに接続します。LinuxおよびOS Xユーザーはターミナルから次のコマンドを実行してください。WindowsユーザーはCygwinなどのSSHクライアントが必要です。

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ホスト)のポート99809982へのトラフィックを、Siaコンテナ内の同じポート番号に転送します。
    • 重要: ポート9980についてはローカルネットワークインターフェースにのみバインドしているのに対し、他のポートでは暗黙的にすべてのインターフェースにバインドしていることに注意してください。これはセキュリティ対策です。ポート9980siadと通信できる人はホストを完全に制御でき、例えばウォレットを空にすることも可能です。この対策は、ネットワークがこのポートを外部に公開していなければ厳密には必須ではありませんが、念のための有用な予防策です。
    • NASのIPアドレスは10.0.0.101です。NASのIPアドレスは、ローカルネットワーク上の別のマシンからdig diskstation +shortコマンドで確認できます。

成功の確認

DSMからDockerアプリを開き、「Container」パネルを表示します。次のような画面が表示されるはずです。

実行中の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]

ホストストレージの追加

他のSiaユーザーに販売するストレージ容量を作成するには、「sia」共有フォルダ内にhost-storageという専用のサブディレクトリを作成します。

Siaストレージフォルダ

次に、siacを使ってそのフォルダを新しいSiaホストストレージフォルダとして追加します。

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

/sia-data/host-storagesiac側から見たパスではなく、Dockerコンテナ内から見たデーモン側のパスであることに注意してください。

ファイアウォールでSiaを許可する

Siaはポート99819982でリモートピアと通信する必要があります。家庭用ルーターを使用している場合は、これらのポートをSynology NASに転送するよう設定してください。正確な手順はルーターによって異なりますが、おおむね次のようになります。

注: 10.0.0.101はお使いのSynology NASのIPアドレスに置き換えてください。

ファイアウォール設定

ポート9980はSiaのAPI通信用ポートなので、公開しないでください。インターネットに公開すると、Siaホストが侵害される危険性があります。

Siaのアップグレード方法

Siaはまだ新しい技術で、数ヶ月ごとに重要な新リリースが出ます。レンタル利用者はサーバーのバージョンを見てどのホストからファイル契約を購入するかを決めるため、新リリース後すぐにアップグレードするのが得策です。

このガイド通りに設定していれば、Siaのすべての状態はDockerコンテナの外部に保存されているため、Siaウォレットやストレージ契約に影響を与えることなく安全にアップグレードできます。

  1. NASにadminとしてSSHで接続します。

    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ノードのアップグレードは非常に簡単です。

関連情報

このガイドではホストを立ち上げて稼働させる方法を解説しましたが、ホストを設定し、利益を最大化するために最適化するには、他にもやるべきことがあります。SiaコミュニティメンバーのRBZL氏が優れたガイドを書いています。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント