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