Решение проблемы

Установка и настройка ноды bitcoin, ethereum, dash, litecoin, cardano


Мне периодически приходится устанавливать и настраивать ноды различных криптовалют. Делать это не сложно, но везде есть небольшие нюансы, на которые надо обращать внимание и вспомнать, как действовать. Сегодня я расскажу, как установить и запустить ноды популярных криптовалют — bitcoin, ethereum, dash, litecoin, cardano.

Содержание:

  • 1 Введение
  • 2 Системные требования для ноды криптовалюты
    • 2.1 Размер блокчейна
    • 2.2 Производительность дисков
    • 2.3 Процессор и память
    • 2.4 Операционная система
  • 3 Установка ноды Ethereum
  • 4 Установка ноды bitcoin
  • 5 Установка ноды DASH
  • 6 Установка ноды litecoin
  • 7 Установка ноды Cardano
  • 8 Установка Bitcoin Cash Full Node
  • 9 Установка NEO ноды
  • 10 Мониторинг работы нод
  • 11 Заключение

Введение

Установка и настройка ноды bitcoin, ethereum, dash, litecoin, cardano

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

Сама по себе установка ноды криптовалюты не представляет большой сложности. Нужно выполнить несколько простых команд в консоли сервера. Я поделюсь некоторыми своими мыслями на этот счет, так как много занимался этой темой и накоплен определенный опыт.

Самая большая проблема в этом вопросе — подходящее железо. Совсем бюджетные виртуалки ноды криптовалют не тянут. А такие валюты как эфир или биткоин еще и очень большой объем диска требуют — 300-600 гб. Нужен выделенный сервер нижнего или среднего ценового сегмента. Лучше всего брать в Европе, там дешевле. По моей ссылке будут сервера с русскоязычным саппортом. Если он вам не нужен, можете напрямую в hetzner брать или где-то еще, будет дешевле. Рейд контроллер там не обязателен, так как никакой уникальной информации нода хранить не будет. В случае выхода из строя она без проблем поднимается на новом железе.

Системные требования для ноды криптовалюты

Размер блокчейна

Обращаю сразу внимание на самое основное. Внимательно следите за размером блокчейна валюты, ноду которой вы будете настраивать. Покупайте сервер с большим запасом, так как блокчейн некоторых криптовалют может стремительно расти. Из недавнего примера — эфир. До нового года, если не ошибаюсь, ее блокчейн был менее 100 гб, а сейчас что-то в районе 500 гб. У меня все ноды посыпались из-за этого, пришлось срочно решать вопрос со свободным местом.

Производительность дисков

Далее нужно обращать внимание на производительность дисков. Нода криптовалюты — это огромное количество мелких, зачастую очень мелких файлов, счет которых может идти на миллионы. Далее я подробно на этом остановлюсь, когда будем cardano устанавливать. Сейчас дам универсальный совет. Если у вас обычные SATA диски, то один диск нормально тянет одну ноду. Если ставить 2-3 ноды криптовалюты, то будет плохо, со временем сервер может зависать из-за огромного iowait.

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

Процессор и память

Я поднимаю ноды в виртуальных машинах. Обычно придерживаюсь таких параметров. Для ноды Etherium выделяю 4 ядра процессора, 8 гигабайт памяти. Для bitcoin 2 ядра, 8 памяти. Для всех остальных 2 ядра, 4 гб памяти. Если память есть свободная, то лучше всем по 8 давать.

Операционная система

Я буду устанавливать криптовалютные ноды на Ubuntu 16. Хоть я и не очень люблю эту систему, но так проще всего. Обычно разработчики нод объявляют поддержку именно этой системы. Под нее всегда есть готовые сборки и скрипты установки. С другой версией линукс придется тратить больше времени.

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

Установка ноды Ethereum

