新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

1 台の Ubuntu マシン上で Hyperledger Fabric ネットワークを立ち上げる

Hyperledger fabric は、ブロックチェーン・ベースのアプリケーション開発の出発点となるオープンソースのブロックチェーン・アプリケーション・プラットフォームです。Hyperledger Fabric ネットワークという言葉を使うとき、それは Hyperledger Fabric を使用して稼動するシステムのことを意味します。

必要最小限のコンポーネントで構成されている場合でも、Fabric ネットワークをデプロイするのは簡単なことではありません。そこで、Fabric コミュニティーがブロックチェーン・アプリケーションの開発者やオペレーターのために作成したのが、Cello というプロジェクトです。Cello を利用すれば、規模の大小を問わずに Fabric ネットワークをデプロイできるようになります。

このチュートリアルでは皆さんがブロックチェーン・ベースのアプリケーション開発を始められるよう、必要なすべてのコンポーネントを備えた小規模な Hyperledger Fabric (バージョン 1.0.2) ネットワークを、Cello を使用して 1 台のUbuntu サーバーにデプロイする方法を説明します。

学習の目的

このチュートリアルでは Hyperledger Fabric ネットワークを稼動させることに加え、次のタスクを行います。

  • Fabric ネットワークのオーバーレイ・ネットワークを作成する。
  • Registrator サービスと DNS サービスをインストールして構成する (Fabric コンテナー同士が IP アドレスではなくコンテナー名を使用して連動できるようにするため)。
  • 1 ノードの Zookeeper と、Fabric の発注者に対応する 1 ノードの Kafka クラスターをインストールして構成する。
  • 2 つの異なる組織から 2 つのピアと 1 つの発注者をインストールする。
  • 1 つのチャネルを作成し、そのチャネルに 2 つのピアを参加させる。
  • 単純なチェーンコードを両方のピアにインストールする。
  • チャネルを使用してチェーンコードをインスタンス化する。

前提条件

このチュートリアルでは VirtualBox を使用します。VirtualBox は、Windows、Mac、Linux の各種オペレーティング・システム上で使用できます。具体的な前提条件は次のとおりです。

  • VirtualBox バージョン 5.1.0 以降
  • 4GB 以上のメモリーを割り当てた仮想マシンをホストするのに十分なメモリー

所要時間

このチュートリアルの所要時間は約 30 分です。

手順

環境を準備する

  1. クリーンな VirtualBox Ubuntu 16.04 仮想マシンを作成するには、VirtualBoxUbuntu をダウンロードして新しい仮想マシンを自分で作成することもできますが、この演習用にあらかじめイメージを作成して利用できるようにしておきました。このイメージをダウンロードした後、「File (ファイル)」 -> 「Import Appliance (アプライアンスのインポート)」を選択し、ダウンロードしたファイルを選択して、VirtualBox にイメージをインポートします。

  2. S仮想マシンを起動します。既製のイメージを使用した場合、ユーザー名は ubuntu、パスワードは ps です。あらかじめ作成されたイメージを使用したのでなければ、ユーザー名とパスワードはこれとは異なるはずです。

  3. その場合は、vars/vb.ymlvars/vb1st.yml の両方のファイル内で ssh_user を変更してください。パスワードは、Cello プロジェクトでは使用されません。

依存関係をインストールし、Cello プロジェクトを複製する

  1. 仮想マシンから、以下のコマンドを実行します。これらのコマンドによって、依存関係がインストールされ、現行ユーザーに Docker 権限が付与され、Cello プロジェクトも複製されます。

     sudo apt-get update
     sudo apt-get install python-dev python-pip libssl-dev libffi-dev docker.io -y
     sudo pip install 'ansible>=2.3.0.0'
     sudo gpasswd -a $USER docker
     cd ~ && git clone https://gerrit.hyperledger.org/r/cello
    
  2. SSH 鍵ペアと SSH エージェント鍵ペアによるログインをセットアップします。

     mkdir -p ~/.ssh && cd ~/.ssh && ssh-keygen -t rsa -f fd -P ""
     cat ~/.ssh/fd.pub >> ~/.ssh/authorized_keys
    
  3. ログアウトして再度ログインし、SSH エージェントを起動します。

     eval $(ssh-agent -s) && ssh-add ~/.ssh/fd
    

