Проект разделен на несколько сервисов:
Каждый сервис содержит 1 или несколько контейнеров и может масштабироваться независимо друг от друга.
Все образы докеров размещены: https://hub.docker.com/u/openblockchaininfo/.
Следующие инструкции помогут вам установить все приложение openblockchain, включая все системные зависимости и требования, что позволит вам запускать openblockchain из большинства базовых систем (Linux, OSX, Windows).
Инструкции начнутся с установки Ubuntu на VirtualBox.
Из-за требований к вычислительной мощности и дисковому пространству хранилище и обработка данных проекта были спроектированы так, чтобы их можно было запускать на нескольких машинах, предпочтительно в облаке с локальным управлением с хост-машины.
Следующие инструкции помогут вам настроить хост-компьютер с помощью 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.
Они должны быть установлены только на хост-компьютере. Убедитесь, что на вашем хост-компьютере установлена Ubuntu (которая будет у вас, если вы выполнили предыдущие шаги).
1. Установите Docker Engine.
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 и распакуйте его в PATH:
$ 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.
Теперь вы настроили свой хост-компьютер. У вас есть:
Это позволит вам управлять всеми микросервисами, составляющими приложение openblockchain, изнутри хост-машины.
Следующие инструкции помогут вам развернуть кластер в облаке с помощью Scaleway. Кластер будет содержать следующие сервисы:
Управление микросервисами осуществляется через docker-* на вашем хост-компьютере.
1. Создайте службу обнаружения.
Использование шкалы
Чтобы использовать Scaleway, вам сначала необходимо установить драйвер Scaleway для Docker Machine:
$ 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 (ключ доступа и секретный ключ) на этой странице, а затем разверните 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 имеют диск емкостью 50 ГБ. Однако Scaleway также подключается к твердотельному накопителю емкостью 250 ГБ, который необходимо установить вручную:
$ 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. Вы можете вручную проверить, подключено ли дополнительное хранилище (в данном случае проверка obc):
$ docker-machine ssh obc
$ cat /etc/fstab
$ ls -al /openblockchain
3. Проверьте рой
Направьте свою среду Docker на машину, на которой работает мастер Swarm:
$ eval $(docker-machine env --swarm obc)
Распечатать информацию о кластере:
$ docker info
Вы также можете перечислить IP-адреса, которые «обнаружил» Consul:
$ 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 был разработан с использованием нескольких микросервисов, которые связаны в основном движке Docker как подмодули git.
Следующая команда клонирует проект и все необходимые модули git.
$ git clone --recursive https://github.com/open-blockchain/openblockchain.git
После клонирования репозитория обязательно зайдите в каталог.
$ cd openblockchain
2. Вверх!
Из корневой папки (которая содержит docker-compose.yml
) запустите:
$ docker-compose up -d --build
Docker развернет все службы. По умолчанию он запустит:
3. Проверьте услуги
Показать все контейнеры и их статус (они все должны быть «Включены»):
$ 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, которые сейчас должны быть пустыми. Выполните следующую команду, чтобы получить URL-адрес панели мониторинга каждого мастера и исполнителя Spark:
$ 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
, где часть перед косой чертой — это имя машины.
Теперь получите URL-адрес API, заменив <machine-name-from-above>
-выше> соответственно:
$ echo "http://"`docker-machine ip <machine-name-from-above>`":10010"
4. Получите доступ к интерфейсу веб-приложения.
Найдите имя машины, на которой работает интерфейсный контейнер:
$ 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
). В противном случае, вероятно, он обрабатывает данные Кассандры. Дайте ему закончить работу и обновить страницу (уйдите и заварите чашку чая - за 60 минут он наверняка подсчитает некоторые цифры).
Авторские права (C) 2016 Дэн Хассан
Спроектировано, разработано и поддерживается Дэном Хасаном [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 (MIT), авторские права (c) 2015 г. Эрик Расмуссен
зависимости узла-api
https://github.com/nodejs/node/blob/master/ЛИЦЕНЗИЯ
Авторские права участников Node.js. Все права защищены.
Зависимости службы openblockchain
https://github.com/docker/docker
Лицензия Apache, версия 2.0, январь 2004 г., http://www.apache.org/licenses/
Зависимости службы сканера
https://github.com/outworkers/фантом
Авторские права: Websudos, Limited, 2013–2016 гг. , Все права защищены.
Зависимости службы Spark
https://github.com/apache/spark
Лицензия Apache, версия 2.0, январь 2004 г., http://www.apache.org/licenses/