Установка и настройка ноды bitcoin, ethereum, dash, litecoin, cardano
Обращаю внимание, что я все делаю под пользователем root. Лучше ноды запускать под отдельным пользователем, но мне не хочется перегружать статью информацией о том, как создавать пользователя, запускать от его имени приложение и т.д. Статья в любом случае не для новичков. Я даю общую информацию со ссылками. При необходимости, вы сами сможете все аккуратно настроить в боевом режиме.

Добавляем репозиторий ethereum

# add-apt-repository -y ppa:ethereum/ethereum

Обновляем список репозиториев

# apt update

Устанавливаем непосредственно ноду эфира.

# apt install ethereum

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

Запуск рабочей ноды ethereum:

# geth console

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

# geth --testnet console

Установка ноды Ethereum

В домашней директории пользователя, от которого вы запускаете ноду, будет создана папка .ethereum, в которой будет храниться вся информация по ноде, в том числе сам блокчейн. Имеет смысл создавать отдельного пользователя для этих целей.

Ноду можно запускать с параметрами, передавая их в виде ключей командной строки. Например так:

# geth --cache=4096 --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpccorsdomain "*" --rpcapi "web3,personal,admin,debug,db,net,eth,miner,rpc,txpool"

Описание ключей смотрите в официальной документации go-ethereum на гитхабе. Там же, кстати, и ссылка на оригинальное руководство по установке есть.

По-умолчанию, стандартная нода эфира работает прямо в консоли. Надо запускать ее как процесс в фоне. Можно написать service в systemd, но я не большой специалист в этом. Я пошел по самому простому и очевидному пути — запускать ноду в screen. Для того, чтобы она поднималась после загрузки сервера, добавляем в /etc/rc.local перед exit 0:

screen -dmS geth /usr/bin/geth --verbosity 3

Не забудьте указать нужные вам ключи запуска. Теперь проверим, как у нас работает нода, можно ли ей управлять через json rpc запросы. Допустим, мы запустили ноду со следующими параметрами:

# geth --cache=4096 --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpccorsdomain "*" --rpcapi "web3,personal,admin,debug,db,net,eth,miner,rpc,txpool"

В соседней консоли проверяем, все ли нормально поднялось:

# netstat -tulnp | grep geth

tcp6 0 0 :::30303 :::* LISTEN 1177/geth
tcp6 0 0 :::8545 :::* LISTEN 1177/geth
udp6 0 0 :::30303 :::* 1177/geth

Все в порядке. Отправляем тестовый запрос:

# curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' localhost:8545

В ответ должны получить что-то вроде этого:

{"jsonrpc":"2.0","id":67,"result":"Geth/v1.8.8-stable-2688dab4/linux-amd64/go1.10"}

Все работает. Что с этим делать дальше разбирайтесь сами или отдавайте сервер разработчикам. Они будут пилить очередное приложение или биржу для криптовалюты.

Установка ноды bitcoin

Продолжим устанавливать ноды криптовалют. Переходим к настройке ноды биткоин. Выполним немного подготовительных действий, чтобы потом сразу запустить ноду с нужными параметрами. Создаем в домашней директории папку для ноды:

# mkdir ~/.bitcoin

Рисуем примерно такой конфиг для нее:

# mcedit ~/.bitcoin/bitcoin.conf

printtoconsole=1
testnet=1
txindex=1
rpcuser=btcuser
rpcpassword=btcpass
rpcport=8332
datadir=/mnt/bitcoin

Приступаем к установке ноды. Подключаем репозиторий и обновляем список:

# apt-add-repository ppa:bitcoin/bitcoin

# apt update

Устанавливаем службу bitcoin ноды:

# apt install bitcoind

Запускаем ноду с указанным ранее конфигом в режиме службы:

# bitcoind -daemon

Здесь ничего костылить не надо для автоматического запуска ноды, как это было с ethereum. Биткоин нода из коробки умеет работать как служба. Проверим, запустилась ли она.

# netstat -tulnp | grep bitcoind

