Публичные API-ноды важная составляющая для блокчейна, особенно когда есть заинтересованность в развитии приложений (клиентов, ботов, скриптов, игр и пр.), которые часто повышают ценность всего проекта.
Ниже описан вариант установки API-ноды (с хранением истории операций за неделю). Для такой, оптимальный вариант - сервер с 16 Гб оперативной памяти и 80 Гб SSD накопителя.
Устанавливаем Docker (если его ещё нет).
Скачиваем большую часть блоков напрямую с сервера (чтобы не тратить более суток на их получение и лишнюю нагрузку делегатских seed-нод).
wget -P ~/home/blockchain --user=u237308-sub1 --password=3oOk8579Ff8ceKdy https://u237308-sub1.your-storagebox.de/block_log.index https://u237308-sub1.your-storagebox.de/block_log
wget -P ~/home/blockchain --user=u245960-sub1 --password=7USy9jS9GS2Yka3c https://u245960-sub1.your-storagebox.de/block_log.index https://u245960-sub1.your-storagebox.de/block_log
wget -P ~/home/blockchain --user=u223265-sub1 --password=tXjXAmNBcu8PmmbQ https://u223265-sub1.your-storagebox.de/block_log.index https://u223265-sub1.your-storagebox.de/block_log
wget -P ~/home/blockchain --user=u233417-sub1 --password=xCbthClwoWSVGIt1 https://u233417-sub1.your-storagebox.de/block_log.index https://u233417-sub1.your-storagebox.de/block_log
Добавляем конфиг ноды (указанные в нём 202800
блоков = неделя). Какие плагины нужны для ваших целей, можно уточнить в чате делегатов https://t.me/golos_witnesses
mkdir ~/config && echo 'webserver-thread-pool-size = 2webserver-http-endpoint = 0.0.0.0:8090webserver-ws-endpoint = 0.0.0.0:8091read-wait-micro = 500000max-read-wait-retries = 2write-wait-micro = 500000max-write-wait-retries = 3single-write-thread = trueenable-plugins-on-push-transaction = falseshared-file-size = 2Gmin-free-shared-file-size = 500Minc-shared-file-size = 2Gblock-num-check-free-size = 1000plugin = chain p2p json_rpc webserver network_broadcast_api witness database_api witness_api follow social_network tags operation_history account_history market_history account_by_key worker_api account_notesclear-votes-before-block = 4294967295history-start-block = 38000000comment-title-depth = 202800comment-body-depth = 202800comment-json-metadata-depth = 202800history-blocks = 202800replay-if-corrupted = trueskip-virtual-ops = falseenable-stale-production = falsemining-threads = 0[log.console_appender.stderr]stream=std_error[log.file_appender.p2p]filename=logs/p2p/p2p.log[logger.default]level=debugappenders=stderr[logger.p2p]level=noneappenders=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 \--name golosd golosblockchain/golos:latest
После загрузки докер-образа и реплея (который занимает несколько часов), с получением логов вида handle_block "Got 0 transactions on block 35071930 by ..."
нода готова к работе.
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_name
на свой субдомен/домен (не забыв привязать его в настройках DNS к нашему IP сервера). Бесплатные домены можно зарегистрировать напр. здесь.
server {listen 80;server_name test.lexai.host;location / {if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;return 204;}if ($request_method = 'POST') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';}if ($request_method = 'GET') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';}proxy_http_version 1.1;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_set_header X-Forwarded-Proto $scheme;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_set_header X-Forwarded-Proto $scheme;proxy_pass http://127.0.0.1:8091;proxy_read_timeout 3600;}}
Сохраняем изменения Ctrl+O
, подтверждаем Enter
, выходим Ctrl+X
.
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot -y
sudo apt-get update
sudo apt-get install python-certbot-nginx -y
После следующей команды потребуется ввести:
E-mail, на который будут отправляться уведомления о необходимости продления сертификата;
Согласиться с правилами сервиса введя A и Enter
;
Отказаться от рассылки N и Enter
;
Подтвердить добавление сертификатов к указанным доменам вводом Enter
;
Отказаться от редиректа, введя 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
Мы запустили публичную API-ноду, к которой можно подключаться как по адресу https://test.lexai.host
(RPC) так и wss://test.lexai.host/ws
(WebSockets).
Кроме того, если на API-ноду ожидается большое количество запросов, советуем обратить внимание на сервис Jussi, который позволяет перед нодой настроить кеш-слой на базе Redis и Nginx.
При получении письма на e-mail о необходимости обновить сертификат (раз в 90 дней), это можно сделать командой:
sudo certbot renew
Можно уточнить в чате делегатов https://t.me/golos_witnesses