此項目分為幾個服務:
每個服務包含 1 個或多個容器,並且可以彼此獨立擴展。
所有 docker 映像均託管:https://hub.docker.com/u/openblockchaininfo/
以下說明將引導您完成整個 openblockchain 應用程式的安裝,包括所有系統相依性和要求,讓您可以從大多數基礎系統(Linux、OSX、Windows)執行 openblockchain。
這些說明將首先指導您在 VirtualBox 上安裝 Ubuntu。
由於運算能力和磁碟空間要求,該專案的資料儲存和處理被設計為在多台機器上運行,最好是在雲端中運行,並透過主機進行本地管理。
以下說明將指導您使用 Ubuntu 和 docker-engine、docker-machine 和 docker-compose 設定主機。
首先,您需要按照以下說明安裝 VirtualBox
然後,您需要按照以下說明下載 Ubuntu 16.04.1 LTS - 64 位
您需要使用 VirtualBox 建立一個新的虛擬機器。虛擬機器(以下稱為“主機”)將用於部署應用程式。主機需求:
第一次啟動主機時,選擇Ubuntu 16.04.1 LTS - 64位元(您在上一個步驟下載的)作為啟動磁碟(可以在其他版本的Ubuntu甚至其他版本上執行該專案)作業系統,例如Windows 和OS X,但此處未包含這些作業系統的說明)。
主機僅用於向叢集發送命令。
叢集機器(將在其中部署服務)需要(每台):
設定主機後(請參閱以下「先決條件」部分),「叢集設定」說明將引導您完成在 Scaleway 上建立 3 台電腦所需的步驟。
這些必須僅安裝在主機上。確保您的主機已安裝 Ubuntu(如果您按照前面的步驟操作,您將會安裝 Ubuntu)。
1.安裝Docker引擎
Docker Engine 包含 Docker 用戶端。 docker
將用於與叢集中每台機器上執行的 docker 守護程式進行通訊。
更新包資訊。確保 APT 使用 https 方法,並已安裝 CA 憑證:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
新增官方 GPG 金鑰和 APT 儲存庫:
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ sudo echo "deb https://apt.dockerproject.org/repo ubuntu-wily main" > /etc/apt/sources.list.d/docker.list
更新 APT 套件索引並安裝 Docker:
$ sudo apt-get update
$ sudo apt-get install docker-engine
啟動 docker 守護程式並驗證其安裝是否正確:
$ sudo service docker start
$ sudo docker run hello-world
docker.com 上始終提供最新的說明。
2.安裝Docker機器
docker-machine
用於為叢集配置機器。
下載 Docker Machine 0.8 二進位檔案並將其解壓縮到您的路徑:
$ sudo curl -L https://github.com/docker/machine/releases/download/v0.8.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine
$ sudo chmod +x /usr/local/bin/docker-machine
透過顯示機器版本來檢查安裝:
$ docker-machine version
docker.com 上始終提供最新的說明。
3.安裝Docker Compose
Docker Compose 用於管理服務。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
透過顯示 Compose 版本來檢查安裝:
$ docker-compose --version
docker.com 上始終提供最新的說明。
您現在已經配置了主機。你有:
這將允許您從主機內管理構成開放區塊鏈應用程式的所有微服務。
以下說明將指導您使用 Scaleway 在雲端部署叢集。此集群將包含以下服務:
微服務透過主機上的 docker-* 進行管理。
1. 建立發現服務
使用 Scaleway
為了使用 Scaleway,您首先需要為 Docker Machine 安裝 Scaleway 驅動程式:
$ wget https://github.com/scaleway/docker-machine-driver-scaleway/releases/download/v1.2.1/docker-machine-driver-scaleway_1.2.1_linux_amd64.tar.gz
$ tar -xvf docker-machine-driver-scaleway_1.2.1_linux_amd64.tar.gz
$ sudo cp docker-machine-driver-scaleway_1.2.1_linux_amd64/docker-machine-driver-scaleway /usr/local/bin/
$ sudo chmod +x /usr/local/bin/docker-machine-driver-scaleway
建立一台機器來託管 Consul 發現服務:
$ docker-machine create -d scaleway
--scaleway-commercial-type=C2S --scaleway-name=obc-consul
--scaleway-organization=<SCALEWAY-ACCESS-KEY> --scaleway-token=<SCALEWAY-SECRET-KEY>
obc-consul
將您的 docker 用戶端指向新機器:
$ eval $(docker-machine env obc-consul)
建立並啟動服務:
$ docker run --name consul --restart=always -p 8400:8400 -p 8500:8500
-p 53:53/udp -d progrium/consul -server -bootstrap-expect 1 -ui-dir /ui
2.啟動Docker Swarm(叢集)
使用 Scaleway
您可以從 Scaleway 調配計算機,它提供非常適合該專案的經濟實惠的高端伺服器。
從此頁面取得您的 Scaleway 憑證(存取金鑰和秘密金鑰),然後部署 3 台電腦:
$ docker-machine create -d scaleway
--scaleway-commercial-type=C2L --scaleway-name=obc
--scaleway-organization=<SCALEWAY-ACCESS-KEY> --scaleway-token=<SCALEWAY-SECRET-KEY>
--swarm --swarm-master
--swarm-discovery consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-store=consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-advertise=eth0:2376
obc
$ docker-machine create -d scaleway
--scaleway-commercial-type=C2L --scaleway-name=obc-01
--scaleway-organization=<SCALEWAY-ACCESS-KEY> --scaleway-token=<SCALEWAY-SECRET-KEY>
--swarm
--swarm-discovery consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-store=consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-advertise=eth0:2376
obc-01
$ docker-machine create -d scaleway
--scaleway-commercial-type=C2L --scaleway-name=obc-02
--scaleway-organization=<SCALEWAY-ACCESS-KEY> --scaleway-token=<SCALEWAY-SECRET-KEY>
--swarm
--swarm-discovery consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-store=consul://`docker-machine ip obc-consul`:8500
--engine-opt cluster-advertise=eth0:2376
obc-02
預設情況下,Scaleway 機器具有 50GB 磁碟。不過,Scaleway還附了250GB SSD,需要手動掛載:
$ printf "obcnobc-01nobc-02" |
xargs -n 1 -I CONT_NAME docker-machine ssh CONT_NAME
"echo ; echo ; echo CONT_NAME ;"`
`"echo 'Formatting...' ;"`
`"yes | mkfs -t ext4 /dev/sda ;"`
`"echo 'Mounting...' ;"`
`"mkdir -p /openblockchain ;"`
`"mount /dev/sda /openblockchain ;"`
`"echo 'Adding to fstab...' ;"`
`"echo '/dev/sda /openblockchain auto defaults,nobootwait,errors=remount-ro 0 2' >> /etc/fstab ;"`
`"echo 'Done' ;"
此額外儲存空間在您的 Scaleway 帳戶的 UI 中將不可見。您可以手動檢查以驗證附加儲存是否已安裝(在本例中檢查 obc):
$ docker-machine ssh obc
$ cat /etc/fstab
$ ls -al /openblockchain
3. 驗證集群
將您的 Docker 環境指向執行 swarm master 的機器:
$ eval $(docker-machine env --swarm obc)
列印集群資訊:
$ docker info
您也可以列出 Consul 已「發現」的 IP:
$ docker run --rm swarm list consul://`docker-machine ip obc-consul`:8500
1.創建預設網絡
創建一個覆蓋網絡,允許容器彼此“看到”,無論它們位於哪個節點:
$ docker network create --driver overlay --subnet 10.0.9.0/24 obcnet
列出所有網絡, obcnet
應顯示為overlay
:
$ docker network ls
openblockchain 設計有多個微服務,這些微服務作為 git 子模組連結在主 Docker 引擎中。
以下命令克隆專案和所有必需的 gitmodules。
$ git clone --recursive https://github.com/open-blockchain/openblockchain.git
克隆儲存庫後,請確保進入該目錄。
$ cd openblockchain
2. 起來!
從根資料夾(包含docker-compose.yml
),運行:
$ docker-compose up -d --build
Docker 將部署所有服務。預設情況下,它將啟動:
3.檢查服務
顯示所有容器及其狀態(它們都應該是“Up”):
$ docker-compose ps
顯示 Cassandra 叢集狀態(您應該看到 3 個節點):
$ docker-compose exec cassandra-seed nodetool status
同時,比特幣伺服器應該已經掃描了幾百個區塊。讓我們看看它的實際運作情況:
$ docker-compose logs -f --tail 100 bitcoin
您應該會看到類似這樣的內容,這意味著它下載了從 0 到 187591 的所有區塊(在本例中):
bitcoin_1 | 2016-08-25 15:03:16 UpdateTip: new best=00000000000006edbd5920f77c4aeced0b8d84e25bb5123547bc6125bffcc830 height=187589 log2_work=68.352088 tx=4696226 date=2012-07-05 03:45:13 progress=0.015804 cache=48.7MiB(122719tx)
bitcoin_1 | 2016-08-25 15:03:16 UpdateTip: new best=00000000000003f07c1227f986f4687d291af311a346f66247c504b332510931 height=187590 log2_work=68.352117 tx=4696509 date=2012-07-05 03:52:33 progress=0.015805 cache=48.7MiB(122815tx)
bitcoin_1 | 2016-08-25 15:03:16 UpdateTip: new best=00000000000002b34a755d25a5fee4c0ad0c018cf94f4b0afef6aabe823d304a height=187591 log2_work=68.352146 tx=4696593 date=2012-07-05 04:01:11 progress=0.015805 cache=48.7MiB(122839tx)
現在讓我們看看 Spark 儀表板,它現在應該是空的。執行以下命令以取得每個 Spark Master 和 Worker 的儀表板 URL:
$ echo "master: "`docker-machine ip obc`":8080"
$ echo "worker 1: "`docker-machine ip obc-01`":8081"
$ echo "worker 2: "`docker-machine ip obc-02`":8081"
1. 掃描區塊鏈
顯示掃描器的日誌:
$ docker-compose logs -f --tail 100 scanner-01
$ docker-compose logs -f --tail 100 scanner-02
掃描器已配置(在docker-compose.yml
中),以便它們索引固定範圍的區塊。然而,一開始,當比特幣節點尚未到達區塊 330,000 時, scanner-02
(配置為掃描從 330,000 到 400,000 的區塊)將無法掃描任何內容。因此,它將等待 10 分鐘,然後重試,直到這些區塊可用。
2. 火花分析
spark-submit
服務每小時執行多個 Spark 腳本。這些腳本產生 API 將提供給前端的視覺化效果(即資料點)。您可以透過查看日誌來查看其進度:
$ docker-compose logs -f --tail 100 spark-submit
讓我們執行一個自訂腳本來計算 Cassandra 中的所有區塊和事務:
$ docker-compose exec spark-submit sbt submit-Counter
腳本完成後,您應該會看到類似這樣的內容(忽略以時間戳開頭的日誌):
Blocks: 239699
Transactions: 18941698
3. 存取API
找到運行 api 容器的機器的名稱:
$ docker ps --filter "name=node-api" --format "{{.Names}}"
這將輸出類似obc-02/api
內容,其中斜槓之前的部分是機器名稱。
現在取得 api 的 URL,相應地取代<machine-name-from-above>
:
$ echo "http://"`docker-machine ip <machine-name-from-above>`":10010"
4. 存取 Web 應用程式前端
找到運行前端容器的機器的名稱:
$ docker ps --filter "name=frontend" --format "{{.Names}}"
這將輸出類似obc-01/frontend
內容,其中斜槓之前的部分是機器名稱。
現在取得前端的 URL,相應地替換<machine-name-from-above>
:
$ echo "http://"`docker-machine ip <machine-name-from-above>`":80"
5. 可視化
根據spark-submit
服務是否有時間完成 Spark 腳本,您可能會在前端看到視覺化效果,網址為http://<frontend-ip>:80/blocks
。
如果可視化尚不可用,請檢查spark-submit
的進度:
$ docker-compose logs -f --tail 100 spark-submit
如果空閒,請重新啟動服務( docker-compose restart spark-submit
)。否則,它可能正在處理來自 Cassandra 的數據。讓它完成工作並刷新頁面(走開去泡杯茶 - 60 分鐘內它肯定會處理一些數字)。
版權所有 (C) 2016 丹‧哈桑
由 Dan Hassan 設計、開發和維護 [email protected]
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
API服務依賴
https://github.com/scalatra/scalatra
版權所有 (c) 艾倫·迪珀特 [email protected]。版權所有。
前端服務依賴項
https://github.com/gaearon/react-redux-universal-hot-example
麻省理工學院許可證 (MIT),版權所有 (c) 2015 Erik Rasmussen
節點 API 依賴項
https://github.com/nodejs/node/blob/master/LICENSE
版權所有 Node.js 貢獻者。版權所有。
openblockchain 服務依賴
https://github.com/docker/docker
Apache 許可證,版本 2.0,2004 年 1 月,http://www.apache.org/licenses/
掃描器服務依賴項
https://github.com/outworkers/phantom
版權所有 2013-2016 Websudos 有限公司。 , 版權所有。
Spark 服務依賴
https://github.com/apache/spark
Apache 許可證,版本 2.0,2004 年 1 月,http://www.apache.org/licenses/