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

Автор: @ropox

Для запуска понадобится естественно сам докер. Установить можно пользуясь инструкцией к примеру для 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 файлы в рамдиск. Что позволит ускорить синхронизацию ноды.

Источник

Примечание:

У многих делегатская нода работает пока еще на 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. Надо учесть, что образы докера отъедают место на диске.

results matching ""

    No results matching ""