tcp 0 0 0.0.0.0:18333 0.0.0.0:* LISTEN 5405/bitcoind
tcp 0 0 127.0.0.1:8332 0.0.0.0:* LISTEN 5405/bitcoind
tcp6 0 0 :::18333 :::* LISTEN 5405/bitcoind
tcp6 0 0 ::1:8332 :::* LISTEN 5405/bitcoind

Порт 18333 слушает блокчейн. Это дефолтный параметр. 8332 — rpc порт для взаимодействия с нодой. Все то же самое, что  и с эфиром.

Если вам надо остановить ноду, выполните в консоли:

# bitcoin-cli stop

Команда сработает только, если у вас настроен rpc. Если нет, то выключить можно только так:

# pkill -9 -f bitcoind

Проверить работу bitcoin ноды можно, к примеру, следующей командой:

# bitcoin-cli getblockchaininfo

Установка ноды bitcoin

Добавим теперь ноду в автозагрузку. Для этого создадим запись в crontab.

# crontab -e

Добавляем строку:

@reboot bitcoind -daemon

На этом все. Биткоин нода готова к работе. Переходим к следующей криптовалюте.

Установка ноды DASH

Установка и настройка ноды bitcoin, ethereum, dash, litecoin, cardano

Установим ноду криптовалюты DASH. Сначала ставим необходимые зависимости:

# apt install dirmngr

Скачиваем последнюю версию ноды. Для этого идем по адресу https://github.com/dashpay/dash/releases/ и смотрим номер последнего релиза. После этого копируем последний релиз к себе. На момент написания статьи последней версией ноды была v0.12.2.3.

# wget https://github.com/dashpay/dash/releases/download/v0.12.2.3/dashcore-0.12.2.3-linux64.tar.gz --no-check-certificate

Распаковываем и копируем бинарники в системные папки.

# tar -zvxf dashcore-*

# mv *-[0-9].[0-9][0-9].*/bin/* /usr/bin

Создаем директорию для файлов ноды и рисуем для нее конфиг. Запускать будем с параметром testnet.

# mkdir ~/.dashcore

# cd ~/.dashcore && mcedit dash.conf
printtoconsole=1

rpcallowip=::/0
txindex=1
testnet=1
rpcuser=dashuser
rpcpassword=dashpassword
rpcport=8999

Запускаем ноду dash.

# dashd

Нода работает в консоли, как служба по-умолчанию не работает. Чтобы запускать ее в фоне, необходимо воспользоваться утилитой screen. Делать все нужно по аналогии с руководством ноды эфира, что описана в самом начале. Запускаем так:

# screen -dmS dash /usr/bin/dashd

Проверить состояние ноды можно командой:

# dash-cli mnsync status

Установка ноды DASH

На этом все, нода криптовалюты dash установлена и работает.

Установка ноды litecoin

Установка ноды для криптовалюты litecoin очень похожа на dash. Почти все шаги такие же, только версия ПО будет своя. Устанавливаем необходимые пакеты:

# apt install dirmngr

Дальше идем на сайт https://litecoin.org. В разделе DOWNLOADкопируем ссылку на Litecoin Core for Linux. Скачиваем исходники на сервер.

# wget https://download.litecoin.org/litecoin-0.16.0/linux/litecoin-0.16.0-x86_64-linux-gnu.tar.gz --no-check-certificate

Распаковываем архив и копируем бинарники в системные папки.

# tar -zvxf litecoin-*

# mv litecoin-0.16.0/bin/* /usr/bin

Создаем директорию для файлов ноды и рисуем для нее конфиг. Запускать будем с параметром testnet.

# mkdir ~/.litecoin 

# cd ~/.litecoin && mcedit litecoin.conf
printtoconsole=1

rpcallowip=::/0
txindex=1
testnet=1
rpcuser=ltcuser
rpcpassword=ltcpassword
rpcport=2339

Запускаем ноду litecoin:

# litecoind

Проверяем, что там запустилось:

# netstat -tulnp | grep litecoind

