Storj

Это децентрализованная облачная платформа для хранения данных с открытым исходным кодом, основанная на технологии блокчейна. Она разрезает данные на фрагменты, шифрует их и распределяет по глобальной сети хранения, обеспечивая их безопасность и экономичность. В экосистеме проекта используется собственная криптовалюта STORJ.

В качестве эксперимента установлю и запущу. На прибыль в плюс можно и не рассчитывать, может какой то профит и будет. Все равно жесткие диски стоят в рабочем сервере и довольно с большим “пробегом”. Попробую раскрыть тему, как установить и настроить узел Storj. Это своего рода майнинг крипты Storj на жестких дисках, которые по сути сдаются за копейки в аренду. Но будет интересно узнать, что это за кухня и какие сложности могут быть.

Минимальные требования для узла Storj

Весь процесс установки написан здесь https://storj.dev/node/get-started/setup можно следовать ему, но я опишу свой опыт установки, с некоторыми пояснениями.

Итак, требования по железу:

  • Одно ядро процессора для каждого процесса узла хранения

У меня в сервере стоит Intel(R) Xeon(R) CPU L5420 @ 2.50GHz, 4 ядра, да это очень древний камень 😀

  • Один жесткий диск за процесс узла хранения. ТОЛЬКО НЕ SMR. Подключение дисков без RAID-контроллеров ИЛИ настройте контроллер RAID в режим прохождения/IT.

Выделил под этот проект два харда: Hitachi Deskstar 7K1000.C с наработкой 72181 часов (~8 лет непрерывной работы) и Seagate Barracuda 7200.14 (AF) 40565 часов (~4,5 года работы). Ради интереса можно проверить состояние диска командой sudo smartctl -a /dev/sdX , где Х буквенное обозначение диска в системе.

  • 500 ГБ свободного места на процесс узла хранения

В моем случае они заявлены по 500ГБ каждый, но на самом деле получается 466.08Гб. Не критично узел работает.

  • 1,5 ТБ в месяц транзита на ТБ емкости узла хранения
  • 1 Мбит/с пропускной способности загрузки на ТБ емкости
  • 3 Мбит/с скачать пропускную способность на ТБ емкости

С этим проблем точно у меня нет 🙂

  • Время безотказной работы 99,3% в месяц, максимальное общее время простоя 5 часов в месяц

А вот этот пункт вызывает некоторые сомнения. Какие санкции за передоз отсутствия будут не знаю. Скорее всего, как все капиталисты накажут деньгами, т.е. удержат некоторую сумму выплат.

Что касается ОСи то у меня Debian 11

Подготовка диска

Диск нужно отформатировать, проверить файловую систему на ошибки и исправить их. Примонтировать в нужный каталог. Прописать в fstab , где он будет жить не зависимо от перезагрузки системы.

Я примонтировал диск в /home/storj/hitachi для прозрачности и на будущее второй диск в /home/storj/seagate эти папки потом будут участвовать в командах установки, как <storage-dir>

Дать права на каталог текущему пользователю:

sudo chown -R $(id -u):$(id -g) /home/storj/hitachi

Проброс порта на маршрутизаторе

Storj работает на порту 28967. Поэтому заходим в вебморду своего маршрутизатора и пробрасываем этот порт на свой сервер.

Имя сервиса IP-адрес устройства Внешний порт Внутренний порт Протокол
storj2 LOCAL-IP-SERVER 28967 28967 TCP/UDP

Необходимо так же открыть порт в файерволе sudo nano /etc/ufw/applications.d/ufw-storj:

[Storj]
title=Storj
description=Storj mining
ports=28967/tcp|28967/udp
[Board]
title=DashBoard
description=Dash Board
ports=14002/tcp

Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

sudo ufw allow Storj Открыть порт 28967 для работы узлов Storj на сервере

sudo ufw allow Board Открыть порт 14002 для доступа к Панели ноды, впоследствии при открытии еще одного узла надо будет добавить другой порт в правила. Потому что второй и последующие узлы будут работать в отдельных контейнерах и для них нужно будет открывать другие порты.

