Proyek ini dibagi menjadi beberapa layanan:
Setiap layanan berisi 1 atau lebih kontainer dan dapat diskalakan secara independen satu sama lain.
Semua gambar buruh pelabuhan dihosting: https://hub.docker.com/u/openblockchaininfo/
Petunjuk berikut akan memandu Anda dalam menginstal seluruh aplikasi openblockchain termasuk semua dependensi dan persyaratan sistem yang memungkinkan Anda menjalankan openblockchain dari sebagian besar sistem dasar (Linux, OSX, Windows).
Instruksi akan dimulai dengan memandu Anda menginstal Ubuntu di VirtualBox.
Karena kebutuhan daya komputasi dan ruang disk, penyimpanan dan pemrosesan data untuk proyek ini dirancang untuk dijalankan pada beberapa mesin, sebaiknya di cloud dengan manajemen lokal dari mesin host.
Petunjuk berikut memandu Anda dalam menyiapkan mesin host Anda dengan Ubuntu dan docker-engine, docker-machine, dan docker-compose.
Pertama, Anda perlu menginstal VirtualBox dengan mengikuti petunjuk ini
Anda kemudian perlu mengunduh Ubuntu 16.04.1 LTS - 64 bit dengan mengikuti petunjuk ini
Anda perlu membuat mesin virtual baru menggunakan VirtualBox. Mesin virtual (selanjutnya disebut sebagai 'mesin host') akan digunakan untuk menyebarkan aplikasi. Mesin host memerlukan:
Saat Anda memulai mesin host untuk pertama kalinya, pilih Ubuntu 16.04.1 LTS - 64 bit (yang Anda unduh pada langkah sebelumnya) sebagai disk start-up (dimungkinkan untuk menjalankan proyek di versi Ubuntu lain dan bahkan versi lain sistem operasi seperti Windows dan OS X, namun petunjuknya belum disertakan di sini).
Mesin host hanya akan digunakan untuk mengirimkan perintah ke cluster.
Mesin cluster (tempat layanan akan disebarkan) memerlukan (masing-masing):
Setelah Anda menyiapkan mesin host (lihat bagian "Prasyarat" berikut), petunjuk "Penyiapan Klaster" akan memandu Anda melalui langkah-langkah yang diperlukan untuk membuat 3 mesin di Scaleway.
Ini harus diinstal pada mesin host saja. Pastikan mesin host Anda telah menginstal Ubuntu (yang akan Anda miliki jika Anda mengikuti langkah sebelumnya).
1. Instal Mesin Docker
Docker Engine menyertakan klien buruh pelabuhan. docker
akan digunakan untuk berkomunikasi dengan daemon buruh pelabuhan yang berjalan di setiap mesin di cluster.
Perbarui informasi paket. Pastikan APT berfungsi dengan metode https, dan sertifikat CA diinstal:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
Tambahkan kunci GPG resmi dan repositori 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
Perbarui indeks paket APT dan instal Docker:
$ sudo apt-get update
$ sudo apt-get install docker-engine
Jalankan daemon buruh pelabuhan dan verifikasi sudah terpasang dengan benar:
$ sudo service docker start
$ sudo docker run hello-world
Instruksi yang selalu terkini tersedia di docker.com.
2. Instal Mesin Docker
docker-machine
digunakan untuk menyediakan mesin untuk cluster.
Unduh biner Docker Machine 0.8 dan ekstrak ke PATH Anda:
$ 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
Periksa instalasi dengan menampilkan versi Mesin:
$ docker-machine version
Instruksi yang selalu terkini tersedia di docker.com.
3. Instal Docker Tulis
Docker Compose digunakan untuk mengelola layanan.
$ 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
Periksa instalasi dengan menampilkan versi Compose:
$ docker-compose --version
Instruksi yang selalu terkini tersedia di docker.com.
Anda sekarang telah mengkonfigurasi mesin host Anda. Anda memiliki:
Ini akan memungkinkan Anda untuk mengelola semua layanan mikro yang membentuk aplikasi openblockchain dari dalam mesin host.
Petunjuk berikut memandu Anda dalam menyebarkan klaster di cloud, menggunakan Scaleway. Cluster ini akan berisi layanan berikut:
Layanan mikro dikelola melalui docker-* di mesin host Anda.
1. Buat layanan penemuan
Menggunakan Scaleway
Untuk menggunakan Scaleway, Anda harus menginstal driver Scaleway untuk Mesin Docker terlebih dahulu:
$ 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
Buat mesin untuk menghosting layanan penemuan Konsul:
$ 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
Arahkan klien buruh pelabuhan Anda ke mesin baru:
$ eval $(docker-machine env obc-consul)
Buat dan mulai layanan:
$ 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. Luncurkan Docker Swarm (cluster)
Menggunakan Scaleway
Anda dapat menyediakan mesin dari Scaleway, yang menyediakan server kelas atas dengan harga terjangkau yang sempurna untuk proyek ini.
Dapatkan kredensial Scaleway Anda (kunci akses dan kunci rahasia) dari halaman ini, lalu terapkan 3 mesin:
$ 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
Secara default mesin Scaleway memiliki disk 50GB. Namun, Scaleway juga memasang SSD 250GB, yang perlu dipasang secara manual:
$ 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' ;"
Penyimpanan tambahan ini tidak akan terlihat dalam UI akun Scaleway Anda. Anda dapat memeriksa secara manual untuk memverifikasi penyimpanan tambahan telah dipasang (dalam hal ini memeriksa obc):
$ docker-machine ssh obc
$ cat /etc/fstab
$ ls -al /openblockchain
3. Verifikasi kawanannya
Arahkan lingkungan Docker Anda ke mesin yang menjalankan master gerombolan:
$ eval $(docker-machine env --swarm obc)
Cetak info klaster:
$ docker info
Anda juga dapat membuat daftar IP yang telah "ditemukan" oleh Konsul:
$ docker run --rm swarm list consul://`docker-machine ip obc-consul`:8500
1. Buat jaringan default
Buat jaringan overlay yang memungkinkan container untuk "melihat" satu sama lain tidak peduli di node mana mereka berada:
$ docker network create --driver overlay --subnet 10.0.9.0/24 obcnet
Daftar semua jaringan, obcnet
akan ditampilkan sebagai overlay
:
$ docker network ls
openblockchain telah dirancang dengan beberapa layanan mikro yang dihubungkan di mesin Docker utama sebagai submodul git.
Perintah berikut mengkloning proyek dan semua gitmodules yang diperlukan.
$ git clone --recursive https://github.com/open-blockchain/openblockchain.git
Setelah Anda mengkloning repo, pastikan untuk masuk ke direktori.
$ cd openblockchain
2. Naik!
Dari folder root (yang berisi docker-compose.yml
), jalankan:
$ docker-compose up -d --build
Docker akan menyebarkan semua layanan. Secara default, ini akan diluncurkan:
3. Periksa layanannya
Tampilkan semua container dan statusnya (semuanya harus "Naik"):
$ docker-compose ps
Tampilkan status cluster Cassandra (Anda akan melihat 3 node):
$ docker-compose exec cassandra-seed nodetool status
Sementara itu, server bitcoin seharusnya sudah memindai beberapa ratus blok. Mari kita lihat cara kerjanya secara langsung:
$ docker-compose logs -f --tail 100 bitcoin
Anda akan melihat sesuatu seperti ini, yang berarti ia mengunduh semua blok dari 0 hingga 187591 (dalam contoh ini):
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)
Sekarang mari kita lihat dasbor Spark, yang seharusnya kosong saat ini. Jalankan perintah berikut untuk mendapatkan URL dasbor setiap master dan pekerja 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. Pindai blockchain
Tampilkan log pemindai:
$ docker-compose logs -f --tail 100 scanner-01
$ docker-compose logs -f --tail 100 scanner-02
Pemindai dikonfigurasikan (dalam docker-compose.yml
) sehingga mengindeks rentang blok yang tetap. Namun, pada awalnya, ketika node bitcoin belum mencapai blok 330.000, scanner-02
(yang dikonfigurasi untuk memindai blok dari 330.000 hingga 400.000) tidak akan dapat memindai apa pun. Oleh karena itu, ia akan menunggu 10 menit lalu coba lagi hingga blok tersebut tersedia.
2. Analisis percikan
Layanan spark-submit
menjalankan beberapa skrip Spark setiap jam. Skrip ini menghasilkan visualisasi (yaitu titik data) yang akan disediakan API ke frontend. Anda dapat melihat kemajuannya dengan melihat log:
$ docker-compose logs -f --tail 100 spark-submit
Mari jalankan skrip khusus yang menghitung semua blok dan transaksi di Cassandra:
$ docker-compose exec spark-submit sbt submit-Counter
Ketika skrip selesai, Anda akan melihat sesuatu seperti ini (abaikan log yang dimulai dengan stempel waktu):
Blocks: 239699
Transactions: 18941698
3. Akses API
Temukan nama mesin tempat kontainer api dijalankan:
$ docker ps --filter "name=node-api" --format "{{.Names}}"
Ini akan menampilkan sesuatu seperti obc-02/api
, di mana bagian sebelum garis miring adalah nama mesin.
Sekarang dapatkan URL apinya, ganti <machine-name-from-above>
sesuai dengan itu:
$ echo "http://"`docker-machine ip <machine-name-from-above>`":10010"
4. Akses antarmuka aplikasi web
Temukan nama mesin yang menjalankan container frontend:
$ docker ps --filter "name=frontend" --format "{{.Names}}"
Ini akan menampilkan sesuatu seperti obc-01/frontend
, di mana bagian sebelum garis miring adalah nama mesin.
Sekarang dapatkan URL frontend, ganti <machine-name-from-above>
sesuai:
$ echo "http://"`docker-machine ip <machine-name-from-above>`":80"
5. Visualisasi
Bergantung pada apakah layanan spark-submit
punya waktu untuk menyelesaikan skrip Spark atau tidak, Anda mungkin melihat visualisasi di frontend, di http://<frontend-ip>:80/blocks
.
Jika visualisasi belum tersedia, periksa kemajuan spark-submit
:
$ docker-compose logs -f --tail 100 spark-submit
Jika tidak aktif, mulai ulang layanan ( docker-compose restart spark-submit
). Jika tidak, mungkin sedang memproses data dari Cassandra. Biarkan ia menyelesaikan pekerjaannya dan menyegarkan halaman (pergi dan buatlah secangkir teh - dalam 60 menit pasti akan menghasilkan beberapa angka).
Hak Cipta (C) 2016 Dan Hassan
Dirancang, dikembangkan dan dikelola oleh 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/>.
Ketergantungan Layanan API
https://github.com/scalatra/scalatra
Hak Cipta (c) Alan Dipert [email protected]. Semua hak dilindungi undang-undang.
Ketergantungan Layanan Frontend
https://github.com/gaearon/react-redux-universal-hot-example
Lisensi MIT (MIT), Hak Cipta (c) 2015 Erik Rasmussen
ketergantungan node-api
https://github.com/nodejs/node/blob/master/LICENSE
Hak cipta kontributor Node.js. Semua hak dilindungi undang-undang.
ketergantungan Layanan openblockchain
https://github.com/docker/docker
Lisensi Apache, Versi 2.0, Januari 2004, http://www.apache.org/licenses/
Ketergantungan Layanan Pemindai
https://github.com/outworkers/phantom
Hak Cipta 2013-2016 Websudos, Terbatas. , Semua hak dilindungi undang-undang.
Ketergantungan Layanan Spark
https://github.com/apache/spark
Lisensi Apache, Versi 2.0, Januari 2004, http://www.apache.org/licenses/