tcp 0 0 0.0.0.0:19335 0.0.0.0:* LISTEN 2973/litecoind
tcp6 0 0 :::2339 :::* LISTEN 2973/litecoind
tcp6 0 0 :::19335 :::* LISTEN 2973/litecoind

Проверим статус самой ноды litecoin

# litecoin-cli getblockchaininfo

Установка ноды litecoin

Нода работает в консоли, как служба по-умолчанию не работает. Чтобы запускать ее в фоне, необходимо воспользоваться утилитой screen. Делать все нужно по аналогии с руководством ноды эфира, что описана в самом начале. Запускаем так:

# screen -dmS litecoin /usr/bin/litecoind

Нода litecoin установлена и настроена. Переходим к следующей.

Установка ноды Cardano

Установка и настройка ноды bitcoin, ethereum, dash, litecoin, cardano

Займемся теперь настройкой ноды молодой криптовалюты Cardano. Не знаю, что в ней интересного, но запросы на ее настройку у меня были. Помучался я с ней прилично, так как руководство не очень понятное, по нему без плясок не ставится. Но в итоге я научился ее готовить. Официальное руководство по установке есть ни гитхабе. Я буду настраивать по нему, но с некоторыми изменениями. Команда на сборку будет другая, если делать по руководству, то не соберется.

Сборка будет идти через некий пакетный менеджер Nix, который лично я видел впервые. Его необходимо установить, причем под непривилегированным пользователем. От root установщик nix не работает. Будет ошибка. Добавим сначала пользователя cardano.

# useradd -d /home/cardano -s /bin/bash cardano

# passwd cardano
# adduser cardano sudo
# mkdir /home/cardano && chown cardano. /home/cardano

Заходим под новым пользователем и запускаем установщик nix.

# su cardano 

# cd ~
# curl https://nixos.org/nix/install | sh

Выполняем согласно указанию инсталлятора в консоли команду.

# . /home/cardano/.nix-profile/etc/profile.d/nix.sh

Создадим конфиг для nix и запишем туда пару параметров.

# sudo mkdir -p /etc/nix

# sudo mcedit /etc/nix/nix.conf

Добавляем следующие строки:

binary-caches = https://cache.nixos.org https://hydra.iohk.io

binary-cache-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=

Начинаем установку ноды Cardano. Клонируем себе репозиторий и переходим в него.

# git clone https://github.com/input-output-hk/cardano-sl.git

# cd cardano-sl

Переключаемся на master ветку.

# git checkout master

Запускаем сборку cardano node из исходников.

# nix-build -A cardano-sl --cores 0 --max-jobs 2 --no-build-output --out-link master

Генерируем скрипт для запуска ноды:

# nix-build -A connectScripts.mainnet.wallet -o connect-to-mainnet

Нода собрана и установлена. Запускаем:

# ./connect-to-mainnet

Установка ноды Cardano

Для автоматического запуска cardano node после загрузки системы, добавьте команду в /etc/rc.local перед командой exit.

screen -d -m -S cardano sudo -u cardano /home/cardano/cardano-sl/connect-to-mainnet

Проверить работы ноду можно, выполнив локально команду:

# curl https://127.0.0.1:8090/api/v1/node-info --cacert /home/cardano/cardano-sl/state-wallet-mainnet/tls/server/ca.crt --cert /home/cardano/cardano-sl/state-wallet-mainnet/tls/client/client.pem
{"data":{"syncProgress":{"quantity":3,"unit":"percent"},"blockchainHeight":{"quantity":1147025,"unit":"blocks"},"localBlockchainHeight":{"quantity":35183,"unit":"blocks"},"localTimeInformation":{"differenceFromNtpServer":{"quantity":-25400,"unit":"microseconds"}}},"status":"success","meta":{"pagination":{"totalPages":1,"page":1,"perPage":1,"totalEntries":1}}}

На этом настройка ноды окончена. Полную документацию по Cardano Wallet API читайте по ссылке.

