本来想先写几篇关于各个公链在本地开发的环境配置,但是我还是觉着应该先写下最基础的环境配置,工欲善其事必先利其器,先提升一下对于virtualbox的掌握,在本地搭建开发环境模拟生产环境是很有必要的,尤其是对于区块链开发者尤为重要,因为往往需要模拟多台机器进行交互;
可能很多人会说没有必要,因为比如:
bitcoin core有regtest模式,所以可以跑单节点;
ETH有ganache和truffle dev可以模拟用软件模拟私链;
EOS可以用docker composer开启多个docker instance来交互;
但是对于一个完整的项目来说,链上操作只是其中一部分,我们肯定还需要很多链下操作的部分, 除非你的项目是纯粹运行在链上,一般纯粹在链上的项目往往也是要在几条不同的链之间交互,比如ETH和IPFS,开发环境也是需要多个节点的,再比如hyperledger也是要运行peer节点,orderer节点等多个节点,这里我还是主要说通常需要链下操作的情况,比如传统db,web api等。
这里的演示的宿主机器是windows,然后, virtualbox 版本6.0,
通常的要求就是数据库和后台服务运行在内网,然后区块链节点和网站程序等可以跟外网沟通,当然也会跟内网沟通。
下图是virtualbox的几种网络模式的能力对比:
> 摘自virtualbox文档:Host-only networking is particularly useful for preconfigured virtual appliances, where multiple virtual machines are shipped together and designed to cooperate. For example, one virtual machine may contain a web server and a second one a database, and since they are intended to talk to each other, the appliance can instruct Oracle VM VirtualBox to set up a host-only network for the two. A second, bridged, network would then connect the web server to the outside world to serve data to, but the outside world cannot connect to the database.
所以我们选择如下配置: * vb1 运行数据库和后台服务: host-only模式 * vb2 运行区块链节点和网站服务: bridged 模式和 host-only模式
我们预期的结果是:
宿主机器可以跟vb1和vb2通信,通过ssh(默认端口 22, 对于windows用户本人墙裂推荐 winscp,太好用了!), vb1 可以跟vb2通信,也可以跟宿主机器通信 vb2 可以跟一切通信,包括vb2/宿主机/外网
1. 搭建
首先在virtualbox创建一个hostonly adpter,
File=>host network manager
>>>vb1
>>>vb2
如上图所示,有时候dhcp server莫名其妙的不工作,无法给bridged模式分配ip,具体原因我没有深入研究,这个问题可以手动修复: `dhclient eth0` 或者可以设置静态的ip “` vim /etc/network/interfaces auto lo iface lo inet loopback
auto eth0 iface eth0 inet static address yourip netmask 255.255.255.0 gateway your gateway “`
2. 常用命令
“` ifconfig ip route show route -n cat /etc/network/interfaces /etc/init.d/networking restart service network-manager restart ifdown eth0 ifup eth0 dhclient eth0 Ifconfig eth0 [ip] netmask 255.255.255.0 up route add default gw [gateway] eth0 ip route add default via [gateway] dev eth0 “`
3. 更多探索
1) 我们甚至可以将vb2变成一个router,这样可以做很多有意思的事情,比如可以监控vb1的各种数据包
2) 有时候我们会遇到磁盘空间不足的情况,比如我就遇到过因为运行了多个docker导致磁盘空间不足,还有区块链节点同步数据导致空间不足,如果你不想重新来过一遍的话,可以选择下面的方式进行resize: * 安装os前resize,一步即可: `VBoxVBoxManage.exe modifyhd your.vdi –resize [targetsize]`
* 安装os之后resize,略微麻烦,亲测可用: 先用上面的步骤扩展vdi大小,然后再使用gparted进行分区扩展, 具体参考http://derekmolloy.ie/resize-a-virtualbox-disk/
主要参考资料: https://www.virtualbox.org/manual/ch06.html