Инструкция по установке ноды VIZ + настройка её публичной для API

15.01.2019 09:19:00

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

Так как об этом вопросе задумываются в основном те, кто уже установил делегатские ноды (здесь подробный гайд), обойдёмся без скриншотов. Советую начать с 2 ядер + 8 Гб RAM (напр. можно стартануть с бонусом в 300$ от Google Cloud, которого хватит на 5-6 месяцев).

Для хранения файла "оперативных данных" блокчейна shared_memory.bin в случае с API-нодой эффективнее использовать RAM, да и SSD сбережёте от массы операций ввода-вывода. Минус только в том, что в случае перезагрузки сервера вам придется вновь делать реплей, но пока это довольно шустрая операция, так как shared-файл сейчас около 5 Гб.

Раздел /dev/shm занимает во многих Unix-подобных ОС только 50% от размера оперативной памяти, поэтому лучше сразу его изменить, заходим в файл

sudo nano /etc/fstab

Добавляем в конце строку (в зависимости от ресурсов сервера, напр. если у вас 8 Гб RAM, ставьте 7G)

none /dev/shm tmpfs defaults,size=7G 0 0

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

Перемонтируем раздел с новым размером

sudo mount -o remount /dev/shm

Проверяем

df -h | grep /dev/shm

Если Docker ещё не установлен, ставим и его

sudo apt-get update

sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

sudo apt-get update

sudo apt-get install docker-ce -y

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

Далее скачиваем список seed-нод

sudo wget -P ~/vizconfig https://raw.githubusercontent.com/VIZ-Blockchain/viz-cpp-node/master/share/vizd/seednodes && sudo truncate -s 0 ~/vizconfig/seednodes

И файлы block_log, пока разместил на Dropbox (чтобы не скачивать их часами от seed-нод)

sudo wget -P ~/vizhome/blockchain https://www.dropbox.com/s/t6unua73agivwzf/block_log.index https://www.dropbox.com/s/bve0bx1jzkl6mcv/block_log

Добавляем конфиг ноды (witness и private-key убрал, т.к. лучше не смешивать функции публичной API-ноды, с делегатской или seed) и нажимаем Enter

echo 'p2p-seed-node = seed.viz.lexa.host:2001
p2p-seed-node = 94.16.120.147:4248
p2p-seed-node = 172.104.132.57:9099
p2p-seed-node = 116.203.64.42:2001
p2p-seed-node = 167.86.66.169:2001
webserver-thread-pool-size = 2
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
shared-file-dir = /shm
shared-file-size = 2G
min-free-shared-file-size = 500M
inc-shared-file-size = 2G
block-num-check-free-size = 1000
plugin = chain p2p json_rpc webserver network_broadcast_api witness database_api private_message follow social_network tags account_by_key operation_history account_history block_info raw_block witness_api invite_api committee_api paid_subscription_api
clear-votes-before-block = 0
skip-virtual-ops = false
follow-max-feed-size = 500
enable-stale-production = false
required-participation = 0
[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 ~/vizconfig/config.ini

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

sudo docker run -it -p 127.0.0.1:8090:8090 -p 127.0.0.1:8091:8091 -v ~/vizconfig:/etc/vizd -v ~/vizhome/blockchain:/var/lib/vizd/blockchain -v /dev/shm:/shm --name vizd vizlex/viz:latest

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

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

В новом окне терминала начинаем установку

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 {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
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 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_cache_bypass $http_upgrade;
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

После следующей команды потребуется ввести: 1. Email, на который будут отправляться уведомления о необходимости продления сертификата; 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 командой

sudo systemctl restart nginx

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

sudo systemctl status nginx.service

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

При получении письма о необходимости обновить сертификат (раз в 3 месяца), это можно сделать и вручную, командой:

sudo certbot renew


3
17 Awards
1161.545683 SHARES
Show comment form
Comments

02.02.2019 16:30:15

Тест

02.02.2019 16:30:30

Тест

06.04.2019 12:43:42

При получении письма о необходимости обновить сертификат (раз в 3 месяца), его можно обновить вручную, командой:
sudo certbot renew