В момент моей последней установки ноды cardano я столкнулся с тем, что через несколько дней работы нода скушала все свободные inodes и перестала работать. Дефолтного значения файловой системы ext4 в 1 000 000 ей показалось мало. Пришлось добавлять отдельный диск и в момент создания файловой системы указать на создание 10 000 000 inodes. Через пару месяцев работы нода использует 2 300 000 inodes. Имейте ввиду этот момент, если будете работать с нодой.

Установка Bitcoin Cash Full Node

Установка ноды форка биткоина — Bitcoin Cash абсолютно ничем не отличается от своего родоначальника. Нам просто нужно подключить другой репозиторий.

# add-apt-repository ppa:bitcoin-abc/ppa

Все остальное полностью идентично, до каждой команды. И запуск в режиме демона, и автозагрузка, и остановка, и проверка ноды выполняются теми же командами.

Установка NEO ноды

Установка и настройка ноды bitcoin, ethereum, dash, litecoin, cardano

Для работы Neo Node нужен .NET Core, который к моему удивлению есть под linux. Ставим его:

# wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb

# sudo dpkg -i packages-microsoft-prod.deb
# apt install apt-transport-https
# apt update
# apt install dotnet-sdk-2.1

Для других версий ссылку на deb пакет можно посмотреть на отдельной странице. В дополнение ставим несколько пакетов зависимостей ноды:

# apt install libleveldb-dev sqlite3 libsqlite3-dev libunwind8-dev

Качаем со страницы https://github.com/neo-project/neo-cli/releases последнюю версию под свою систему и распаковываем.

# cd ~

# wget https://github.com/neo-project/neo-cli/releases/download/v2.9.0/neo-cli-linux-x64.zip
# unzip neo-cli-linux-x64.zip

Запускаем Neo node:

# dotnet /root/neo-cli/neo-cli.dll /rpc

Откроется cli интерфейс. Можно ввести команду help и посмотреть актуальные команды. Как сервис из коробки эта нода работать не умеет, поэтому запускаем в screen и добавляем в /etc/rc.local для автозагрузки:

screen -d -m -S neo dotnet /root/neo-cli/neo-cli.dll /rpc

В своей работе neo node использует следующие порты:

Neo node install

Мониторинг работы нод

Сразу скажу, что все ноды у меня работали стабильно и не падали, кроме Cardano. Из-за нее пришлось озаботиться отдельным мониторингом нод. На помощь пришел zabbix. Для мониторинга я использовал стандартную проверку доступности сервиса по tcp порту. Заббикс просто обращается на указанный адрес и порт и проверяет, что служба принимает подключения.

Покажу на примере ноды Cardano. На Zabbix server я добавил элемент данных:

Итем для мониторинга ноды

Создал на основе этого элемента триггер:

Триггер для оповещения о падении ноды

Просто узнать, что нода упала мало. Нужно ее еще обратно поднять. Для этого на самой ноде я сделал простой скрипт перезапуска.

#!/bin/bash

sc=`pidof SCREEN`
kill $sc
screen -d -m -S cardano sudo -u cardano /home/cardano/cardano-sl/connect-to-mainnet

Скрипт находит pid сессии screen, в которой запущена нода и закрывает ее. После этого запускает ноду заново. Далее я создал отдельное действие в заббиксе, которое выполняло указанный скрипт на сервере в случае, если срабатывал триггер.

Новое действие в заббиксе на падение ноды Автоматический перезапуск ноды

Конкретно с Cardano этот способ успешно работал и падения ноды перестали замечать. Она успешно перезапускалась.

Заключение

Установка и настройка ноды bitcoin, ethereum, dash, litecoin, cardano
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

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

Сам софт для нод мне показался каким-то недоделанным что ли. Как-будто на коленке по-быстрому собрали. Никто, кроме биткоина, не умеет работать как служба. Приходится костылить на месте, чтобы нормально запускать и управлять нодами.


СМОТРИ ТАКЖЕ