Про работу с UFW смотрим тут

Настройка QUIC

sudo sysctl -n net.core.rmem_max - посмотреть текущее значение, если оно меньше 2 500 000 , то увеличить:

sudo sysctl -w net.core.rmem_max=2500000

Что бы после перезагрузки сохранилось выполнить такую команду:

sudo echo "net.core.rmem_max=2500000" >> /etc/sysctl.d/udp_buffer.conf

От себя добавил и это касается только для моих параметров железа в частности оперативной памяти которая есть, ее всего 4Гига:

sudo echo "net.ipv4.udp_mem=131072 262144 524288" | sudo tee -a /etc/sysctl.d/udp_buffer.conf

Применить все изменения:

sudo sysctl --system

Как проверить текущее значение?

Перед внесением изменений можно посмотреть, какие лимиты сейчас:

sudo sysctl net.ipv4.udp_mem

Эта настройка управляет памятью, выделенной для UDP-сокетов, и влияет на производительность QUIC (который использует UDP).

Разбор параметра net.ipv4.udp_mem

net.ipv4.udp_mem=131072 262144 524288

Этот параметр состоит из трёх значений, задающих минимальный, нормальный и максимальный лимиты памяти для UDP-пакетов (в страницах памяти, каждая страница — 4 КБ):

Расшифровка:

Одна страница = 4 КБ.

  1. 131072 страниц (512 МБ) – минимальное количество памяти, которое всегда будет зарезервировано для UDP.
  2. 262144 страниц (1 ГБ) – рекомендуемое значение, при котором система будет пытаться держать нагрузку.
  3. 524288 страниц (2 ГБ) – максимальное количество памяти, которое система выделит в экстремальных случаях.

Почему это нужно для Storj?

  • Storj использует QUIC (UDP 28967) для передачи данных.
  • Если буферы памяти слишком маленькие, пакеты могут теряться, снижая эффективность узла.
  • Увеличение лимитов помогает избежать потерь при высокой нагрузке на сеть.

Нужно ли менять это значение?

Рекомендую это изменить, особенно если у тебя высокая скорость интернета и активный трафик.

Создание личности

Для каждого узла будет необходимо создавать новую личность.

Скачать Identity Binary

curl -L https://github.com/storj/storj/releases/latest/download/identity_linux_amd64.zip -o identity_linux_amd64.zip
unzip -o identity_linux_amd64.zip
chmod +x identity
sudo mv identity /usr/local/bin/identity

Создание личности

Теперь запустить довольно длительный процесс

identity create storagenode

По окончании будет выведено следующее:

identity create storagenode
2025-03-08T13:03:04+03:00       INFO    Anonymized tracing enabled
Generating key with a minimum a difficulty of 36...
Generated 1131308700 keys; best difficulty so far: 36
Found a key with difficulty 36!
Generated 1131309300 keys; best difficulty so far: 36Unsigned identity is located in "/home/USER/.local/share/storj/identity/storagenode"
Please *move* CA key to secure storage - it is only needed for identity management and isn't needed to run a storage node!
        /home/USER/.local/share/storj/identity/storagenode/ca.key

С моим железом это заняло 8 часов

Разрешить личность

На этой странице https://storj.dev/node/get-started/auth-token нужно ввести свой е-майл адрес, доказать что ты не робот 😆 нажать Continue будет выдан код.

identity authorize storagenode <Вставить полученный код>

Подтвердить личность

Это проверка на то что получены все идентификационные файлы:

grep -c BEGIN ~/.local/share/storj/identity/storagenode/ca.cert

На выходе должна быть цифра - 2

grep -c BEGIN ~/.local/share/storj/identity/storagenode/identity.cert

На выходе должна быть цифра - 3

Сохранить личность

Для этого узла необходимо скопировать файлы из каталога ~/.local/share/storj/identity/storagenode в надежное место например на флэшку или другой внешний диск назвав папку storj-node-01-identity.

