โครงการนี้แบ่งออกเป็นบริการต่างๆ:
แต่ละบริการประกอบด้วย 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 แต่คำแนะนำสำหรับระบบปฏิบัติการเหล่านั้นไม่ได้รวมอยู่ที่นี่)
เครื่องโฮสต์จะใช้เพื่อส่งคำสั่งไปยังคลัสเตอร์เท่านั้น
เครื่องคลัสเตอร์ (ที่จะใช้บริการ) ต้องการ (แต่ละเครื่อง):
เมื่อคุณตั้งค่าเครื่องโฮสต์แล้ว (ดูส่วน "ข้อกำหนดเบื้องต้น") คำแนะนำ "การตั้งค่าคลัสเตอร์" จะแนะนำคุณตลอดขั้นตอนที่จำเป็นในการสร้างเครื่อง 3 เครื่องบน Scaleway
สิ่งเหล่านี้จะต้องติดตั้งบนเครื่องโฮสต์เท่านั้น ตรวจสอบให้แน่ใจว่าเครื่องโฮสต์ของคุณติดตั้ง Ubuntu แล้ว (ซึ่งคุณจะได้รับหากคุณทำตามขั้นตอนก่อนหน้า)
1. ติดตั้งเครื่องยนต์นักเทียบท่า
Docker Engine รวมถึงไคลเอ็นต์นักเทียบท่า 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 daemon และตรวจสอบว่าติดตั้งอย่างถูกต้อง:
$ 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
ตรวจสอบการติดตั้งโดยแสดงเวอร์ชันการเขียน:
$ 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
สร้างเครื่องเพื่อโฮสต์บริการค้นหากงสุล:
$ 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
ชี้ไคลเอ็นต์นักเทียบท่าของคุณไปที่เครื่องใหม่:
$ 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 ยังติดตั้ง SSD ขนาด 250GB ซึ่งจำเป็นต้องติดตั้งด้วยตนเอง:
$ 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' ;"
พื้นที่เก็บข้อมูลเพิ่มเติมนี้จะไม่ปรากฏให้เห็นภายใน UI ของบัญชี Scaleway ของคุณ คุณสามารถตรวจสอบด้วยตนเองเพื่อยืนยันว่าได้ติดตั้งพื้นที่เก็บข้อมูลเพิ่มเติมแล้ว (ในกรณีนี้คือการตรวจสอบ obc):
$ docker-machine ssh obc
$ cat /etc/fstab
$ ls -al /openblockchain
3. ตรวจสอบฝูง
ชี้สภาพแวดล้อม Docker ของคุณไปที่เครื่องที่ใช้งาน Swarm Master:
$ eval $(docker-machine env --swarm obc)
พิมพ์ข้อมูลคลัสเตอร์:
$ docker info
คุณยังสามารถแสดงรายการ 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
คำสั่งต่อไปนี้จะโคลนโครงการและ gitmodules ที่จำเป็นทั้งหมด
$ git clone --recursive https://github.com/open-blockchain/openblockchain.git
เมื่อคุณโคลน repo แล้วอย่าลืมเข้าไปในไดเร็กทอรี
$ cd openblockchain
2. ขึ้น!
จากโฟลเดอร์รูท (ซึ่งมี docker-compose.yml
) ให้รัน:
$ docker-compose up -d --build
นักเทียบท่าจะปรับใช้บริการทั้งหมด โดยค่าเริ่มต้น มันจะเปิดตัว:
3. ตรวจสอบบริการ
แสดงคอนเทนเนอร์ทั้งหมดและสถานะ (ควรเป็น "ขึ้น") ทั้งหมด:
$ docker-compose ps
แสดงสถานะคลัสเตอร์ Cassandra (คุณควรเห็น 3 โหนด):
$ docker-compose exec cassandra-seed nodetool status
ในระหว่างนี้ เซิร์ฟเวอร์ bitcoin ควรสแกนบล็อกไปแล้วสองสามร้อยบล็อก มาดูกันว่ามันใช้งานได้จริง:
$ 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
) เพื่อให้จัดทำดัชนีช่วงบล็อกคงที่ อย่างไรก็ตาม ในการเริ่มต้น เมื่อโหนด bitcoin ยังไม่ถึงบล็อก 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 แดน ฮัสซัน
ออกแบบ พัฒนา และดูแลโดย 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) อลัน 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 มกราคม 2547 http://www.apache.org/licenses/
การพึ่งพาบริการสแกนเนอร์
https://github.com/outworkers/phantom
ลิขสิทธิ์ 2013-2016 Websudos จำกัด ,สงวนลิขสิทธิ์.
การพึ่งพาบริการ Spark
https://github.com/apache/spark
ใบอนุญาต Apache เวอร์ชัน 2.0 มกราคม 2547 http://www.apache.org/licenses/