March 10

Ноды

Навигация

Лекция 1. Погружение.

База знаний


Лекция 1. Погружение.

Смотреть видео лекции

Содержание

Блокчейн и ноды. Введение.

Blockchain - («цепочка блоков» от англ. Блок-блок и чейн-цепь) — технология хранения данных (реестра), которые распределены по множеству компьютеров (распределённый реестр), которые в свою очередь объединены в общей сети.

Это цифровая база данных информации, которая отражает все совершенные транзакции.

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

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

Нужны они для поддержки стабильной работы блокчейна. Отвечают за проверку и подтверждение транзакций и создание новых блоков. И обеспечении децентрализации.


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

Задачи нод:

  • Сохранять и распространять между узлами информацию о транзакциях и количестве средств в кошельках участников сети.
  • Контролировать выполнение правил сети (алгоритм консенсуса PoS, PoW и т. д.).
  • Проверка и валидация транзакций
  • Предоставление API и сетевых сервисов: Ноды блокчейна могут предоставлять API (Application Programming Interface) и сетевые сервисы для взаимодействия с блокчейном. Это может включать запросы на получение данных блокчейна, отправку транзакций, выполнение смарт-контрактов и другие операции.
  • Резервное копирование и восстановление: Ноды могут служить резервными копиями данных блокчейна, обеспечивая сохранность информации в случае сбоев или потери данных. Они могут быть использованы для восстановления блокчейна до последнего состояния или воссоздания утраченных данных.
  • Управление сетью и обновлениями

Процесс взаимодействия с проектом и установки ноды.

Рассматривая проекты, которые находятся на начальном этапе развития и ещё не запустились в мейннете, для нас доступны разные активности, за которые проект в будущем может вознаградить. И ноды - одна из таких активностей.

В контексте нод, привлекая валидаторов к участию в тестовой сети, проект достигает многих целей:

1. Они могут оттестировать и отладить свою систему в каких им нужно масштабах. Будь то 100 валидаторов или 50000.

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

3. Выстраивают и укрепляют сообщество вокруг проекта.

4. Децентрализация.

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

Во вторых, на привлечении валидаторов к стимулируемому тестнету, проект экономит деньги Инвесторов, на тех же самых серверах и обеспечивает эту децентрализацию. И сможет потратить их на маркетинг например. Ведь если нужно 2000-5000-10000 тысяч валидаторов (да еще и в разных частях мира), то это деньги.

Взаимодействие с проектом.

Допустим, мы нашли проект, который нас интересует.

Какие нам совершить шаги, чтобы поучаствовать в нём и заработать на этом?

1. Первое, что следует сделать, это подписаться на их социальные сети - твиттер, дискорд, телеграм, на почтовую рассылку и другие медиа ресурсы.

2. Часто проекты просят заполнить форму, что вы заинтересованы стать валидатором или тестером. Нужно её заполнить.

3. Активно участвуйте в обсуждениях проекта с другими участниками в дискорде и соц.сетях проекта.

Далее мы ждём момента, когда проект объявляет о начале стимулированного тестнета. И когда это произошло, следуем их инструкциям и рекомендациям. Если стимулированный тестнет уже идёт, то поинтересуйтесь у других участников проекта о возможности присоединиться и всех нюансах.

Когда можно присоединиться к проекту в качестве валидатора, устанавливаем ноду.

Процесс поднятия ноды состоит из следующих пунктов:

  1. Открываем гайд (инструкцию по установке). Официальный или не официальный.
  2. Смотрим спецификации требуемого оборудования для запуска ноды.
  3. Арендуем подходящий сервер.
  4. Настраиваем его.
  5. Запускаем ноду по гайду.
  6. Следим за проектом, за обновлениями, анонсами, общаемся с другими членами сообщества.
  7. Ждем окончания тестнета и наград.

Аренда сервера.

Арендовать сервер можно у любого хостера, который предоставляет в пользование выделенные (dedicated) или виртуальные (VPS) сервера, с требуемыми для вас характеристиками.

Как купить сервер. На примере Hetzner.

Вы можете приобрести сервер и в других дата-центрах, всё будет плюс-минус аналогично.

  1. Заходим на сайт https://www.hetzner.com/
  2. В правом верхнем углу нажимаем Login и выбираем Cloud.

Далее нажимаем REGISTER NOW и проходим процедуру регистрации.

Возможно понадобится пройти KYC или привязать карту оплаты (с неё спишется около 1€ и сразу же вернется обратно).

  1. Выбираем сервер с подходящими параметрами. Нажимаем New project - пишем любое имя. Создастся папка, где будет осуществляться управление нашими серверами.

