プロジェクトはいくつかのサービスに分割されています。
各サービスには 1 つ以上のコンテナが含まれており、相互に独立してスケーリングできます。
すべての Docker イメージはホストされています: https://hub.docker.com/u/openblockchaininfo/
次の手順では、すべてのシステム依存関係と要件を含む openblockchain アプリケーション全体をインストールする手順を説明します。これにより、ほとんどの基本システム (Linux、OSX、Windows) から openblockchain を実行できるようになります。
この手順では、まず VirtualBox に Ubuntu をインストールする手順を説明します。
コンピューティング能力とディスク容量の要件により、プロジェクトのデータ ストレージと処理は複数のマシンで実行されるように設計されており、できればホスト マシンからのローカル管理を備えたクラウドで実行されます。
次の手順では、Ubuntu、docker-engine、docker-machine、docker-compose を使用してホスト マシンをセットアップする手順を説明します。
まず、次の手順に従って VirtualBox をインストールする必要があります
次に、次の手順に従って Ubuntu 16.04.1 LTS - 64 ビットをダウンロードする必要があります。
VirtualBox を使用して新しい仮想マシンを作成する必要があります。仮想マシン (以下、「ホスト マシン」と呼びます) は、アプリケーションのデプロイに使用されます。ホスト マシンには次のものが必要です。
ホスト マシンを初めて起動するときは、起動ディスクとして Ubuntu 16.04.1 LTS - 64 ビット (前の手順でダウンロードしたもの) を選択します (プロジェクトを他のバージョンの Ubuntu やさらに他のバージョンで実行することも可能です) Windows や OS X などのオペレーティング システムを使用できますが、それらの手順はここには含まれていません)。
ホスト マシンは、クラスターにコマンドを送信するためにのみ使用されます。
クラスター マシン (サービスがデプロイされる場所) には、(それぞれ) 以下が必要です。
ホスト マシンをセットアップしたら (次の「前提条件」セクションを参照)、「クラスター セットアップ」の手順に従って、Scaleway 上に 3 台のマシンを作成するために必要な手順を実行します。
これらはホスト マシンにのみインストールする必要があります。ホスト マシンに Ubuntu がインストールされていることを確認してください (前の手順に従っている場合はインストールされています)。
1.Dockerエンジンをインストールする
Docker エンジンには Docker クライアントが含まれています。 docker
クラスター内のすべてのマシンで実行される docker デーモンと通信するために使用されます。
パッケージ情報を更新します。 APT が https メソッドで動作すること、および CA 証明書がインストールされていることを確認します。
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
公式 GPG キーと APT リポジトリを追加します。
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ sudo echo "deb https://apt.dockerproject.org/repo ubuntu-wily main" > /etc/apt/sources.list.d/docker.list
APT パッケージ インデックスを更新し、Docker をインストールします。
$ sudo apt-get update
$ sudo apt-get install docker-engine
docker デーモンを起動し、正しくインストールされていることを確認します。
$ sudo service docker start
$ sudo docker run hello-world
最新の手順は常に docker.com で入手できます。
2.Dockerマシンのインストール
docker-machine
クラスターにマシンをプロビジョニングするために使用されます。
Docker Machine 0.8 バイナリをダウンロードし、PATH に抽出します。
$ sudo curl -L https://github.com/docker/machine/releases/download/v0.8.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine
$ sudo chmod +x /usr/local/bin/docker-machine
マシンのバージョンを表示してインストールを確認します。
$ docker-machine version
最新の手順は常に docker.com で入手できます。
3. Docker Compose をインストールする
サービスの管理には Docker Compose が使用されます。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
Compose バージョンを表示してインストールを確認します。
$ docker-compose --version
最新の手順は常に docker.com で入手できます。
これでホスト マシンの構成が完了しました。あなたが持っている:
これにより、オープンブロックチェーンアプリケーションを構成するすべてのマイクロサービスをホストマシン内から管理できるようになります。
次の手順では、Scaleway を使用してクラウドにクラスターをデプロイする方法を説明します。クラスターには次のサービスが含まれます。
マイクロサービスは、ホスト マシン上の docker-* を介して管理されます。
1. 検出サービスを作成する
スケールウェイの使用
Scaleway を使用するには、まず Docker Machine 用の Scaleway ドライバーをインストールする必要があります。
$ wget https://github.com/scaleway/docker-machine-driver-scaleway/releases/download/v1.2.1/docker-machine-driver-scaleway_1.2.1_linux_amd64.tar.gz
$ tar -xvf docker-machine-driver-scaleway_1.2.1_linux_amd64.tar.gz
$ sudo cp docker-machine-driver-scaleway_1.2.1_linux_amd64/docker-machine-driver-scaleway /usr/local/bin/
$ sudo chmod +x /usr/local/bin/docker-machine-driver-scaleway
Consul 検出サービスをホストするマシンを作成します。
$ docker-machine create -d scaleway
--scaleway-commercial-type=C2S --scaleway-name=obc-consul
--scaleway-organization=<SCALEWAY-ACCESS-KEY> --scaleway-token=<SCALEWAY-SECRET-KEY>
obc-consul
Docker クライアントが新しいマシンを指すようにします。
$ eval $(docker-machine env obc-consul)
サービスを作成して開始します。
$ docker run --name consul --restart=always -p 8400:8400 -p 8500:8500
-p 53:53/udp -d progrium/consul -server -bootstrap-expect 1 -ui-dir /ui
2. Docker Swarm (クラスター) を起動します。
スケールウェイの使用
Scaleway からマシンをプロビジョニングできます。Scaleway は、このプロジェクトに最適な手頃な価格のハイエンド サーバーを提供します。
このページから Scaleway 資格情報 (アクセス キーと秘密キー) を取得し、3 台のマシンをデプロイします。
$ docker-machine create -d scaleway
--scaleway-commercial-type=C2L --scaleway-name=obc
--scaleway-organization=<SCALEWAY-ACCESS-KEY> --scaleway-token=<SCALEWAY-SECRET-KEY>
--swarm --swarm-master
--swarm-discovery consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-store=consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-advertise=eth0:2376
obc
$ docker-machine create -d scaleway
--scaleway-commercial-type=C2L --scaleway-name=obc-01
--scaleway-organization=<SCALEWAY-ACCESS-KEY> --scaleway-token=<SCALEWAY-SECRET-KEY>
--swarm
--swarm-discovery consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-store=consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-advertise=eth0:2376
obc-01
$ docker-machine create -d scaleway
--scaleway-commercial-type=C2L --scaleway-name=obc-02
--scaleway-organization=<SCALEWAY-ACCESS-KEY> --scaleway-token=<SCALEWAY-SECRET-KEY>
--swarm
--swarm-discovery consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-store=consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-advertise=eth0:2376
obc-02
デフォルトでは、Scaleway マシンには 50 GB のディスクが搭載されています。ただし、Scaleway には 250GB SSD も接続されており、これは手動でマウントする必要があります。
$ printf "obcnobc-01nobc-02" |
xargs -n 1 -I CONT_NAME docker-machine ssh CONT_NAME
"echo ; echo ; echo CONT_NAME ;"`
`"echo 'Formatting...' ;"`
`"yes | mkfs -t ext4 /dev/sda ;"`
`"echo 'Mounting...' ;"`
`"mkdir -p /openblockchain ;"`
`"mount /dev/sda /openblockchain ;"`
`"echo 'Adding to fstab...' ;"`
`"echo '/dev/sda /openblockchain auto defaults,nobootwait,errors=remount-ro 0 2' >> /etc/fstab ;"`
`"echo 'Done' ;"
この追加ストレージは、Scaleway アカウントの UI 内には表示されません。追加のストレージがマウントされていることを手動で確認できます (この場合は obc を確認します)。
$ docker-machine ssh obc
$ cat /etc/fstab
$ ls -al /openblockchain
3. swarm を確認する
Docker 環境が swarm マスターを実行しているマシンを指すようにします。
$ eval $(docker-machine env --swarm obc)
クラスター情報を出力します。
$ docker info
Consul が「発見」した IP をリストすることもできます。
$ docker run --rm swarm list consul://`docker-machine ip obc-consul`:8500
1. デフォルトのネットワークを作成する
コンテナーがどのノード上にあるかに関係なく、コンテナーが相互に「認識」できるようにするオーバーレイ ネットワークを作成します。
$ docker network create --driver overlay --subnet 10.0.9.0/24 obcnet
すべてのネットワークをリストします。obcnet obcnet
overlay
として表示されるはずです。
$ docker network ls
openblockchain は、メインの Docker エンジンに git サブモジュールとしてリンクされる複数のマイクロサービスを使用して設計されています。
次のコマンドは、プロジェクトと必要なすべての gitmodule のクローンを作成します。
$ git clone --recursive https://github.com/open-blockchain/openblockchain.git
リポジトリのクローンを作成したら、必ずそのディレクトリに移動してください。
$ cd openblockchain
2. アップ!
ルート フォルダー ( docker-compose.yml
含む) から、次のコマンドを実行します。
$ docker-compose up -d --build
Docker はすべてのサービスをデプロイします。デフォルトでは、次のように起動します。
3. サービスを確認する
すべてのコンテナとそのステータスを表示します (すべて「稼働中」である必要があります)。
$ docker-compose ps
Cassandra クラスターのステータスを表示します (3 つのノードが表示されるはずです)。
$ docker-compose exec cassandra-seed nodetool status
その間に、ビットコイン サーバーはすでに数百ブロックをスキャンしているはずです。実際に動作する様子を見てみましょう。
$ docker-compose logs -f --tail 100 bitcoin
次のような内容が表示されるはずです。これは、0 から 187591 までのすべてのブロックがダウンロードされたことを意味します (この例では)。
bitcoin_1 | 2016-08-25 15:03:16 UpdateTip: new best=00000000000006edbd5920f77c4aeced0b8d84e25bb5123547bc6125bffcc830 height=187589 log2_work=68.352088 tx=4696226 date=2012-07-05 03:45:13 progress=0.015804 cache=48.7MiB(122719tx)
bitcoin_1 | 2016-08-25 15:03:16 UpdateTip: new best=00000000000003f07c1227f986f4687d291af311a346f66247c504b332510931 height=187590 log2_work=68.352117 tx=4696509 date=2012-07-05 03:52:33 progress=0.015805 cache=48.7MiB(122815tx)
bitcoin_1 | 2016-08-25 15:03:16 UpdateTip: new best=00000000000002b34a755d25a5fee4c0ad0c018cf94f4b0afef6aabe823d304a height=187591 log2_work=68.352146 tx=4696593 date=2012-07-05 04:01:11 progress=0.015805 cache=48.7MiB(122839tx)
次に、Spark ダッシュボードを見てみましょう。現時点では空になっているはずです。次のコマンドを実行して、各 Spark マスターとワーカーのダッシュボード URL を取得します。
$ echo "master: "`docker-machine ip obc`":8080"
$ echo "worker 1: "`docker-machine ip obc-01`":8081"
$ echo "worker 2: "`docker-machine ip obc-02`":8081"
1. ブロックチェーンをスキャンする
スキャナーのログを表示します。
$ docker-compose logs -f --tail 100 scanner-01
$ docker-compose logs -f --tail 100 scanner-02
スキャナーは、ブロックの固定範囲にインデックスを付けるように ( docker-compose.yml
で) 構成されています。ただし、最初は、ビットコイン ノードがまだブロック 330,000 に到達していないとき、 scanner-02
(330,000 から 400,000 のブロックをスキャンするように構成されている) は何もスキャンできません。したがって、10 分間待ってから、それらのブロックが使用可能になるまで再試行します。
2. 火花解析
spark-submit
サービスは、1 時間ごとに複数の Spark スクリプトを実行します。これらのスクリプトは、API がフロントエンドに提供する視覚化 (つまり、データ ポイント) を生成します。ログを見ることで進行状況を確認できます。
$ docker-compose logs -f --tail 100 spark-submit
Cassandra のすべてのブロックとトランザクションをカウントするカスタム スクリプトを実行してみましょう。
$ docker-compose exec spark-submit sbt submit-Counter
スクリプトが完了すると、次のような内容が表示されるはずです (タイムスタンプで始まるログは無視してください)。
Blocks: 239699
Transactions: 18941698
3. APIにアクセスする
API コンテナーが実行されているマシンの名前を見つけます。
$ docker ps --filter "name=node-api" --format "{{.Names}}"
これにより、 obc-02/api
のようなものが出力されます。スラッシュの前の部分はマシン名です。
ここで API の URL を取得し、 <machine-name-from-above>
を適宜置き換えます。
$ echo "http://"`docker-machine ip <machine-name-from-above>`":10010"
4. Web アプリのフロントエンドにアクセスする
フロントエンド コンテナーが実行されているマシンの名前を見つけます。
$ docker ps --filter "name=frontend" --format "{{.Names}}"
これにより、 obc-01/frontend
ようなものが出力されます。スラッシュの前の部分はマシン名です。
次に、フロントエンドの URL を取得し、 <machine-name-from-above>
を適宜置き換えます。
$ echo "http://"`docker-machine ip <machine-name-from-above>`":80"
5. 視覚化
spark-submit
サービスが Spark スクリプトを完了する時間があったかどうかに応じて、フロントエンドhttp://<frontend-ip>:80/blocks
に視覚化が表示される場合があります。
ビジュアライゼーションがまだ利用できない場合は、 spark-submit
の進行状況を確認します。
$ docker-compose logs -f --tail 100 spark-submit
アイドリング状態の場合は、サービスを再起動します ( docker-compose restart spark-submit
)。それ以外の場合は、おそらく Cassandra からのデータを処理しています。仕事を終了させてページを更新してください (どこかへ行ってお茶を淹れてください。60 分もあれば、確実にいくつかの数値が計算されるでしょう)。
著作権 (C) 2016 ダン ハッサン
Dan Hassan によって設計、開発、保守されています [email protected]
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
APIサービスの依存関係
https://github.com/scalatra/scalatra
著作権 (c) アラン ディパート [email protected]。無断転載を禁じます。
フロントエンドサービスの依存関係
https://github.com/gaearon/react-redux-universal-hot-example
MIT ライセンス (MIT)、著作権 (c) 2015 Erik Rasmussen
ノード API の依存関係
https://github.com/nodejs/node/blob/master/LICENSE
Node.js の寄稿者に著作権があります。無断転載を禁じます。
openblockchain サービスの依存関係
https://github.com/docker/docker
Apache ライセンス、バージョン 2.0、2004 年 1 月、http://www.apache.org/licenses/
スキャナーサービスの依存関係
https://github.com/outworkers/phantom
著作権 2013-2016 Websudos, Limited. 、 無断転載を禁じます。
Spark サービスの依存関係
https://github.com/apache/spark
Apache ライセンス、バージョン 2.0、2004 年 1 月、http://www.apache.org/licenses/