프로젝트는 여러 서비스로 분할됩니다.
각 서비스에는 1개 이상의 컨테이너가 포함되어 있으며 서로 독립적으로 확장될 수 있습니다.
모든 도커 이미지는 https://hub.docker.com/u/openblockchaininfo/에서 호스팅됩니다.
다음 지침은 대부분의 기본 시스템(Linux, OSX, Windows)에서 openblockchain을 실행할 수 있도록 허용하는 모든 시스템 종속성 및 요구 사항을 포함하여 전체 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가 설치되어 있는지 확인하십시오(이전 단계를 수행한 경우 설치하게 됩니다).
1. 도커 엔진 설치
Docker 엔진에는 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-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는 서비스를 관리하는 데 사용됩니다.
$ 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를 사용하려면 먼저 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 자격 증명(액세스 키 및 비밀 키)을 얻은 후 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. 떼 확인
Swarm 마스터를 실행하는 머신에 Docker 환경을 지정합니다.
$ 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은 기본 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 대시보드를 살펴보겠습니다. 다음 명령을 실행하여 각 Spark 마스터 및 작업자의 대시보드 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. 웹 앱 프런트엔드에 액세스
프런트엔드 컨테이너가 실행 중인 머신의 이름을 찾습니다.
$ 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분 안에 확실히 몇 가지 숫자가 깨질 것입니다).
Copyright (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) Alan Dipert [email protected]. 모든 권리 보유.
프런트엔드 서비스 종속성
https://github.com/gaearon/react-redux-universal-hot-example
MIT 라이센스(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, Limited. , 모든 권리 보유.
Spark 서비스 종속성
https://github.com/apache/spark
Apache 라이센스, 버전 2.0, 2004년 1월, http://www.apache.org/licenses/