Golos Blockchain
  • База знаний Golos
  • ПОЛЬЗОВАТЕЛЯМ
    • Способы регистрации
    • Старт на Golos Блоги
      • Кошелёк
    • Вопросы и ответы
    • Полезные статьи
    • Обновления на Голосе
  • Разработчикам
    • Основы
      • Операции и их типы
      • Объекты и структуры
      • Состояние (стэйт) системы
      • Плагины и их API
      • Библиотеки для работы
      • Примеры кода
      • Формирование транзакций
      • Пропускная способность
      • Тестнет (ноды для тестов)
    • API-документация
      • API part 1
      • API part 2
      • API part 3
      • API part 4
      • Cli-wallet API
    • Обновления (HardForks)
      • HF18: Данные по установке
      • HF18: Новые возможности
      • HF18: Изменения в API
      • HF18: Изменения в cli_wallet
      • SF18.4: Новые функции
      • HF19: Новые возможности
      • HF20: Устранение бага
      • HF22: Новые возможности
      • HF23: Новые возможности
      • HF24: Новые возможности
      • HF25: Новые возможности
      • HF26: Новые возможности
      • HF27: Новые возможности
      • HF28: Новые возможности
    • Руководства (HowTo)
      • Скрипт регистрации аккаунтов
      • Операции на бирже
      • Как использовать мультиподписи
      • Как объединять операции в одну транзакцию
      • Пример запуска тестнета
  • Делегатам
    • Делегатство и роли нод
    • Установка ноды
      • Гайд для witness/seed ноды
      • Настройка для API-ноды
      • Настройка ноды для бирж
      • Настройка ElasticSearch
      • Нода с отладкой GDB
    • Медианные параметры
    • Скрипты для price feed
Powered by GitBook
On this page
  • Устанавливаем ноду
  • Устанавливаем Nginx
  • Устанавливаем Certbot
  • Есть вопросы?
  1. Делегатам
  2. Установка ноды

Настройка для API-ноды

PreviousГайд для witness/seed нодыNextНастройка ноды для бирж

Last updated 2 years ago

Публичные API-ноды важная составляющая для блокчейна, особенно когда есть заинтересованность в развитии приложений (сервисов, игр, ботов и пр.), которые часто повышают ценность всего проекта.

Ниже описан вариант установки API-ноды (с хранением истории операций за неделю). Для такой, оптимальный вариант - сервер с 16 Гб оперативной памяти и 100 Гб SSD накопителя, Ubuntu 18.04/20.04.

Устанавливаем ноду

Устанавливаем (если его ещё нет).

Скачиваем большую часть блоков напрямую (чтобы не тратить 2 суток на их получение и лишнюю нагрузку делегатских seed-нод).

Добавляем конфиг ноды (указанные в нём 202800 блоков = неделя). Какие плагины нужны для ваших целей, можно уточнить в чате делегатов

mkdir ~/config && echo 'webserver-thread-pool-size = 8
webserver-http-endpoint = 0.0.0.0:8090
webserver-ws-endpoint = 0.0.0.0:8091
read-wait-micro = 500000
max-read-wait-retries = 2
write-wait-micro = 500000
max-write-wait-retries = 3
single-write-thread = true
enable-plugins-on-push-transaction = false
block-num-check-free-size = 1200
plugin = chain p2p json_rpc webserver network_broadcast_api witness database_api witness_api
plugin = social_network follow tags operation_history account_history market_history
plugin = account_by_key worker_api private_message account_notes event_plugin account_relations
clear-votes-before-block = 4294967295
history-start-block = 38000000
history-blocks = 202800
history-blacklist-ops = producer_reward
history-blacklist-ops = pow2
store-evaluator-events = true
event-blocks = 28800
comment-title-depth = 202800
comment-body-depth = 202800
comment-json-metadata-depth = 202800
follow-max-feed-size = 100
skip-virtual-ops = false
enable-stale-production = false
[log.console_appender.stderr]
stream=std_error
[log.file_appender.p2p]
filename=logs/p2p/p2p.log
[logger.default]
level=debug
appenders=stderr
[logger.p2p]
level=none
appenders=stderr' | sudo tee -a ~/config/config.ini

Запускаем ноду в докер-контейнере.

sudo docker run -it \
    -p 127.0.0.1:8090:8090 \
    -p 127.0.0.1:8091:8091 \
    -v ~/config/config.ini:/etc/golosd/config.ini \
    -v ~/home/blockchain:/var/lib/golosd/blockchain \
    --log-opt max-size=500m \
    --name golosd golosblockchain/golos:api-node

После загрузки докер-образа и реплея (который занимает несколько часов), с получением логов вида handle_block "Got 0 transactions on block 35071930 by ..." нода готова к работе.

Устанавливаем Nginx

sudo apt-add-repository ppa:nginx/stable -y
sudo apt-get update
sudo apt-get install nginx -y

Добавляем файл для своих настроек Nginx.

sudo nano /etc/nginx/sites-enabled/node.conf
server {
listen 80;
server_name test.lexai.host;
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8090;
}
location /ws {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8091;
proxy_read_timeout 3600;
}
}

Сохраняем изменения Ctrl+O, подтверждаем Enter, выходим Ctrl+X.

Устанавливаем Certbot

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

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

  1. E-mail, на который будут отправляться уведомления о необходимости продления сертификата;

  2. Согласиться с правилами сервиса введя A и Enter;

  3. Отказаться от рассылки N и Enter;

  4. Подтвердить добавление сертификатов к указанным доменам вводом Enter;

  5. Отказаться от редиректа, введя 1 и Enter.

sudo certbot --nginx

Будут добавлены настройки в файл node.conf, которые можно перепроверить командой ниже и найти строки с пометкой # managed by Certbot в конце файла.

sudo nano /etc/nginx/sites-enabled/node.conf

Выходим из файла Ctrl+X.

Перезапускаем Nginx.

service nginx restart

Проверяем статус Nginx.

sudo systemctl status nginx.service

При получении письма на e-mail о необходимости обновить сертификат (раз в 90 дней), это можно сделать командой:

sudo certbot renew

Есть вопросы?

Копируем в него правила, предварительно заменив адрес server_name на свой субдомен/домен (не забыв привязать его в настройках DNS к нашему IP сервера). Бесплатные домены можно зарегистрировать напр. .

Мы запустили публичную API-ноду, к которой можно подключаться как по адресу https://test.lexai.host (RPC) так и wss://test.lexai.host/ws (WebSockets). Кроме того, если на API-ноду ожидается большое количество запросов, советуем обратить внимание на , который позволяет перед нодой настроить кеш-слой на базе Redis и Nginx.

Можно уточнить в чате делегатов

Docker
с сервера
https://t.me/golos_witnesses
здесь
сервис Jussi
https://t.me/golos_witnesses