ينقسم المشروع إلى عدة خدمات:
تحتوي كل خدمة على حاوية واحدة أو أكثر ويمكن تحجيمها بشكل مستقل عن بعضها البعض.
تتم استضافة جميع صور عامل الإرساء: 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
ابدأ تشغيل برنامج عامل الإرساء وتحقق من تثبيته بشكل صحيح:
$ sudo service docker start
$ sudo docker run hello-world
تتوفر دائمًا التعليمات المحدثة على docker.com.
2. قم بتثبيت جهاز الإرساء
يتم استخدام 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.
لقد قمت الآن بتكوين جهازك المضيف. لديك:
سيسمح لك هذا بإدارة جميع الخدمات الصغيرة التي تشكل تطبيق 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 على قرص بسعة 50 جيجابايت. ومع ذلك، فإن Scaleway يرفق أيضًا محرك أقراص SSD بسعة 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 الخاصة بك إلى الجهاز الذي يقوم بتشغيل السرب الرئيسي:
$ 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
بمجرد استنساخ الريبو تأكد من الدخول إلى الدليل.
$ 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. قم بمسح blockchain
عرض سجلات الماسحات الضوئية:
$ 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:
$ docker ps --filter "name=node-api" --format "{{.Names}}"
سيؤدي هذا إلى إخراج شيء مثل obc-02/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
). بخلاف ذلك، فمن المحتمل أنه يعالج البيانات من كاساندرا. دعه ينهي المهمة ويحدث الصفحة (اذهب بعيدًا واصنع كوبًا من الشاي - في 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
حقوق الطبع والنشر (ج) آلان ديبيرت [email protected]. جميع الحقوق محفوظة.
تبعيات خدمة الواجهة الأمامية
https://github.com/gaearon/react-redux-universal-hot-example
ترخيص معهد ماساتشوستس للتكنولوجيا (MIT)، حقوق الطبع والنشر (ج) 2015 لإريك راسموسن
تبعيات العقدة API
https://github.com/nodejs/node/blob/master/LICENSE
حقوق الطبع والنشر للمساهمين في Node.js. جميع الحقوق محفوظة.
تبعيات خدمة openblockchain
https://github.com/docker/docker
ترخيص أباتشي، الإصدار 2.0، يناير 2004، http://www.apache.org/licenses/
تبعيات خدمة الماسح الضوئي
https://github.com/outworkers/phantom
حقوق الطبع والنشر 2013-2016 Websudos، المحدودة. جميع الحقوق محفوظة.
تبعيات خدمة شرارة
https://github.com/Apache/spark
ترخيص أباتشي، الإصدار 2.0، يناير 2004، http://www.apache.org/licenses/