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

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

Устанавливаем Docker (если его ещё нет).
Скачиваем большую часть блоков напрямую с сервера (чтобы не тратить более суток на их получение и лишнюю нагрузку делегатских seed-нод).
Германия 1
Финляндия 1
Германия 2
Финляндия 2
1
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
2
Copied!
1
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
2
Copied!
1
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
2
Copied!
1
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
2
Copied!
Добавляем конфиг ноды (указанные в нём 202800 блоков = неделя). Какие плагины нужны для ваших целей, можно уточнить в чате делегатов https://t.me/golos_witnesses
1
mkdir ~/config && echo 'webserver-thread-pool-size = 2
2
webserver-http-endpoint = 0.0.0.0:8090
3
webserver-ws-endpoint = 0.0.0.0:8091
4
read-wait-micro = 500000
5
max-read-wait-retries = 2
6
write-wait-micro = 500000
7
max-write-wait-retries = 3
8
single-write-thread = true
9
enable-plugins-on-push-transaction = false
10
shared-file-size = 2G
11
min-free-shared-file-size = 500M
12
inc-shared-file-size = 2G
13
block-num-check-free-size = 1000
14
plugin = chain p2p json_rpc webserver network_broadcast_api witness database_api witness_api
15
plugin = social_network follow tags operation_history account_history market_history
16
plugin = account_by_key worker_api private_message account_notes
17
clear-votes-before-block = 4294967295
18
history-start-block = 38000000
19
history-blocks = 202800
20
comment-title-depth = 202800
21
comment-body-depth = 202800
22
comment-json-metadata-depth = 202800
23
replay-if-corrupted = true
24
skip-virtual-ops = false
25
enable-stale-production = false
26
mining-threads = 0
27
[log.console_appender.stderr]
28
stream=std_error
29
[log.file_appender.p2p]
30
filename=logs/p2p/p2p.log
31
[logger.default]
32
level=debug
33
appenders=stderr
34
[logger.p2p]
35
level=none
36
appenders=stderr' | sudo tee -a ~/config/config.ini
Copied!
Запускаем ноду в докер-контейнере.
1
sudo docker run -it \
2
-p 127.0.0.1:8090:8090 \
3
-p 127.0.0.1:8091:8091 \
4
-v ~/config/config.ini:/etc/golosd/config.ini \
5
-v ~/home/blockchain:/var/lib/golosd/blockchain \
6
--log-opt max-size=500m \
7
--name golosd golosblockchain/golos:api-node
Copied!
После загрузки докер-образа и реплея (который занимает несколько часов), с получением логов вида handle_block "Got 0 transactions on block 35071930 by ..." нода готова к работе.

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

1
sudo apt-add-repository ppa:nginx/stable -y
Copied!
1
sudo apt-get update
Copied!
1
sudo apt-get install nginx -y
Copied!
Добавляем файл для своих настроек Nginx.
1
sudo nano /etc/nginx/sites-enabled/node.conf
Copied!
Копируем в него правила, предварительно заменив адрес server_name на свой субдомен/домен (не забыв привязать его в настройках DNS к нашему IP сервера). Бесплатные домены можно зарегистрировать напр. здесь.
1
server {
2
listen 80;
3
server_name test.lexai.host;
4
location / {
5
if ($request_method = 'OPTIONS') {
6
add_header 'Access-Control-Allow-Origin' '*';
7
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
8
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
9
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
10
add_header 'Access-Control-Max-Age' 1728000;
11
add_header 'Content-Type' 'text/plain; charset=utf-8';
12
add_header 'Content-Length' 0;
13
return 204;
14
}
15
if ($request_method = 'POST') {
16
add_header 'Access-Control-Allow-Origin' '*';
17
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
18
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
19
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
20
}
21
if ($request_method = 'GET') {
22
add_header 'Access-Control-Allow-Origin' '*';
23
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
24
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
25
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
26
}
27
proxy_http_version 1.1;
28
proxy_set_header Host $host;
29
proxy_set_header X-Real-IP $remote_addr;
30
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
31
proxy_set_header X-Forwarded-Proto $scheme;
32
proxy_pass http://127.0.0.1:8090;
33
}
34
location /ws {
35
proxy_http_version 1.1;
36
proxy_set_header Upgrade $http_upgrade;
37
proxy_set_header Connection "upgrade";
38
proxy_set_header Host $host;
39
proxy_set_header X-Real-IP $remote_addr;
40
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
41
proxy_set_header X-Forwarded-Proto $scheme;
42
proxy_pass http://127.0.0.1:8091;
43
proxy_read_timeout 3600;
44
}
45
}
Copied!
Сохраняем изменения Ctrl+O, подтверждаем Enter, выходим Ctrl+X.

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

1
sudo snap install core
Copied!
1
sudo snap refresh core
Copied!
1
sudo snap install --classic certbot
Copied!
1
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Copied!
После следующей команды потребуется ввести:
    1.
    E-mail, на который будут отправляться уведомления о необходимости продления сертификата;
    2.
    Согласиться с правилами сервиса введя A и Enter;
    3.
    Отказаться от рассылки N и Enter;
    4.
    Подтвердить добавление сертификатов к указанным доменам вводом Enter;
    5.
    Отказаться от редиректа, введя 1 и Enter.
1
sudo certbot --nginx
Copied!
Будут добавлены настройки в файл node.conf, которые можно перепроверить командой ниже и найти строки с пометкой # managed by Certbot в конце файла.
1
sudo nano /etc/nginx/sites-enabled/node.conf
Copied!
Выходим из файла Ctrl+X.
Перезапускаем Nginx.
1
service nginx restart
Copied!
Проверяем статус Nginx.
1
sudo systemctl status nginx.service
Copied!
Мы запустили публичную API-ноду, к которой можно подключаться как по адресу https://test.lexai.host (RPC) так и wss://test.lexai.host/ws (WebSockets). Кроме того, если на API-ноду ожидается большое количество запросов, советуем обратить внимание на сервис Jussi, который позволяет перед нодой настроить кеш-слой на базе Redis и Nginx.
При получении письма на e-mail о необходимости обновить сертификат (раз в 90 дней), это можно сделать командой:
1
sudo certbot renew
Copied!

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

Можно уточнить в чате делегатов https://t.me/golos_witnesses
Last modified 4mo ago