Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
ropox
7 лет назад

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

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

2
30.650 GOLOS
На Golos с February 2017
Комментарии (14)
Сортировать по:
Сначала старые