Заходим в неё и нажимаем ADD SERVER.

Выбираем любую понравившуюся локацию. OS image - UBUNTU.

Выбираем нужную конфигурацию (например 2 CPU/ 8GB RAM/ 80 GB SSD) и нажимаем Create & Buy now.

После чего создастся сервер и на вашу почту придёт письмо с его IP и паролем.

Теперь вы готовы подключаться к вашему удалённому серверу.

Подключение к вашему удалённому серверу.

Если у вас Windows, то для подключение к удалённому серверу вы можете использовать такие программы как MobaXterm или Putty. Если у вас Linux или MacOS, вы можете использовать встроенный в операционную систему терминал. Либо использовать любую альтернативу, подходящую для вашей системы. Например "termius".

Для подключения можно использовать любую программу, которая вам нравится. Но так как для новичков наиболее удобная и простая программа это MobaXterm, то рассмотрим подключение к серверу на её примере.


MobaXterm - это инструмент предназначен для удаленного доступа к серверам и управления файлами, включающий в себя широкий набор функций, таких как терминал, X сервер, FTP клиент и многое другое. Даёт возможность выполнять Unix-команды посредством скриптов оболочки Bash.

Скачиваем и устанавливаем последнюю версию программы с официального сайта https://mobaxterm.mobatek.net/download.html

Запустите программу MobaXterm. В главном окне вы увидите несколько разделов: Sessions (Сеансы), Sessions with SSH (Сеансы с SSH), FTP, SFTP, TFTP, и многие другие. Нажмите на кнопку "Session" - "SSH", чтобы начать создать новый сеанс. Введите ip-адрес вашего сервера и имя пользователя (по желанию).

Также ваша сессия сохранится в левой части программы. В бесплатной версии доступно до 12 сохранённых сессий.

После того, как вы введете все необходимые данные, нажмите на кнопку "OK", чтобы начать подключение к серверу.

Вам предложат ввести логин и пароль. Если на предыдущем шаге вы сохранили username (root), то нужно будет ввести только пароль.

cочетание клавиш «Ctrl + V» в MobaXterm и других SSH-клиентах (например putty и других) НЕ РАБОТАЕТ для вставки текста. При вводе пароля отображаться ничего не будет.

Чтобы вставить скопированный текст в терминал, достаточно щёлкнуть правой клавишей мыши в поле ввода.

После ввода логина и пароля откроется доступ к вашему серверу. В правой части находится окно терминала, для ввода команд.

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

Введение в терминал и возможности командной строки.

Терминал представляет собой текстовый интерфейс, который позволяет пользователям взаимодействовать с операционной системой Linux с помощью команд.

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

Каждая команда имеет свой синтаксис и опции, доступ к которым можно получить через встроенные страницы руководства (команда man) или добавив к команде ключ --help.

Навигация по файловой системе осуществляется с помощью таких команд, как cd (change directory) для перемещения в различные каталоги, ls для просмотра списка файлов и каталогов в текущем местоположении и pwd для отображения текущего рабочего каталога.

Командная строка позволяет создавать, удалять, копировать, перемещать и переименовывать файлы и каталоги с помощью таких команд, как mkdir (создать каталог), rm (удалить), cp (копировать), mv (переместить) и rename.

Командная строка поддерживает различные текстовые редакторы, включая nano, vi. Эти редакторы позволяют создавать и изменять текстовые файлы непосредственно из командной строки.

В общем, всё что вы будете делать на сервере, будет происходить при взаимодействии с этим текстовым интерфейсом.

Взаимодействие с терминалом. С чего начать?

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

Первый вход на сервер

  1. При первом входе на сервер рекомендуем сменить пароль. Это делается командой:
passwd

Задаём новый пароль и подтверждаем его.

  1. И обновим нашу систему.
sudo apt update && sudo apt upgrade -y
  1. Установим необходимые пакеты.
sudo apt-get install wget jq curl mc tmux unzip git make ncdu gcc clang chrony pkg-config libssl-dev libclang-dev build-essential lz4 htop -y
  1. Настоятельно рекомендуем настроить доступ к серверу с помощью SSH-ключа и отключить доступ по паролю. Это более безопасно и удобно.

Базовые команды

Навигация по файловой системе

С помощью нескольких простых команд мы можем с легкостью ориентироваться в файловой системе Linux.

Эти команды cd, ls, pwd cd используется для изменения каталогов,

ls - для просмотра содержимого каталога,

pwd - для проверки текущего местоположения.

Вводим команду pwd в терминале, нажимаем Enter и она отобразит полный путь к каталогу в котором вы сейчас находитесь.

    1. Начнём с команды pwd - Present Working Directory:

