MFCoind и MFC Block Explorer в Docker контейнере
-
Так как я порядком устал расставлять новые ноды MFCoind по серверам, а так же меня достал тот факт что наш первый блок эксплорер сложно развернуть еще где-то, то руки добрались до Docker-а в котором я смог решить обе проблемы разом.
И так представляю 3 репозитария с докер имиджами для всеобщего использования:
MFCoind docker images
Первый имидж на CentOS 7, так как я лично предпочитаю системы базирующиеся на RedHat.
Второй имидж на Ubuntu 16.04, так как многие вещи из мира блокчейна и крипты лучше описаны и быстрее настраиваются именно на этом дистре.Больше различия между двумя имиджами нету. При запуске докер контейнера из данных имиджей поднимается система и запускается MFCoind (с флагами -index и -daemon), а в интерактивную консоль (если запускать с флагом -i) пишутся дебаг логи MFCoind. Также контейнет умеет отдавать два сетевых порта наружу:
- 22823 - для контрольного соединения с сервисом по JSON-RPC
- 22824 - для P2P общения сервиса с другими членами блокчейн сети
При запуске MFCoind для RPC подключения, по умолчанию, логин MFCoinrpc и пароль MFCoinrpcPass, но эти данные можно менять при запуске контейнера, отдавая ему переменные окружения RPCUSER и RPCPASS с соответствующими значениями.
Примеры запуска контейнеров:
Интерактивный запуск со стандартными портами на CentOS:
docker run -p 22823:22823 -p 22824:22824 --name mfcoind-centos -ti --rm mamchenkov/mfcoind-centos
После создания контейнера можно подключаться по JSON-RPC к 127.0.0.1:22823
Запуск контейнера в фоновом режиме, на других портах и с другим логином/паролем:
docker run -p 8023:22823 -p 8024:22824 -e RPCUSER='alex' -e RPCPASS='youllneverguessme' --name mfcoind-ubuntu -d --rm mamchenkov/mfcoind-ubuntu
После создания контейнера можно подключаться по JSON-RPC к 127.0.0.1:8023
Примечание: при создание контейнера все данные MFCoind делаются с нуля, поэтому требуется время для синхронизации с блокчейном. При удаление контейнера эти данные также удаляются, поэтому не советую использовать эти кошельки для хранения денег. Если же надо обеспечить сохранность данных в кошельке, лучше цеплять данные с локальной машины из вне докера:
docker run -p 22823:22823 -p 22824:22824 -v /home/alex/.MFCoin:/root/.MFCoin -ti --name mfcoind-centos-save --rm mamchenkov/mfcoind-centos
Это пробросить данные вашего локального кошелька из /home/alex/.MFCoin (если брать стандартные значения для пользователя alex в линуксовой системе) в нужное место в контейнере и после выключения все изменения останутся у вас локально.
MFC Litesight Block Explorer docker image
Еще один полезный имидж я сделал на базе второго имиджа mfcoind, куда успешно упаковал взятый с блок эксплорера Litesight и древний NVM. Так как собрать Litesight на текущей версии NVM не представляется реальным из-за античности пакетов, другого разумного варианта я не нашел. В имидже уже предустановлено всё что надо для работы и при запуске запускается MFCoind, а через 2 минуты поднимается блок эксплорер на 80-ом порту.
Пример запуска c мапингом 80 порта докера к 8080 порту текущей машины:
docker run -p 8080:80 --name mfc-explorer -d --rm mamchenkov/mfc-explorer
После запуска и ожидания в 2 минуты можно цепляться по http://localhost:8080.
Также потребуется где-то 15-20 минут на полную синхронизацию как MFCoind, так и блок эксплорера самого.Данный имидж удобен если вы хотите иметь свой блок эксплорер в случае разработки софта, нуждающегося в API эксплорера и хотите сами контролировать стабильность и доступность сервиса.
TODO
- Чуть позже создам репозиторий, куда на регулярной основе буду выкладывать последнию версию данных блокчейна и поправлю имиджы на предварительную скачку данногой инфы, чтобы сократить время синхранизации MFCoind с текущем состаянием блокчейна
- После выполнения пункта выше, поправлю имидж блок эксплорера на использование локальных .dat файлов для синхронизации вместо JSON-RPC. На данный момент у Litesight сдувает башню если он начинает синхронизироваться с MFCoind, который в свою очередь еще сам до конце не синхронизовался с блокчейном.
- Возможно когда-то у меня доберутся руки до упаковки Electrum сервиса в докер, что тоже должно порядком усилить инфраструктуру и увеличить стабильность мобильных кошельков.
HINTS
- Вы можете делать свои докер имиджы на базе тех что я предоставил. Пример как из одного сделать другое можно посмотреть в mfc-explorer, так как он базируется на mfcoind-ubuntu
- Сделать mfc-explorer на базе mfcoind-centos у меня не получилось, хотя и очень хотелось, из-за несовместимости версий GLIBC_CXX. В принципе можно еще поковыряться, но времени нету. Может позже сделаю на базе Fedora как вариант, чтобы далеко от RedHat не отходить.
- Во всех репозиториях докер имиджей что я перечислил есть прямая ссылка на соответсвующие Bitbucket репозитории, где вы сможете увидеть полный комплект исходников если вам интересно, а так же можете форкнуть себе в загажник или для модификаций под себя.
- По любым вопросам стучитесь ко мне в телегу (@alex_mamchenkov)
- Донаты в MFC и BTC всегда велком ;-)
-
- Добавил новый репозитори mfcoind-data в котором лежат все файлы более-менее свежего блокчейна.
- Поправил все докер имиджы чтобы они выкачивали данный репозиторий себе в /root/.MFCoin до того как запускать сам MFCoind. Это очень сильно ускорило синхранизацию.
- Поменял тип синхронизации блок эксплорера с JSON-RPC на Local .dat files. Это ускоряет синхронизацию и снимает нагрузку с MFCoind за счет уменьшения JSON-RPC запросов к нему.
По факту теперь после успешного запуска контейнера, хоть он и чуть дольше запускается за счет скачивания файлов, блокэксплорер синхронизируется всего за пару минут, вместо 15-20 до этого.
Осталось сделать автообновление файлов блокчейна по интервалу (раз в час или раз в день) и всё будет вообще хорошо. Но даже те 90к+ блоков что уже лежат в репозитарии делают своё дело.
-
@alex_mamchenkov said in MFCoind и MFC Block Explorer в Docker контейнере:
docker run -p 22823:22823 -p 22824:22824 --name mfcoind-centos --ti --rm mamchenkov/mfcoind-centos
Вроде как правильно параметр -ti без двух черточек
-
@stereolubov очепятка, сорри, спасибо, поправил
-
Добавил автоматическое обновление репозитария с данными блокчейна раз в час, теперь вроде вообще красиво всё должно быть
-
Из-за быстроты роста репозитария со всеми комитами пришлось поменять тактику. Теперь обновленный архив выкладывается в dropbox. В репозитарии осталась инструкция к применению.
Все имиджы, которые использовали репозитарий исправлены на использование дропбокса.
Архив обновляется пару раз в час