1 安装前的准备
1.1 配置Linux系统
本文配置的为windows下的VMware软件下搭建的Linux下的cent0S-7系统,推荐系统有CentOS 7和Ubuntu 16.04有条件的能够用云服务器上的Linux系统,好处是能够搭建广域网联盟链。node
本文默认你已经对以太坊和docker技术有必定的掌握和了解,并部署好相应的环境。若是你还未准备好,请参考芯链公众号前期发布的环境搭建和部署文章。web
1.2 安装Docker
请使用管理员权限进行安装,docker
# su rootjson
安装Docker(请参考芯链公众号发布的安装指导文章):windows
CentOS: yum -y install docker-iocentos
Ubuntu: apt-get install docker-engineapi
安装完毕如图:服务器
而后启动Docker服务:tcp
#service docker start测试
校验docker是否安装成功:
#docker run hello-world
这个命令会下载一个测试镜像,而且运行在一个容器中。当容器运行时,他会打印一些信息,而且退出。下图表示Docker已经安装完成。
2 安装bootnode
2.1 下载bootnode镜像
运行命令以下命令:
#docker pull docker.io/hawyasunaga/ethereum-bootnode
查看镜像:docker images
2.2 Docker建立bootnode容器节点
生成引导节点:
1
|
#docker run -itd -m 512M --privileged=true --memory-swap -1 --net=host -p 30301:30301/udp -p 30301:30301/tcp -v /path/docker/bootnode:/root/bootnode --name genbootnode docker.io/hawyasunaga/ethereum-bootnode bootnode --genkey=/root/bootnode/boot.key |
运行引导节点:
1
|
#docker run -itd -m 512M --privileged=true --memory-swap -1 --net=host -p 30301:30301/udp -p 30301:30301/tcp -v /path/docker/bootnode:/root/bootnode --name bootnode docker.io/hawyasunaga/ethereum-bootnode bootnode --nodekey=/root/bootnode/boot.key |
注意:这两个命令参数中,-v /path/docker/bootnode:/root/bootnode为映射路径,在docker的这个bootnode容器中,出现容器内/root/bootnode路径都映射为外部路径/path/docker/bootnode。下方以太坊容器搭建节点命令同理。
2.3 查看bootnode日志获得节点
1
|
#docker logs -f bootnode |
获得节点以下:
将[::]替换为本机IP地址
好了,用于链接的根节点运行完毕。
3 安装以太坊节点
能够找台Linux进行节点联盟链的搭建了,这里继续以centos7继续演示了。
3.1 建立以太坊的创世文件
新建创世文件genesis.json,内容以下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
{ "config": { "chainId": 90, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": {"0x5f38056f45091ee992298e53681b0a60c999ff95":{"balance": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7"}}, "coinbase" : "0x5f38056f45091ee992298e53681b0a60c999ff95", "extraData" : "0x2017", "nonce" : "0xdeadbeefdeadbeeF", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00", "gasLimit": "0xffffffff", "difficulty": "0x20000" } |
3.2 初始化创世文件
首先新建一个准备放置以太坊目录的文件,将genesis.json文件放入该地址,本文为/home/admin下:
运行以下命令
1
|
#docker run -itd --privileged=true -v /home/admin:/root/ethdev --name gethDev1 ethereum/client-go --datadir /root/ethdev --networkid 8765639736937780 init /root/ethdev/genesis.json |
请记住—networkid 8765639736937780,这是当前搭建联盟链的ID。
查看日志文件:docker logs -f gethDev1
初始化成功。
3.3 Docker建立以太坊容器节点
运行以下命令
1
|
#docker rm -f gethDev1 |
1
|
#docker run -itd -m 512M --privileged=true --network=host --memory-swap -1 --net=host -p 8545:8545 -p 40303:40303 -v /home/admin:/root/ethdev --name gethDev1 ethereum/client-go --ipcdisable --port 40303 --bootnodes "enode://ad6aff917c6e8bd40cb20af4eac6ce05c16d285125b46f17fc9b5c3b0a833bd21667231215949c6ff771ba512eb8f87f138ac6679852997c3eaec1d349561d20@120.25.162.110:30301" --bootnodesv4 "enode://ad6aff917c6e8bd40cb20af4eac6ce05c16d285125b46f17fc9b5c3b0a833bd21667231215949c6ff771ba512eb8f87f138ac6679852997c3eaec1d349561d20@120.25.162.110:30301" --bootnodesv5 "enode://ad6aff917c6e8bd40cb20af4eac6ce05c16d285125b46f17fc9b5c3b0a833bd21667231215949c6ff771ba512eb8f87f138ac6679852997c3eaec1d349561d20@120.25.162.110:30301" --debug --rpcapi "db,eth,net,web3,personal,admin,miner,txpool" --datadir /root/ethdev --networkid 8765639736937780 --wsapi "db,eth,net,web3,personal,admin,miner,txpool" --ws --wsaddr "0.0.0.0" --rpc --rpcaddr "0.0.0.0" --cache=512 --verbosity 3 console |
//enode为上面运行bootnode获得的节点,并将预备的私钥文件放入keystore中,而且—networkid 8765639736937780为联盟链的标识ID。
查看控制台日志:docker logs -f gethDev1
Ok,节点搭建成功。
3.4 验证联盟链的链接
在上一步搭建好节点后,等待一段时间,让节点自动链接根节点bootnode。
进入以太坊容器中:
1
|
#docker attach gethDev1 |
输入命令:admin
查看peer是否链接:
OK,链接完成,联盟链搭建完成。
链接完成后,开始同步区块:
注意:这里链接的是以前已经加入bootnode根节点的其余节点,与根节点的链接并不会显示在peers中。若是是第一个链接bootnode的节点,链接了bootnode的时候输入admin,peers是空的,须要继续搭建一个节点来测试他们互相链接。