Вводим команду pwd в терминале, нажимаем Enter и она отобразит полный путь к каталогу в котором вы сейчас находитесь.

2. ls - Отображение файлов и каталогов:

Команда ls позволяет перечислить файлы и каталоги в текущем местоположении.

Когда вы набираете ls и нажимаете Enter, вы увидите простой список имен файлов и каталогов в текущем каталоге.

Для получения более подробного списка вы можете использовать дополнительные опции:

ls -l: Предоставляет список в длинном формате, включающий разрешения на файлы, права собственности, размер и дату модификации.

ls -la: Показывает подробный список, включая скрытые файлы (файлы, начинающиеся с точки).

cd (Changing Directories):

Команда cd - это наш главный инструмент для перемещения по файловой системе.

Она позволяет нам изменить текущий рабочий каталог.

Например, если вы хотите перейти в папку "Documents ", которая находится в текущей папке, просто введите cd Documents, и вы окажетесь в каталоге "Documents ".

‘cd folder’ Перемещает вас в подкаталог под названием "folder" в текущем каталоге.

‘cd ..’ перемещает вас на один уровень вверх в родительский каталог.

‘cd ../..’ Перемещает вас на два уровня вверх, в родительский каталог родительского каталога.

‘cd /’ Перемещает ваш каталог в корень файловой системы.

cd /path/to/directory: Изменяет ваш каталог на определенное место, указанное полным путем.

Например, вы находитесь в папке /root/myfiles/documents. Вам нужно попасть в папку music, которая находится в папке /root/myfiles/.

Вы можете сделать это двумя способами.

1. Сначала переместиться в папку /root/myfiles используя команду “cd ..”, а затем ‘cd music’.

Либо переместится сразу, используя полный путь до папки ‘cd /root/ myfiles/music’

Работа с файлами и директориями

Чтобы создать каталог, откройте терминал и введите следующую команду, заменив "new_folder" на нужное вам имя:

mkdir new_folder

Чтобы создать несколько папок, просто перечислите их через пробел:

mkdir folder1 folder2 folder3

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

mv new_folder folder4

Для удаления каталога используйте команду rmdir. Обратите внимание, что для работы этой команды каталог должен быть пустым:

rmdir folder4

Чтобы удалить каталог, содержащий в себе другие каталоги и файлы, нужно использовать рекурсивное удаление, добавив к нашей команде флаг -rf (будьте осторожны, это действие необратимо):

rm -rf folder3

Для копирования каталогов и их содержимого используйте команду cp с опцией -r.

cp -r folder1 folder1reserve

Чтобы переместить каталог в другое место, используйте команду mv. Эта команда также может быть использована для переименования каталогов:

mv /root/folder1reserve/ /root/myfiles/folder1reserve

mv folder1 new_folder_1

Просмотр и редактирование файлов:

Чтобы создать файл, вы можете использовать команду touch.

Откройте терминал и введите: touch filename.txt

Эта команда создаст пустой файл с именем "filename.txt" в вашем текущем каталоге.

Чтобы сделать копию файла, вы можете использовать команду cp. Например, чтобы скопировать файл "filename.txt" в файл с названием "newfile.txt", выполните команду:

cp filename.txt newfile.txt

Чтобы переименовать файл, можно использовать команду mv. Например, чтобы переименовать файл "filename.txt" в "newname.txt", выполните:

mv filename.txt newname.txt

Чтобы удалить файл, можно воспользоваться командой rm.

rm newname.txt Также можно использовать все эти команды даже если файл находится не в текущей директории. Для этого нужно прописать полный путь до файла.

База знаний