Создать папку:

mkdir ~/.local/share/storj/identity/storj-node-01-identity

скопировать туда личность для узла :

cp -r ~/.local/share/storj/identity/storagenode/* ~/.local/share/storj/identity/storj-node-01-identity/

Теперь эта папка ~/.local/share/storj/identity/storj-node-01-identity/ будет участвовать в дальнейших командах как <identity-dir

Кошелек

Прежде чем создавать узел хранения надо создать кошелек, если его еще нет. Честно говоря в их обилии не очень разбираюсь поэтому выбрал один из популярных - https://metamask.io/. Что там и как потом выводить средства еще не знаю. Дополню как только что то накапает 💰

Установка узла хранения

Установка Docker

Если еще не установлен, то установить. Официальное руководство https://docs.docker.com/engine/install/debian/

Добавление пользователя в группу docker:

sudo usermod -aG docker $USER

Затем перезайти в систему (или просто обновить права без выхода):

newgrp docker

Скачать контейнер для хранилища Docker

docker pull storjlabs/storagenode:latest

Настройте узла хранения

Скопировать и вставить в терминал

docker run --rm -e SETUP="true" \
    --user $(id -u):$(id -g) \
    --mount type=bind,source="<identity-dir>",destination=/app/identity \
    --mount type=bind,source="<storage-dir>",destination=/app/config \
    --name storagenode storjlabs/storagenode:latest

В нашем случае как упоминалось ранее:

  • <identity-dir> - /home/USER/.local/share/storj/identity/storj-node-01-identity/ - тильду ~ не применять в пути
  • <storage-dir> - /home/storj/hitachi

Запуск узла хранения

docker run -d --restart unless-stopped --stop-timeout 300 \
    -p 28967:28967/tcp \
    -p 28967:28967/udp \
    -p 14002:14002 \
    -e WALLET="0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
    -e EMAIL="user@example.com" \
    -e ADDRESS="domain.ddns.net:28967" \
    -e STORAGE="500GB" \
    --user $(id -u):$(id -g) \
    --mount type=bind,source="<identity-dir>",destination=/app/identity \
    --mount type=bind,source="<storage-dir>",destination=/app/config \
    --name storagenode storjlabs/storagenode:latest
  • Вот эта строка была -p 127.0.0.1:14002:14002 \ по умолчанию в мануале, заменил на -p 14002:14002 \ потому что в первом случае не будет доступа к панели Storj со статистикой с удаленной машины в этой же сети. Доступ будет только через ssh тунель ssh -L 14002:localhost:14002 USER@LOCAL-IP-SERVER и потом в браузере localhost:14002. В исправленном варианте можно в локалке заходить набрав в браузере LOCAL-IP-SERVER:14002 и если надо доступ из вне можно уже пробросить порт 14002 в маршрутизаторе. Настроить файервол на доступ только с определенных ip к данному порту и смотреть статистику с любого разрешенного устройства через интернет. Так же добавить домен и через прокси сервер наблюдать статистику.

  • WALLET - номер кошелька

  • EMAIL - почтовый адрес, который был указан при создании ключа

  • ADDRESS - поставить статический ip или домен, можно спецом сделать поддомен для каждого узла, при желании. Я просто указал домен который у меня есть.

  • STORAGE - указать сколько отдаем дискового пространства в моем случае 500GB

  • <identity-dir> - ~/.local/share/storj/identity/storj-node-01-identity/

  • <storage-dir> - /home/storj/hitachi

Заполнив своими данными строки вставить в терминал и выполнить.

Автоматические обновления

Для автоматического обновления выполнить следующие команды:

Загрузить последнее изображение

docker pull storjlabs/watchtower

Активировать

docker run -d --restart=always --name watchtower -v /var/run/docker.sock:/var/run/docker.sock storjlabs/watchtower storagenode watchtower --stop-timeout 300s

Проверка работы контейнеров

docker ps -a

Страница статистики

В браузере набрать LOCAL-IP-SERVER:14002