Запуск golos ноды в контейнере докера


Опишу тут ручной процесс запуска ноды в контейнере докера. Так как у меня нод не много и запускать их не нужно каждый день, потому процесс у меня не автоматизирован. Вернее есть немного скриптов, для запуска, останова, логи распечатать, но там кустарщина, которой даже делиться стыдно.

Ну вообщем к делу. Для запуска понадобится естественно сам докер. Установить можно пользуясь инструкцией к примеру для ubuntu расположенной тут

https://docs.docker.com/install/linux/docker-ce/ubuntu/

Дальше нам понадобится образ с golos-демоном. Есть два способа получить этот образ. Можно воспользоваться готовым образом из официального хаба докера или собрать самому.

Самостоятельная сбока образа.

Такой способ может понадобится если нету готового, нужного вам образа в хабе докера, но есть Dockerfile для сборки. Goloscore поддерживает в актуальном состоянии Dockerfile для сборки образа с демоном голоса им мы и воспользуемся.

Допустим наша цель собрать образ для запуска хардфорка от Гороха. :) Для этого нам понадобятся исходники. Воспользуемся командой git — ее можно установить воспользовавшись к примеру apt в ubuntu или любым другим способом.

Клонируем репозиторий и переключаемся на нужный релиз

#> git clone https://github.com/gropox/golos.git
#> cd golos
~/golos #>  git checkout gropox-0.17.1
~/golos #>  git submodule update --init --recursive

Запускаем сборку образа

Если у вас прерывается сборка в самом начале, при попытке актуализировать репозиторий, то отредактируйте Dockerfile и удалите отмеченную строку.

Запускаем сборку

~/golos #> docker build . -f Dockerfile -t gropox-17
Sending build context to Docker daemon  58.29MB
Step 1/18 : FROM phusion/baseimage:0.9.19
 ---> c39664f3d4e5
Step 2/18 : ENV LANG=en_US.UTF-8
 ---> Using cache
 ---> 2467fc9cd257
....

Если все прошло удачно, у вас будет готовый образ

~/golos #> docker images gropox*
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
gropox-17           latest              70647dfb7d19        20 minutes ago        1.23GB

Вариант номер два - скачать образ из docker hub

Нет ничего проще. К примеру, чтобы скачать продуктивную версию голоса можно выполнить следующую команду

#> docker pull goloschain/golos:v0.16.4

Запуск контейнера

Подготовка

Чтобы блокчейн не хранить в контейнере, что повлечет за собой огромный расход дискового пространства, нужно подготовить директорию, для хранения блокчейна и конфигурационного файла.

Я лично создаю отдельного пользователя, для запуска контейнера и в домашней папке пользователя создаю нужные мне директории. Допустим мы все будет запускать от имени пользователя golosd. Не забудьте добавить пользователя в группу docker Понадобятся две папки. Одна рабочая под блокчейн и другая с конфигурационными файлами.

/home/golosd #> mkdir -p ~/home/blockchain
/home/golosd #> mkdir -p ~/home/p2p
/home/golosd #> mkdir -p ~/home/logs/p2p
/home/golosd #> mkdir -p ~/config

Из папки с исходниками (допустим это директория golos в вашей домашней папке) скопируйте конфигурационные файлы

/home/golosd #> cp ~/golos/documentation/seednodes ~/config/
/home/golosd #> cp ~/golos/contribution/config.ini ~/config/

И скопируйте снепшот из директории с исходниками в рабочую папку

/home/golosd #> cp ~/golos/programs/golosd/snapshot5392323.json ~/home/

Запуск.

Отредактируйте ~/config/config.ini на ваше усмотрение или используйте свой старый, если есть.

#> docker run \
       -it \
       -p 0.0.0.0:8090:8090 \
       -v /home/golosd/config/:/etc/golosd \
       -v /home/golosd/home/:/var/lib/golosd/ \
       -d --name golosd \
       -t gropox-17

-it — запускаем контейнер в интерактивном режиме
-p 127.0.0.1:8090:8090 — пробрасываем 8090 порт из контейнера наружу (если нужен доступ скриптами)
-v /home/golosd/config/:/etc/golosd — монтируем папку ~/config как /etc/golosd в контейнере
-v /home/golosd/home/:/var/lib/golosd/ — монтируем папку ~/home как /var/lib/golosd в контейнере
-d --name golosd — демонизируем контейнер и задаем имя контейнеру golosd
-t gropox-17 — указываем, какой образ использовать. В данном случае собранный вручную, или можно указать -t goloschain/golos:v0.16.4 для использования официального образа goloscore.