Где арендовать сервер?

  1. Hetzner https://www.hetzner.com/ - Немецкий хостинг c отличным соотношением цены и производительности. Хорошие цены как на дедики так и на VPS.
  2. Сontabo https://contabo.com/ – неплохой сервис с недорогими VPS.
  3. Vultr https://www.vultr.com/ - хороший, удобный сервис. Но довольно дорогой. Почасовая оплата и можно платить криптой, что достаточно удобно, если нужно быстро и не на длительное время запустить сервер.
  4. Interserver https://www.interserver.net/ хороший зарубежный сервис с хорошими ценами на дедики. Есть возможность оплаты криптой.
  5. DigitalOcean https://www.digitalocean.com/ – американский надёжный сервис, как и у Vultr почасовая тарификация. Цены не дешевые.
  6. ikoula (https://www.ikoula.com/) – французский хостер. Хорошие цены на дедики.
  7. OVH (https://www.ovhcloud.com/) - ещё один французский хостер, классом повыше. Хорошие сервера. Ценник не из дешевых.
  8. Mevspace https://mevspace.com/ - Польский хостер. Есть оплата криптой. Цены на дедики хорошие, на vps высоковатые.

Если варианты выше вам не подходят (проблемы с регистрацией или оплатой), то вот некоторые хостеры, которые принимают ру карты для оплаты:

Kingservers https://kingservers.com/netherlands-vps-vds/ - зарегистрирована в РФ. Хорошие цены на VPS

Интернет хостинг центр https://www.ihc.ru/ - Принимают карты всех стран, вебмани, юмани, киви.

Spacecore https://spacecore.pro/ru/ - ресселлер хетцнера и контабо. Не плохой вариант для тех, у кого хецнер и контабо недоступны.

PQ.hosting https://pq.hosting - Хорошие цены на VPS.

Также, поиск VPS можно осуществить на сайте-агрегаторе https://vps.today

Как создать пользователя в Ubuntu?

1. Чтобы создать нового пользователя используйте команду adduser.

Её синтаксис следующий:

useradd ОПЦИИ ИМЯ_ПОЛЬЗОВАТЕЛЯ
список всех доступных опций можно посмотреть введя: useradd --help

2. Создадим нового пользователя с привилегиями sudo.

adduser ИМЯ_ПОЛЬЗОВАТЕЛЯ
#например adduser ivan

Вам будет предложено создать и проверить пароль пользователя.

Далее будет предложено ввести сведения. Можете оставить всё по умолчанию и ничего не вводить. Просто нажимайте ENTER 5 раз и подтвердите ввод в конце Y, enter. Пользователь создастся.

Добавим пользователя в группу sudo, воспользуясь командой usermod:

usermod -aG sudo ivan

3. Проверим доступ.

su -l ivan

Вы увидите, что вместо пользователя root теперь находится ivan.

4. Проверим сможем ли мы запускать под этим пользователем команды с привилегиями суперпользователя.

Для начала попробуем без "sudo"

ls -la /root

Как видите, доступ без привилегий суперпользователя к данному каталогу закрыт.

Добавим "sudo". И в первый раз у вас попросят ввести пароль.

sudo ls -la /root

!Внимание. Пароль вам нужно вводить от пользователя ivan, который мы задавали при создании этого пользователя. А не от root.

Как видите теперь у пользователя ivan есть привилегии суперпользователя.

5. Для ускорения процесса, который мы с вами проделали, вы можете использовать следующую конструкцию.

Введите следующее одной командой(имя измените):

USER_NAME=ivan2 && \\
adduser $USER_NAME && usermod -aG sudo $USER_NAME && su -l $USER_NAME

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

Терминальный мультиплексор Tmux

Tmux - это терминальный мультиплексор. Он позволяет создавать несколько постоянных терминалов в рамках одного входа в систему.

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

Даже если соединение будет разорвано, то после повторного подключения можно вернуться в сохраненные сессии и продолжить работу с того, на чем остановились. Работу с tmux можно сравнить с работой со "вкладками". и В рамках одной сессии мы можем переключаться между ними.

Установка Tmux

sudo apt-get install tmux -y ​

Создание новой сессии:

tmux new -s имя_сессии ​

Создадим новую сессию под названием test1.

Copytmux new -s test1

​Сессия создастся и вы сразу в нее переместитесь. Здесь вы можете запускать все нужные вам процессы.

Чтобы выйти из сессии (но не закрывать её) нужно использовать сочетание клавиш Ctrl+b d (нажимаем «Ctrl+B», отпускаем, нажимаем «d»)

Вы вернётесь в своё "главное окно", при этом все запущенные в этой сессии процессы будут активны.

Вернуться в сессию:

tmux attach -t test1 ​

Давайте создадим еще несколько tmux-сессий:

tmux new -s test2

tmux new -s test3

tmux new -s test4

​Посмотреть рабочие сессии:

tmux ls

Вернёмся в сессию test1:

tmux attach -t test1

​С помощью сочетаний клавиш мы можем проводить различные манипуляции с вкладками наших сессий.

для активации сочетаний клавиш нужно нажать Ctrl+B, отпустить, а потом нажать нужную клавишу.

Список самых востребованных сочетений клавиш:

Ctrl+b d - отключится от текущей сессии;

Ctrl+b c - создать новое окно;

Ctrl+b w - выбрать окно из списка;

Ctrl+b 0-9 - открыть окно по его номеру;

Ctrl+b , - переименовать текущее окно;

Ctrl+b % - разделить текущую панель по вертикали;

Ctrl+b " - разделить текущую панель по горизонтали;

Ctrl+b стрелка - перейти на панель, находящуюся в стороне, куда указывает стрелка;

Ctrl+b Ctrl+стрелка - изменить размер текущей панели;

Ctrl+b o - перейти на следующую панель;

Ctrl+b ; - переключаться между текущей и предыдущей панелью;

Ctrl+b x - закрыть текущую панель;

​Например, разделим панель по вертикали «Ctrl+b %»

Теперь разделим панель по горизонтали «Ctrl+b “»

И так далее.

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

Удаление сессии:

tmux kill-session -t имя_сессии

Планировщик Cron

Для чего нужен крон?

Крон используют для автоматизации некоторых задач в Linux с помощью скриптов. Эта программа будет запускать определённый скрипт или программу в заданное вами время, без вашего участия. Это очень удобно.

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

Давайте разбираться как это делать.

  1. Почти все дистрибутивы Linux имеют ту или иную форму cron, установленную по умолчанию. Но если по каким-то причинам его нет, то установим его.
sudo apt update
sudo apt install cron
sudo systemctl enable cron
  1. Чтобы запланировать задачу, вам нужно открыть файл crontab для редактирования и добавить задачу, используя выражения cron.
sudo crontab -e

Выбираем 1.

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

Синтаксис выражений cron состоит из двух элементов: время и команда для запуска.

Допустим у нас есть скрипт my_scrypt_test.sh, который лежит в папке /root/scripts/my_scrypt_test.sh и мы хотим, чтобы он выполнялся каждую минуту.

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

* * * * /root/scripts/my_scrypt_test.sh

где- это время когда наш скрипт будет выполнятся, а "/root/scripts/my_scrypt_test.sh" это команда для запуска.

  1. Давайте поэкспериментируем, чтобы понять как работает этот таймер.
2  /root/scripts/my_scrypt_test.sh
#Скрипт будет выполняться каждый час, во вторую минуту.
2 0/root/scripts/my_scrypt_test.sh
#Скрипт будет выполняться во вторую минуту нулевого часа (т.е. в 00:02 каждый день)
2 0 18 /root/scripts/my_scrypt_test.sh
#Скрипт будет выполняться во вторую минуту нулевого часа 18 числа каждого месяца.
2 0 * 1 * /root/scripts/my_scrypt_test.sh
#Скрипт будет выполняться в ноль часов две минуты первого месяца года.
30 19 3 /root/scripts/my_scrypt_test.sh
#Скрипт будет выполняться каждую среду в 19:30.

Также мы можем с помощью специальных символов усовершенствовать время. Например указать интервал, с которым нужно запускать скрипт, например, раз в 15 минут. Используя "/".

*/15 * * * * /root/scripts/my_scrypt_test.sh

Или в определённом промежутке времени "-"

0 13-18  * * * /root/scripts/my_scrypt_test.sh
#Скрипт будет выполняться каждый час, с 13 до 18 часов.

Либо использовать разделитель "," чтобы повторить несколько раз.

2,18,31 17 * * * /root/scripts/my_scrypt_test.sh
#Скрипт будет выполняться в 17:02, 17:18 и 17:31
  1. Есть очень удобный сайт-помощник, для проверки ваших выражений.

https://crontab.guru/#0_10_*_*_*

Вбиваете туда ваше выражение и сразу видите результат, а не гадаете правильно ли вы создали выражение.

Проверим , правильно мы составили наше выражение из примера в пункте 3 .

30 19 * * 3 /root/scripts/my_scrypt_test.sh
#Скрипт будет выполняться каждую среду в 19:30.

Всё верно!

Чтобы сохранить изменения нажимаете ctrl+X, Y, enter. После этого вы увидите сообщение об успешном добавлении вашей задачи.

После этого cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя, причём добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли. Поэтому будьте бдительны. Если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя.

Быстрая настройка UFW в Ubuntu

UFW (Uncomplicated Firewall) - интерфейс iptables, упрощающий настройку брандмауэра. Он прост для понимания. UFW есть по умолчанию в Ubuntu. Но если по каким-либо причинам он удалён, вы можете установить его с помощью команды:

sudo apt install ufw ​

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

Copysudo ufw status verbose ​

Вы получите сообщение, что UFW отключен Status: inactive

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

sudo ufw default deny incoming

sudo ufw default allow outgoing

Настроим UFW.

Прежде всего мы должны разрешить входящие соединения ssh. Иначе, при активации фаервола мы потеряем доступ к серверу. По умолчению номер порта ssh на серверах 22.

sudo ufw allow 22

#если вы меняли в настройках порт ssh на другой, то замените 22 на своё значение.

Активация UFW.

sudo ufw enable ​

Появится предупреждение о том, что существующие соединения SSH могут разорваться. Но так как мы добавили правило, разрешающее соединение по ssh, то можем продолжить.Введите y и нажмите ENTER.

Проверим статус:

sudo ufw status verbose

Вы получите сообщение, что UFW включен, а также увидите все добавленые вами правила.

Добавление правил.

Для добавление новых правил, используйте команду.

sudo ufw allow порт ​

Например, нам нужно открыть 8080 порт:

sudo ufw allow 8080 ​

Чтобы запретить соединение:

sudo ufw deny 8080

​Если вы захотите запретить все подключения с определенного IP-адреса xx.xxx.xxx.xxx, вы можете использовать следующую команду:

sudo ufw deny from xx.xxx.xxx.xxx

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

Это может произойти из-за особенностей ПО, которое вы устанавливали (например ноды).

Чтобы этого избежать добавmте следующие правила:

sudo ufw deny out from any to 10.0.0.0/8 && sudo ufw deny out from any to 172.16.0.0/12 && sudo ufw deny out from any to 192.168.0.0/16 && sudo ufw deny out from any to 100.64.0.0/10 && sudo ufw deny out from any to 198.18.0.0/15 && sudo ufw deny out from any to 169.254.0.0/16

Также при добавлении правил мы можем использовать диапазоны портов

sudo ufw allow 8000:8010/tcp

sudo ufw allow 8000:8010/udp

sudo ufw allow 8050:8060/udp

​Когда вы указываете диапазоны портов , вы должны указать протокол (tcp или udp), к которому будут применяться эти правила.

Протокол (tcp или udp) можно указывать и при добавлении одного порта (напр, ufw allow 8080/tcp). Но если протокол не указать, оба протокола будут разрешены, что подходит для большинства случаев.

Удаление правил UFW.

Чтобы удалить правило, используется команда delete. Удалим правило, которое добавляли ранее:

sudo ufw delete allow 8080 ​

Отключение UFW.

Если вы хотите полностью отключить UFW:

sudo ufw disable ​

Сброс настроек до состояния по умолчанию.

Copysudo ufw reset

Команды UFW

ufw status - состояние фаервола (active, inactive)

ufw allow - добавить разрешающее правило;

ufw deny - добавить запрещающее правило;

ufw enable - включить фаерволл и добавить его в автозагрузку;

ufw disable - отключить фаерволл и удалить его из автозагрузки;

ufw reload - перезагрузить файервол;

ufw reset - сбросить все настройки до состояния по умолчанию;

ufw insert - вставить правило;

ufw delete - удалить правило;

ufw default - задать политику по умолчанию.

Быстрая диагностика дисков nvme в Ubuntu

Чтобы быстро проверить диски на износ, установим пакет nvme-cli:

apt install nvme-cli ​

nvme-cli - инструмент для управления твердотельными накопителями NVMe.Вызов справки со всеми доступными опциями:

nvme help ​

Чтобы вывести список всех подключенных твердотельных накопителей NVMe, воспользуемся командой:

nvme list

В первом столбце мы видим имя наших блочных устройств(дисков). В данном случае на сервере установлено два диска /dev/nvme0n1 и /dev/nvme1n1

Теперь, чтобы вывести данные о состоянии, температуре, степени износа и других, воспользуемся командой:

nvme smart-log /dev/nvme0n1

Наиболее важные параметры на которые нужно обратить внимание - это available_spare, available_spare_threshold, percentage_used.

Значение available_spare_threshold показывает минимальный доступный процент запасных ячеек памяти (когда рабочая ячейка памяти дает сбой, то она помечается как BAD и вместо нее используется запасная, а Available_spare уменьшается)

Значение параметра available_spare уменьшается со 100% до 0%. И когда это значение будет приближаться к 10%, тогда диск в любой момент может дать сбой и сломаться.

Параметр percentage_used - меняется от 0 до 255. Как быстро он будет увеличиваться зависит от TBW диска и от того как часто и много вы пишите. Производитель гарантирует некоторый объем записи и рекомендует менять диск при percentage_used 99-100%. Как показывает практика, даже при percentage_used=200 диск может работать хорошо. Поэтому наиболее важны показатели available_spare и available_spare_threshold.

Для проверки скорости чтения и записи дисков используйте следующую команду:

curl -sL yabs.sh | bash -s — -i

Docker. Шпаргалка с основными базовыми командами на Linux

Установка Docker одной командой:

sudo apt-get update && sudo apt install jq && sudo apt install apt-transport-https ca-certificates curl software-properties-common -y && 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 focal stable" && sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin && sudo apt-get install docker-compose-plugin ​

Работа с контейнерами:

Запуск контейнера:

docker run <имя_образа> ​

docker run имеет множество дополнительных флагов, которые позволяют настраивать и управлять контейнером при его запуске. Вот несколько распространенных флагов:

d, --detach: Запуск контейнера в фоновом режиме (detached mode). Контейнер будет работать в фоновом режиме, и вывод приложения будет перенаправлен в журналы контейнера.

-name: Задание имени контейнера. Например, --name mycontainer задает имя контейнера как mycontainer.

--restart: Определение политики перезапуска контейнера. Например, --restart always указывает Docker автоматически перезапускать контейнер при его аварийном завершении или перезапуске системы.

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

Например:

docker run --name mycontainer --restart always -d -it <имя_образа>

​Эта команда создаст и запустит контейнер, который будет иметь имя "mycontainer", будет автоматически перезапускаться, работать в фоновом режиме и будет доступен для взаимодействия через командную строку в интерактивном режиме.

<имя_образа> должно быть заменено на фактическое имя образа, с которым вы работаете.

Существует множество других флагов, которые могут быть полезны в различных сценариях. Для получения полного списка флагов выполните команду docker run --help для вывода справки.

Остановка контейнера: docker stop <идентификатор_контейнера>

Перезапуск контейнера: docker restart <идентификатор_контейнера>

Просмотр работающих контейнеров: docker ps ​

Просмотр всех контейнеров (включая остановленные): docker ps -a

Удаление контейнера: docker rm <идентификатор_контейнера> ​

Переименование контейнера: docker rename <старое_имя_контейнера> <новое_имя_контейнера> ​

#пример docker rename mycontainer newcontainer Эта команда переименует контейнер с именем "mycontainer" на "newcontainer". После выполнения команды, контейнер будет доступен по новому имени. Переименование контейнера не меняет его идентификатор (ID) или любые другие характеристики контейнера, кроме имени.

Вход в контейнер (в интерактивном режиме): docker exec -it <идентификатор_контейнера> <команда> ​JavaScript

Просмотр логов контейнера: docker logs <идентификатор_контейнера>

​Команда выводит логи контейнера. Вы увидите вывод приложения или сервиса, работающего внутри контейнера.

Работа с образами:

Загрузка образа из Docker Hub: docker pull <имя_образа> ​JavaScript

Просмотр загруженных образов: docker images ​JavaScript

Удаление образа: docker rmi <идентификатор_образа> ​JavaScript

Создание образа из контейнера: docker commit <идентификатор_контейнера> <новое_имя_образа>

Мониторинг Cosmos нод.

Для того, чтобы получать мониторить ноды и получать сообщения в телеграм или дискорд в случае неполадок, нам нужно настроить несколько инструментов.

Telegram-bot и канал для уведомлений

Telegram-bot

1. Чтобы создать Telegram-бота для уведомлений, введите в поле поиска @BotFather и выберите бот. Запустите его.

2. Пишем ему /start и получаем список всех его команд. Далее нужно ввести команду /newbot

3. Бот просит придумать имя для нашего нового бота. Можете написать что хотите. Например "My alert bot"

4. Далее вас попросят выбрать username для вашего бота. Он должен заканчиваться на «bot». Например myAlert124151bot

5. В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты. Это будет выглядеть примерно так “23462346:AAHDshdsbjh132JSD87fsdhnk”

Создание канала для оповещений.

  1. Создайте канал в телеграме для ваших будущих оповещений. Например alarm.
  2. Выберите "ЧАСТНЫЙ".
  1. Далее добавим нашего бота в качестве администратора к нам в канал
  1. Теперь нам нужно узнать ID нашего канала. С помощью бота @username_to_id_bot узнаем ID.
  1. Нажмите Channel и выберите свой канал. Бот вернет вам ваш чат id. Минус тоже не забудьте скопировать - это часть id!

На этом моменте у вас должен быть id вашего бота и id вашего чата, в который вы добавили бота.

Tenderduty

Tenderduty предназначен для мониторинга сетей на Tendermint. Ссылка на репозиторий.

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

Установить мы можем его на отдельном сервере. Подойдёт даже самая недорогая VPSка.

  • Настроим наш сервер. sudo apt update && sudo apt upgrade -y sudo apt-get install wget jq curl mc tmux unzip git make ncdu gcc clang chrony pkg-config libssl-dev libclang-dev build-essential lz4 htop -y apt update && \\ apt install apt-transport-https ca-certificates curl software-properties-common -y && \\ curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo apt-key add - && \\ add-apt-repository "deb [arch=amd64] <https://download.docker.com/linux/ubuntu> focal stable" && \\ apt update && \\ apt-cache policy docker-ce && \\ sudo apt install docker-ce -y && \\ docker --version
    1. Обновляем систему.
    1. Устанавливаем необходимые пакеты.
    1. Установим Docker одной командой:
  • Установка Tenderduty mkdir tenderduty cd tenderduty docker run --rm [ghcr.io/blockpane/tenderduty:latest](<http://ghcr.io/blockpane/tenderduty:latest>) -example-config >config.yml nano $HOME/tenderduty/config.yml Здесь нам нужно настроить несколько параметров. Первое - это оповещения в телеграм/дискорд. Второе - данные нашей ноды, которую мы будем отслеживать. docker run -d --name tenderduty -p "8888:8888" -p "28686:28686" --restart unless-stopped -v $(pwd)/config.yml:/var/lib/tenderduty/config.yml [ghcr.io/blockpane/tenderduty:latest](<http://ghcr.io/blockpane/tenderduty:latest>) Посмотреть логи: docker logs -f tenderduty
  • Создадим папку и перейдём в нее
  • Скачиваем конфиг
  • Открываем конфиг и настраиваем нужные параметры
    • Оповещения в телеграм/дискорд Для включения оповещений в дискорд, в соответствующих секциях, меняем enabled: no на enabled: yes и вставляем наш вебхук полученынй в дискорде. Для оповещений в телеграм, меняем enabled: no на enabled: yes. И вставляем Api-токен нашего бота, который мы получили ранее у @BotFather. Также вставляем и id нашего канала, куда будем получать сообщения.
    • Данные нашей ноды Далее листаем в низ, до блока chains: Меняем здесь: 1. Название нашей сети. 2. chain-id. 3. Адрес валидатора, который хотим отслеживать в этой сети. Далее листаем вниз до блока nodes и в url вписываем адреса публичных RPC, либо, если вы открывали свою, то адрес своей RPC. Если же вы поднимаете Tenderduty на одном сервере с вашей нодой, то можете оставить url: tcp://localhost:26657 Закрываем и сохраняем наш конфиг-файл ctrl+x y enter
  • Запускаем Tenderduty

Теперь мы можем посмотреть как все работает в браузере.

Вставляем в браузер http://[ip нашего сервера]:8888/

Откроется страница, где вы увидите ваш мониторинг.

И в случае каких-либо неполадок, вы получите оповещение в телеграм или дискорд.

Скрипт + crontab

Также мы можем запускать по расписанию простой скрипт который будет проверять синхронизацию. И в случае если синхронизация пропадёт, мы получим сообщение в телеграм. Создайте скрипт:

nano [alarm.sh](<http://alarm.sh/>)

Добавьте в него содержимое

#!/bin/bash

# telegram bot token
BOT_TOKEN=1111:ASDFKAJFW89
# chat id
CHAT_ID_ALARM=-12412541
# alarm text
TEXT_ALARM="Проверь ноду. Рассинхронизация!"

NODE=Zetachain

CATCHUP=$(zetacored status 2>&1 | jq .SyncInfo.catching_up)

if [[ $CATCHUP == false ]]
then
echo "Нода в порядке"

else
echo $TEXT_ALARM
curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"'"$CHAT_ID_ALARM"'","text":"'"$TEXT_ALARM"' '"$NODE"'"}' "<https://api.telegram.org/bot$BOT_TOKEN/sendMessage>"
echo -e "\\n"

fi

Сохраните и выйдите из редактора.

Сделайте скрипт исполняемым:

chmod +x [alarm.sh](<http://alarm.sh/>)
./alarm.sh

Теперь добавьте его в cron:

sudo crontab -e

Добавьте туда строку

/3 * * * * sudo /path/to/sqrypt/alarm.sh

Теперь каждые 3 минуты скрипт будет проверять синхронизацию.

UptimeRobot

UptimeRobot представляет собой сервис мониторинга, который позволяет пользователям отслеживать статус и время работы своих сайтов и серверов в режиме реального времени. Этот сервис предлагает возможность мониторинга до 50 объектов с интервалами проверки каждые 5 минут абсолютно бесплатно.

Регистрируемся.

Создаём новый монитор.

Выбираем, что мониторить. Например ping.

Выставляем ваш IP.

Узнать ip-адрес сервера в терминале можно так:

wget -qO- [eth0.me](<http://eth0.me/>)

После создания монитора, он активируется и мониторит ваш сервер.

Также можно настроить уведомления на мобильный. Для этого нужно скачать приложение на телефон.

Или в телеграм.

Инстурменты для работы вы найдете на нашем сайте

Материалы по базовым темам для новичков вы можете найти в этом разделе

Изучать следующую тему курса : Мультиаккинг и автоматизация