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
, где Х буквенное обозначение диска в системе.
Важно
Не желательно использовать диски с системой записи SMR приветствуются CMR. Тут трудно сказать, как поведет себя диск с черепицей нужно тестить и смотреть, не будет ли он захлёбываться. Ибо файлов много и они маленькие. Производитель не всегда указывает, какой тип записи используется, тут нужно гуглить или по форумам смотреть.
Примечание
Не желательно подключать еще один узел на том же сервере пока не заполнится жесткий диск узла. Т.е. не сразу подключать второй и последующие харды. Подразумевается, что как только диск заполнится можно повторить данный мануал и установить еще один контейнер который будет работать с другим жестким диском.
- 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 смотрим тут
Примечание
Если внешний ip адрес не статический белый, придется использовать no-ip создав там домен. Об этом написано в инструкции
Настройка 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 КБ.
- 131072 страниц (512 МБ) – минимальное количество памяти, которое всегда будет зарезервировано для UDP.
- 262144 страниц (1 ГБ) – рекомендуемое значение, при котором система будет пытаться держать нагрузку.
- 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
Комментарии