该项目分为几个服务:
每个服务包含 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/