基於ubuntu16.04快速構建Hyperledger Fabric網路

来源:https://www.cnblogs.com/dmego/archive/2018/05/15/9038937.html
-Advertisement-
Play Games

前言 最近在參加一個比賽,使用到了區塊鏈的開源軟體 ,由於之前從未接觸過區塊鏈,以及和區塊鏈開發相關的內容,所有在網上查閱了大量的資料,並且通過學習 "yeasy(楊寶華)" 開源的入門書籍 "區塊鏈技術指南" 以及進階學習的《區塊鏈原理、設計與應用》,對區塊鏈的一些相關概念有了一定認識。這裡記錄的 ...





前言

最近在參加一個比賽,使用到了區塊鏈的開源軟體hyperledger,由於之前從未接觸過區塊鏈,以及和區塊鏈開發相關的內容,所有在網上查閱了大量的資料,並且通過學習yeasy(楊寶華)開源的入門書籍區塊鏈技術指南以及進階學習的《區塊鏈原理、設計與應用》,對區塊鏈的一些相關概念有了一定認識。這裡記錄的是我安裝hyperledger fabric的所有步驟,同時也是一個快速搭建單機環境的參考教程。

準備好機器環境

本人的區塊鏈網路部署在VMware搭建的ubuntu16.04的環境下(推薦使用該版本的系統),詳細的系統版本為ubuntu-16.04.4-desktop-amd64.iso,是從網易開源鏡像站下載的。對於如何使用VMware安裝虛擬機以及讓虛擬機訪問網路,網上有許多教程,這裡就不重覆講了。 當將系統安裝完成後,需要更換源,使用desktop版的可以直接在設置裡面選擇最佳伺服器,如下圖所示 mark 若使用的是伺服器版本,則可以使用如下命令換成高速的源

  • 先備份原來的源文件
$ sudo cp /etc/apt/source.list /etc/apt/source.list.bak  
  • 打開source.list文件,刪除原來的內容
$ sudo vim /etc/apt/source.list
  • 任選下麵一組源文件複製到source.list中

網易源

deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse  
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse  
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse  
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse  
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse  
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse  
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse  
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse  
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse  
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse  

阿裡源

# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted  
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties  
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties  
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties  
deb http://mirrors.aliyun.com/ubuntu/ xenial universe  
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe  
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse  
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse  
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties  
deb http://archive.canonical.com/ubuntu xenial partner  
deb-src http://archive.canonical.com/ubuntu xenial partner  
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties  
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe  
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse  

搜狐源

deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse  
deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse  
deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse  
deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse  
deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse  
deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse  
deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse  
deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse  
deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse  
deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse 

複製進去後,使用:wq保存,然後使用如下命令更新一下

$ sudo apt-get install update

執行完成後環境就基本上準備好了,如果使用的是伺服器版本,覺得使用不方便的話,可以使用xshell之類的遠程連接工具連接你的虛擬機。如果你的環境搭建再雲伺服器上,例如阿裡雲或者騰訊雲,可以不用更新源,直接在自己的主機上使用遠程連接工具連接上雲主機,環境就算完成了(若在本地不能連接上雲主機,或者虛擬機,檢查一下ssh是否已經安裝並啟動,若沒有,可以參加網上的教程,配置遠程連接)。

安裝GO語言環境

不推薦使用apt的方式安裝GO,原因是這樣安裝的版本比較老,推薦安裝最新版的GO,具體安裝命令如下

  • 下載最新的GO安裝包,具體的最新版本號可以從Golang官網上查看
$ wegt https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz
  • 解壓安裝包到/usr/local目錄下
$ sudo tar -C usr/local -xzf go1.10.2.linux-amd64.tar.gz
  • 編輯當前用戶的環境變數
$ vim ~/.profile

添加如下內容

export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
#這裡配置的GOPATH目錄為家目錄的的go文件夾
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin

使用:wq保存後使用如下命令將保存立即刷新

$ source ~/.profile
  • 建立GOPATH目錄 由於在環境變數中配置了GOPATH目錄的位置,所以我們需要在家目錄下創建該文件夾
$ cd ~
$ mkdir go
  • 查看go版本,測試環境配置是否成功
$ go version
go version go1.10 linux/amd64

安裝Docker

這裡使用的Docker官方文檔來安裝docker

  • 如果系統中有舊版本的Docker,需要先使用如下命令卸載
$ sudo apt-get remove docker docker-engine docker.io
  • 更新apt包索引
$ sudo apt-get update
  • 安裝軟體包以允許apt通過HTTPS使用遠程庫
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

若出現無法識別命令,可以先將該命令複製到一個文本文件中,將\去掉,將所有語句放在同一行下,然後複製執行。

  • 添加Docker的官方GPG密鑰
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 通過搜索指紋的最後8個字元,確認您現在擁有指紋識別碼9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
$ sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <[email protected]>
sub   4096R/F273FCD8 2017-02-22
  • 使用以下命令設置穩定版本的遠程庫
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  • 再次更新apt包索引
$ sudo apt-get update
  • 使用apt安裝docker-ce