Ansible を利用して Fabric ネットワークを立ち上げる

  1. Ansible の run ディレクトリーを作成します。

     mkdir -p ~/cello/src/agent/ansible/run
    
  2. このチュートリアルに関連付けられているテンプレート・ファイルをダウンロードして、~/cello/src/agent/ansible/run ディレクトリーに配置します。

     cd ~/cello/src/agent/ansible/run
     # the runhosts.tpl file should be here
    
  3. 以下のコマンドを実行して runhosts ファイルを作成します。

     cd ~/cello/src/agent/ansible
     ipaddr=$(ip -4 addr show | awk -F '/' '/inet / {print $1}' | grep -v '127.0.0.1' | awk -F ' ' '{print $2;exit}')
     sed "s/\$ip/$ipaddr/g" run/runhosts.tpl > run/runhosts
    
  4. Fabric ネットワークを立ち上げます。

     ansible-playbook -i run/runhosts -e "mode=apply env=vb" initcluster.yml --skip-tags="resetconn"
     ansible-playbook -i run/runhosts -e "mode=apply env=bc2nd" setupfabric.yml
    

Fabric ネットワークが正常に稼動していることを確認する

  1. 以下のコマンドを実行して、すべてのコンテナーが稼動中であることを確認します (以下のリストには出力例も記載されています)。

     $ docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}'
    
     The results:
    
     NAMES                                STATUS              IMAGE
     dev-peer1st-mad-firstchaincode-1.0   Up 6 minutes        dev-peer1st-mad-firstchaincode-1.0-xxxx
     peer2nd-mad                          Up 7 minutes        hyperledger/fabric-peer:x86_64-1.0.2
     peer1st-mad                          Up 7 minutes        hyperledger/fabric-peer:x86_64-1.0.2
     1storderer-sin                       Up 7 minutes        hyperledger/fabric-orderer:x86_64-1.0.2
     kafka1st                             Up 7 minutes        hyperledger/fabric-kafka:x86_64-1.0.2
     zookeeper1st                         Up 7 minutes        hyperledger/fabric-zookeeper:x86_64-1.0.2
     registrator.fabric001                Up 15 minutes       email4tong/registrator:v10
     skydns.fabric001                     Up 15 minutes       skynetservices/skydns:2.5.3a
    
  2. チェーンコード・コンテナーが稼動中の状態になっていて、このコンテナーによって生成されたログ・エントリーが正しいことを確認します。

     $ docker logs dev-peer1st-mad-firstchaincode-1.0
    
     The results:
    
     ex02 Init
     Aval = 100, Bval = 200
    
  3. チェーンコードのクエリーを実行します。

チェーンコードのクエリーが成功した場合、それは、チェーンコードがピア上にデプロイされて正常に稼動していることを意味します。以下に、前の手順でインストールしてインスタンス化したチェーンコードに対するクエリー例を記載してあります。

```
$ docker exec -it peer1st-mad bash
peer chaincode query -C firstchannel -n firstchaincode -c '{"Args":["query","a"]}'

The results: Notice that the time stamp will be different on your machine

Query Result: 100
2017-11-09 16:38:11.056 UTC [main] main -> INFO 007 Exiting.....
```

独自のブロックチェーン・アプリケーションを開発する

稼動中の環境で、独自のチャネル、チェーンコード、ブロックチェーン・アプリケーションを作成できます。チェーンコードの詳細やチェーンコードの開発方法について調べるには、このリンク先のチェーンコード・チュートリアルを参照してください。

Fabric ネットワークを破棄する

Fabric ネットワークを削除するには、以下のコマンドを実行します。

ansible-playbook -i run/runhosts -e "mode=destroy env=bc2nd" setupfabric.yml
ansible-playbook -i run/runhosts -e "mode=destroy env=vb" initcluster.yml

まとめ

おめでとうございます!必要なすべてのコンポーネントを備えた小規模な Hyperledger Fabric (バージョン 1.0.2) ネットワークを 1 台のUbuntu サーバーにデプロイできました。これで、ブロックチェーン・ベースのアプリケーション開発を開始できます。