Собственно все. Проверить работоспособность можно командой

#> docker logs --tail 40 golosd

Остановить

#> docker stop golosd

Продолжить работу контейнера

#> docker start golosd

shared memory

По умолчанию нода положит shared_memory* файлы в директории /home/golosd/home/blockchain

В конфигурационном файле можно указать другое место, где ноде следует создать файл.

shared-file-dir=/shm

В свою очередь можно при создании контейнера смонтировать /dev/shm как /shm внутрь образа тем самым позволив контейнеру поместить shared_memory файлы в рамдиск. Что позволит ускорить синхронизацию ноды.

Если есть вопросы и замечания, пишите в комментариях. Постараюсь ответить-поправить. Я не администратор, возможно можно все сделать много проще и лучше. Пишите свою статью, я с удовольствием прочитаю, что бы перенять опыт.


Comments 14


Могу ошибатся, но на последних ubuntu`ах из докер-файла вряд ли соберется, нужны не старше 16.04
На последнем Минте текущая версия ноды не собралась ((
хотя Минт конечно не подходящий вариант для ноды )
пробовал чисто из спортивного интереса

06.03.2018 05:17
0

В докере неважно какая хост-система, т.к. сбока происходит в окружении, определённом в Dockerfile.

06.03.2018 05:32
0

В докере неважно какая хост-система, т.к. сбока происходит в окружении, определённом в Dockerfile.

то же так думал, однако не получилось
ядро то хоста используется, хоть какое окружение будь
ругалось на boost (в том числе)


да, речь о сборке, не о запуске из готового образа

06.03.2018 06:51
0

И каким образом влияет ядро на сборку?

06.03.2018 06:55
0

хз, честно не знаю, не вникал еще
может хэдеры(ядра) как то влияют? они ж то же при сборке используются, или нет?
может из за того что boost последний пытается установить

06.03.2018 07:12
0

У меня на компе ubuntu 17 с чем то и все собирается. И 16.5 и 16.4.

06.03.2018 08:09
0

это хорошо
буду рад ошибится(насчет невозможности сборки), надо еще пробовать..

06.03.2018 08:19
0

@ropox Напиши еще о требованиях к софту и железу. Традиционный вопрос.

06.03.2018 10:59
0

У многих делегатская нода работает пока еще на 8G RAM, место на диске требуется порядка 40G, лучше 60G SSD. Процессоры более менее современные, с поддержкой виртуализации, если запускать в докере.

К API ноде требования конечно выше. Если просто ванильную ноду установить и включить все плагины, то надо как миниум 64G RAM. Диска около 120G.

Можно взять исходники от сюда https://github.com/gropox/golos/tree/less_account_history и настроить как написано тут https://goldvoice.club/@ropox/filxtrovanie-accounthistory/

То я обхожусь менее 20 Гигами RAM и ни в чем себе не отказываю практически. У меня на серевере для себя с 48G RAM крутятся такая вот ноад, testnet, и нода BitShares. Плюс скрипты всякие. Правда места на диске осталось 7 Гиг из 120. Надо учесть, что образы докера отъедают место на диске.

06.03.2018 11:10
0

то есть впринципе если накатит на ноут убунту, то можно поднять делегетскую ноду? неплохо, надо попробовать

06.03.2018 11:24
0

Спасибо, @ropox. Добавил твой пост в вики.
Скажи, а ноду битшаровскую зачем держишь, для торгобота? Поднимал сам или по этой инструкции?

08.03.2018 04:28
0

Хорошая статья, рад буду видеть в своём блоге и телеграм чате баунти блогов и криптовалют:
https://t.me/Golos_bountyblog

06.03.2018 17:29
0

Спасибо! Отличная инструкция!
Только есть пара чисто грамматических ошибок:

docker logs --trail 40 golosd

docker logs --tail 40 golosd

docker stop golod

docker stop golosd

docker start golod

docker start golosd

06.03.2018 20:56
0

добрый день, подскажите,пож.
Как остановить голосование-ставки за голослото? я удалил в телеге бота, а голосование продолжилось.
что делать?

08.03.2018 09:49
0