$ sudo apt-get install docker-ce
  • 查看docker版本,測試環境配置是否成功
$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:17:20 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:15:30 2018
  OS/Arch:      linux/amd64
  Experimental: false

安裝完成之後,需要將當前用戶添加到docker用戶組,然後為該用戶添加sudo許可權

  • 若沒有創建docker用戶組,可以使用如下命令創建一個GID999,組名為docker的用戶組
$ sudo groupadd –g 999 docker
  • 將當前用戶(ubuntu)添加到docker用戶組並分配sudo許可權
$ sudo usermod -aG docker ubuntu

註銷後重新登錄,然後添加阿裡雲的Docker Hub鏡像(註意,不同版本的添加方法不同,見阿裡雲容器 Hub

$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

如果覺得阿裡雲鏡像不好用,可以選擇DaoClound的鏡像,配置方式見DaoCloud官方文檔

安裝Docker-Compose

Docker-Compose是支持通過模板腳本批量創建的一個組件。在安裝 Docker-Compose之前,需要安裝python-pip

  • 安裝python-pip
$ sudo apt-get python-pip
  • 下載 Docker-Compose,這裡使用的是國內的DaoClound加速器進行下載
$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
  • Docker-Compose文件夾移動到/usr/local/bin目錄下
$ sudo mv ~/docker-compose /usr/local/bin/docker-compose 
  • Docker-Compose附上可執行許可權
$ chmod +x /usr/local/bin/docker-compose

下載Fabric源碼

  • 先在GOPATH下創建對應的目錄
$ mkdir -p ~/go/src/github.com/hyperledger
  • 切換到對應目錄,使用Git命令將fabric的源碼從github上克隆下來
$ cd ~/go/src/github.com/hyperledger
$ git clone https://github.com/hyperledger/fabric.git
  • 由於Fabric一直在更新,而我們並不需要使用最新的源碼,所有將版本切換到v1.0.0
$ cd ~/go/src/github.com/hyperledger/fabric
$ git checkout v1.0.0

下載Fabric Docker鏡像

由於剛纔設置了Docker Hub鏡像的地址,並且官方文件中也提供了批量下載的腳本,所有我們只需運行下麵命令即可

$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

由於剛纔設置的是國內的鏡像站,在本地網速還不錯的情況下下載數度還是很快的。當下載完成後,使用如下命令檢查鏡像列表

$ docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
dev-peer0.org1.example.com-marbles-v4   latest              089d43e100c9        5 hours ago         173MB
dev-peer0.org1.example.com-fabcar-1.0   latest              6047921ee993        7 hours ago         173MB
hyperledger/fabric-tools                latest              0403fd1c72c7        10 months ago       1.32GB
hyperledger/fabric-tools                x86_64-1.0.0        0403fd1c72c7        10 months ago       1.32GB
hyperledger/fabric-couchdb              latest              2fbdbf3ab945        10 months ago       1.48GB
hyperledger/fabric-couchdb              x86_64-1.0.0        2fbdbf3ab945        10 months ago       1.48GB
hyperledger/fabric-kafka                latest              dbd3f94de4b5        10 months ago       1.3GB
hyperledger/fabric-kafka                x86_64-1.0.0        dbd3f94de4b5        10 months ago       1.3GB
hyperledger/fabric-zookeeper            latest              e545dbf1c6af        10 months ago       1.31GB
hyperledger/fabric-zookeeper            x86_64-1.0.0        e545dbf1c6af        10 months ago       1.31GB
hyperledger/fabric-orderer              latest              e317ca5638ba        10 months ago       179MB
hyperledger/fabric-orderer              x86_64-1.0.0        e317ca5638ba        10 months ago       179MB
hyperledger/fabric-peer                 latest              6830dcd7b9b5        10 months ago       182MB
hyperledger/fabric-peer                 x86_64-1.0.0        6830dcd7b9b5        10 months ago       182MB
hyperledger/fabric-javaenv              latest              8948126f0935        10 months ago       1.42GB
hyperledger/fabric-javaenv              x86_64-1.0.0        8948126f0935        10 months ago       1.42GB
hyperledger/fabric-ccenv                latest              7182c260a5ca        10 months ago       1.29GB
hyperledger/fabric-ccenv                x86_64-1.0.0        7182c260a5ca        10 months ago       1.29GB
hyperledger/fabric-ca                   latest              a15c59ecda5b        10 months ago       238MB
hyperledger/fabric-ca                   x86_64-1.0.0        a15c59ecda5b        10 months ago       238MB
hyperledger/fabric-baseos               x86_64-0.3.1        4b0cab202084        12 months ago       157MB

出現以上結果說明鏡像已經下載成功

啟動Fabric網路並運行e2e_cli項目

  • 進入e2e_cli目錄,並執行啟動命令
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ ./network_setup.sh up

這個過程做瞭如下操作

1.編譯生成Fabric公私鑰,證書的程式,程式在目錄:fabric/release/linux-amd64/bin

2.基於configtx.yaml生成創世區塊和通道相關信息,並保存到channel-artifacts文件夾中

3.基於crypto-config.yaml生成公私鑰和證書信息,並保存在crypto-config文件夾中

4.基於docker-compose-cli.yaml啟動1 Orderer + 4 Peer + 1 CLIFabric容器

5.在CLI啟動的時候,會運行srcipt/script.sh文件,這個腳本文件包含了創建Channel,加入Channel,安裝Example02,運行Example02等功能

最後運行完成,我們會看到如下截圖,說明網路啟動成功了 mark

手動測試一下Fabric網路

我們以安裝好的Example02進行測試,在官方例子中,channel的名字是mychannel,鏈碼的名字是mycc,我們首先重新打開一個命令行,然後進入CLI

  • 輸入以下命令即可
$ docker exec -it cli bash
  • 運行以下命令可以查詢a賬戶的餘額
$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

查詢結果如下圖所示 mark 可以看到a賬戶的餘額現在是90

  • 運行以下命令可以查詢b賬戶的餘額
$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'

查詢結果如下圖所示 mark 可以看到b賬戶的餘額現在是210

  • 現在將b賬戶的餘額轉100給a賬戶,運行如下命令
peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","b","a","100"]}'

執行結果如下圖所示 mark 可以看到執行成功了

  • 再次查詢a賬戶的餘額
$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

查詢結果如下圖所示 mark 可以看到a賬戶的餘額現在是190,比之前多了100

  • 再次查詢b賬戶的餘額
$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'

查詢結果如下圖所示 mark 可以看到b賬戶的餘額現在是110,比之前少了100

調用鏈碼一切正常

關閉區塊鏈網路

  • 退出CLI容器
root@4941e8bd4bd6:/opt/gopath/src/github.com/hyperledger/fabric/peer# exit
  • 關閉Fabric網路
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
$ ./network_setup.sh down

最後出現如下圖說明關閉區塊鏈網路成功 mark

總結

至此,部署以及測試fabric的環境已經全部完成,下一篇博客我將記錄如何在此基礎上部署及運行IBM官方區塊鏈例子marbles(彈珠資產)

參考


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 閱讀目錄: 1. ELK Stack 簡介 2. 環境準備 3. 安裝 Elasticsearch 4. 安裝 Kibana 5. Kibana 使用 6. Elasticsearch 命令 最近在開發分散式服務追蹤,使用 Spring Cloud Sleuth Zipkin + Stream + ...
  • 在整理模板方法之前,先來說點廢話吧。除了記錄學習總結,也來記錄一下生活吧。 我們公司的老闆在北京,老闆也會因為項目來公司,不過不是天天來。公司有個同事,只要老闆不在就天天遲到,而且一天比一天晚,經常來了公司沒多久,午飯的外賣就送到公司了。前幾天,外賣竟然比他還來的早(外賣11點半送到的),公司一個不 ...
  • 一、什麼是裝飾模式 裝飾模式(Decorator),動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更靈活。UML結構圖如下: 其中,Component是抽象構件,定義一個對象介面,可以給這些對象動態地添加職責;ConreteComponent定義一個具體對象,也可以給這個對象 ...
  • 剛畫出來的,裡邊配的騷詞出自本人,夠騷吧! ...
  • Java反射, 修改欄位值, 實例化對象, 繞過構造器來實例化對象 ...
  • 概述 分散式平臺的核心在於併發,容錯。 而 Elixir 的優勢正是在於對於併發和容錯的處理。 分散式模型 1. CSP(Communicating Sequential Process) 模型 :: 多個進程通過管道(channel)進行交互 2. Actor 模型 :: 每個進程管理自己的內部狀 ...
  • ava開源生鮮電商平臺-購物車模塊的設計與架構(源碼可下載) 說明:任何一個電商無論是B2C還是B2B都有一個購物車模塊,其中最重要的原因就是客戶需要的東西放在一起,形成一個購物清單,確認是否有問題,然後再進行下單與付款. 1. 購物車資料庫設計: 說明:業務需求: 1》購物車裡面應該存放,那個買家 ...
  • 封裝 觀察前面的文件發現,除了sql語句及參數不同,其它語句都是一樣的 創建MysqlHelper.py文件,定義類 添加 創建testInsertWrap.py文件,使用封裝好的幫助類完成插入操作 查詢一個 創建testGetOneWrap.py文件,使用封裝好的幫助類完成查詢最新一行數據操作 實 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...