如果餓了就吃,困了就睡,渴了就喝,人生就太無趣了
單節點安裝
1.環境準備
本人使用的是CentOS7 的虛擬機,安裝了docker和docker-compose工具。
2. 編輯docker-compose文件
創建並編輯文件
vim docker-compose.yml
編輯內容如下
version: '2.1'
services:
mongodb:
image: mongo:3.6
ports:
- "27017:27017"
command: mongod
bigchaindb:
image: bigchaindb/bigchaindb
depends_on:
- mongodb
- tendermint
environment:
BIGCHAINDB_DATABASE_BACKEND: localmongodb
BIGCHAINDB_DATABASE_HOST: mongodb
BIGCHAINDB_DATABASE_PORT: 27017
BIGCHAINDB_SERVER_BIND: 0.0.0.0:9984
BIGCHAINDB_WSSERVER_HOST: 0.0.0.0
BIGCHAINDB_WSSERVER_ADVERTISED_HOST: bigchaindb
BIGCHAINDB_TENDERMINT_HOST: tendermint
BIGCHAINDB_TENDERMINT_PORT: 26657
ports:
- "9984:9984"
- "9985:9985"
- "26658:26658"
healthcheck:
test: ["CMD", "bash", "-c", "curl http://bigchaindb:9984 && curl http://tendermint:26657/abci_query"]
interval: 3s
timeout: 5s
retries: 3
#command: 'bigchaindb start'
tendermint:
image: tendermint/tendermint:0.22.8
entrypoint: ''
ports:
- "26656:26656"
- "26657:26657"
command: sh -c "tendermint init && tendermint node --consensus.create_empty_blocks=false --proxy_app=tcp://bigchaindb:26658"
3. 運行BigchainDB節點
docker-compose up -d
運行成功後查看容器狀態,啓動成功會產生3個容器。如圖1:
多節點安裝
1. 準備節點
1.1 環境準備
準備四個節點的運行環境,本人安裝是使用的4個CentOS7的虛擬機環境,每個幾點環境需要安裝docker
和docker-compose
工具。
1.2 獲取每個節點的IP
本人的四臺虛擬機的ip如下:
node0:192.168.85.147
node1:192.168.85.136
node2:192.168.85.137
node3:192.168.85.146
1.3 創建目錄
在每各節點都創建bigchaindb
文件夾,如圖2:這是最終的bigchaindb
文件夾結構,現在可以看一下,這些文件會在後面出現。
2. docker-compose
準備docker-compose文件,在bigchaindb
目錄下創建docker-compose.yml
vim docker-compose.yml
編輯下面內容:
version: '2.1'
services:
mongodb:
image: mongo:3.6
ports:
- "27017:27017"
command: mongod
bigchaindb:
image: bigchaindb/bigchaindb
depends_on:
- mongodb
- tendermint
environment:
BIGCHAINDB_DATABASE_BACKEND: localmongodb
BIGCHAINDB_DATABASE_HOST: mongodb
BIGCHAINDB_DATABASE_PORT: 27017
BIGCHAINDB_SERVER_BIND: 0.0.0.0:9984
BIGCHAINDB_WSSERVER_HOST: 0.0.0.0
BIGCHAINDB_WSSERVER_ADVERTISED_HOST: bigchaindb
BIGCHAINDB_TENDERMINT_HOST: tendermint
BIGCHAINDB_TENDERMINT_PORT: 26657
ports:
- "9984:9984"
- "9985:9985"
- "26658:26658"
healthcheck:
test: ["CMD", "bash", "-c", "curl http://bigchaindb:9984 && curl http://tendermint:26657/abci_query"]
interval: 3s
timeout: 5s
retries: 3
#command: 'bigchaindb start'
tendermint:
image: tendermint/tendermint:0.22.8
volumes:
- ./tmdata:/tendermint
entrypoint: ''
ports:
- "26656:26656"
- "26657:26657"
command: sh -c "tendermint init && tendermint node --consensus.create_empty_blocks=false --proxy_app=tcp://bigchaindb:26658"
3. 下載 tendermint
因爲需要使用tendermint
來生成配置文件,就是tmdata
下的文件。所以需要下載編譯好的tendermint
二進制文件,因爲BigchainDB需要使用的tendermint的0.22.8版本,所以下載0.22.8的二進制文件。
#下載二進制文件
wget https://github.com/tendermint/tendermint/releases/download/v0.22.8/tendermint_0.22.8_linux_amd64.zip
#解壓文件
unzip unzip tendermint_0.22.8_linux_amd64.zip
#檢查版本
./tendermint version
4. 生成配置文件
使用tendermint testnet
來生成所有節點的配置文件,使用tendermint testnet -h
查看命令詳細信息。
4.1 生成多個節點配置信息
命令默認生成4個節點的配置文件,如果需要更多節點的配置信息,在tendermint testnet
命令後加-v
,例:需要生成10個節點配置信息
tendermint testnet -v 10
4.2 配置連續的ip的配置信息
如果節點的ip是連續的,例:192.168.85.100~192.168.85.103
tendermint testnet starting-ip-address 192.168.85.100
這樣配置文件中的ip就是配置好的。
5. 修改配置文件
如果是按照4.2中的方法生成的配置文件,就直接跳過此步驟。
生成的配置文件會在當前文件夾下生成mytestnet
文件。目錄如圖3:
將每一個config.toml
文件進行修改,修改第93行,如圖4:將其中node0-node3中改成對應的ip
將各個config
文件發送到各個節點bigchaindb/tmdata
。
scp -r /mytestnet/node0/ [email protected]:/root/bigchaindb/tmdata
scp -r /mytestnet/node1/ [email protected]:/root/bigchaindb/tmdata
scp -r /mytestnet/node2/ [email protected]:/root/bigchaindb/tmdata
scp -r /mytestnet/node3/ [email protected]:/root/bigchaindb/tmdata
6. 修改文件夾用戶組
因爲docker-compose.yml
中掛載的文件夾bigchaindb/tmdata
,如果不改變該文件夾的用戶組,啓動後,tendermint
會報錯Permission denied
,所以需要修改用戶組,每個節點都需要修改tmdata
:
chown -R 100 tmdata
chgrp -R 1000 tmdata
7. 啓動
每個節點都運行docker-compose up -d
,使用docker ps
查看啓動的容器,正常啓動會有3個容器。tendermint
,mongodb
和bigchaindb
,如圖5
7.1 檢查集羣啓動情況
訪問:http://192.168.85.147:26657/abci_info
返回信息如圖6:塊高爲1表示成功。
8. 測試
8.1 發送交易
選擇其中一個節點,發送交易,
發送POST交易:192.168.85.146:9984/api/v1/transactions?mode=async
,發送輸入如下:
{
"asset": {
"data": {
"msg": "Hello BigchainDB!"
}
},
"id": "4957744b3ac54434b8270f2c854cc1040228c82ea4e72d66d2887a4d3e30b317",
"inputs": [
{
"fulfillment": "pGSAIDE5i63cn4X8T8N1sZ2mGkJD5lNRnBM4PZgI_zvzbr-cgUCy4BR6gKaYT-tdyAGPPpknIqI4JYQQ-p2nCg3_9BfOI-15vzldhyz-j_LZVpqAlRmbTzKS-Q5gs7ZIFaZCA_UD",
"fulfills": null,
"owners_before": [
"4K9sWUMFwTgaDGPfdynrbxWqWS6sWmKbZoTjxLtVUibD"
]
}
],
"metadata": {
"sequence": 0
},
"operation": "CREATE",
"outputs": [
{
"amount": "1",
"condition": {
"details": {
"public_key": "4K9sWUMFwTgaDGPfdynrbxWqWS6sWmKbZoTjxLtVUibD",
"type": "ed25519-sha-256"
},
"uri": "ni:///sha-256;PNYwdxaRaNw60N6LDFzOWO97b8tJeragczakL8PrAPc?fpt=ed25519-sha-256&cost=131072"
},
"public_keys": [
"4K9sWUMFwTgaDGPfdynrbxWqWS6sWmKbZoTjxLtVUibD"
]
}
],
"version": "2.0"
}
8.2 查詢
在另一個節點查詢剛剛發送的交易,發送get請求:
http://192.168.85.147:9984/api/v1/assets/?search=Hello BigchainDB
查詢結果如下:比對剛纔的交易ID即可。
[
{
"data": {
"msg": "Hello BigchainDB!"
},
"id": "4957744b3ac54434b8270f2c854cc1040228c82ea4e72d66d2887a4d3e30b317"
}
]