公鏈開發實戰:本地環境準備之virtualbox篇
本來想先寫幾篇關於各個公鏈在本地開發的環境配置,但是我還是覺著應該先寫下最基礎的環境配置,工欲善其事必先利其器,先提升一下對於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