How to Host a STORJ Node"
After Width: | Height: | Size: 22 KiB |
193
content/tutorials/how-to-host-a-storj-node/index.md
Normal file
|
@ -0,0 +1,193 @@
|
|||
---
|
||||
title: "How to Host a STORJ Node"
|
||||
description: "Step by step guide to run STORJ Node, an open-source cloud storage platform, S3-compatible platform and suite of decentralized applications."
|
||||
# linkTitle:
|
||||
date: 2021-10-26T23:12:05+07:00
|
||||
lastmod:
|
||||
draft: false
|
||||
noindex: false
|
||||
# comments: false
|
||||
nav_weight: 1000
|
||||
# nav_icon:
|
||||
# vendor: bootstrap
|
||||
# name: toggles
|
||||
# color: '#e24d0e'
|
||||
series:
|
||||
# - Tutorial
|
||||
categories:
|
||||
- SysAdmin
|
||||
tags:
|
||||
- StorJ
|
||||
- S3
|
||||
- Docker
|
||||
images:
|
||||
# menu:
|
||||
# main:
|
||||
# weight: 100
|
||||
# params:
|
||||
# icon:
|
||||
# vendor: bs
|
||||
# name: book
|
||||
# color: '#e24d0e'
|
||||
authors:
|
||||
- ditatompel
|
||||
---
|
||||
|
||||
**Storj** (pronounced as *"storage"*), is an open-source cloud storage platform, *S3-compatible* platform and suite of decentralized applications that allows you to store data in a secure and decentralized manner. Basically, it uses a decentralized network of nodes to host user data. The platform also secures hosted data using advanced encryption.
|
||||
|
||||
<!--more-->
|
||||
|
||||
In a [white paper](https://storj.io/whitepaper) published in December,2014, Storj was first introduced to the world as a concept. It was to be a decentralized peer-to-peer encrypted cloud storage platform.
|
||||
|
||||
To host a Node, your hardware and bandwidth will need to meet a few requirements:
|
||||
- One processor core
|
||||
- Minimum 550GB of available disk space
|
||||
- Minimum of 2TB of available bandwidth a month
|
||||
- Minimum upstream bandwidth of 5 Mbps
|
||||
- Minimum download bandwidth of 25 Mbps
|
||||
- Keep your node online 24/7
|
||||
- Read and agree to the [Storj Storage Node Operator Terms and Conditions](https://storj.io/storj-operator-terms)
|
||||
|
||||
If you can follow above requirement, you are good to go. In this article, I use Ubuntu 18.04 running on VPS with public IP address, 4 cores processor, 2GB RAM and 600GB additional disk partition for Storj data.
|
||||
|
||||
## Request authorization token
|
||||
[Sign up](https://registration.storj.io/) and request authorization token. Make sure you have received your personal single-use authorization token. It looks like this:
|
||||
|
||||
![StorJ Auth Token](storj-node-auth-token.png#center)
|
||||
|
||||
The entire string, including your email is your auth token.
|
||||
|
||||
## Prepare the system
|
||||
Make sure your system is up to date by running `apt update` and `apt upgrade`.
|
||||
|
||||
### UDP config
|
||||
UDP transfers on high-bandwidth connections can be limited by the size of UDP recieve buffer.
|
||||
|
||||
Storj sofware attemps to increase the UDP recieve buffer size. However, on Linux, an application is only allowed to increase the buffer size up to a max value set in the kernel, and the the default maximum value is too small for high bandwidth UDP transfers.
|
||||
|
||||
Its is recommended to increase the max buffer size by running the following command to increase it to 2.5MB.
|
||||
|
||||
```shell
|
||||
echo "net.core.rmem_max=2500000" >> /etc/sysctl.conf
|
||||
sysctl -w net.core.rmem_max=2500000
|
||||
```
|
||||
### Generate node identity
|
||||
Every node is required to have a unique identifier on the network.
|
||||
|
||||
You need to download StorJ identity binary to generate your node identity (**as regular user, not as root**):
|
||||
```shell
|
||||
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
|
||||
```
|
||||
Run command below to create an identity:
|
||||
```shell
|
||||
identity create storagenode
|
||||
```
|
||||
This process can take several minutes or hours or days, depending on your machines processing power and luck.
|
||||
|
||||
This process will continue until it reaches a difficulty of at least 36. On completion, it will look something like this:
|
||||
|
||||
```plain
|
||||
Generated 5186393 keys; best difficulty so far: 36
|
||||
Found a key with difficulty 36!
|
||||
Unsigned identity is located in "/home/USERNAME/.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/USERNAME/.local/share/storj/identity/storagenode/ca.key
|
||||
```
|
||||
### Authorize the identity
|
||||
Authorize your Storage Node identity using your single-use authorization token from **"Request authorization token"** section above. (_replace the placeholder `<email:characterstring>` to your actual authorization token_):
|
||||
|
||||
```shell
|
||||
identity authorize storagenode <email:characterstring>
|
||||
```
|
||||
When it's done and success, you will get result similar like this:
|
||||
|
||||
```plain
|
||||
2021/10/26 02:07:22 proto: duplicate proto type registered: node.SigningRequest
|
||||
2021/10/26 02:07:22 proto: duplicate proto type registered: node.SigningResponse
|
||||
Identity successfully authorized using single use authorization token.
|
||||
Please back-up "/home/USERNAME/.local/share/storj/identity/storagenode" to a safe location.
|
||||
```
|
||||
|
||||
To make sure the authorizing identity is successful, run these 2 following commands:
|
||||
```shell
|
||||
grep -c BEGIN ~/.local/share/storj/identity/storagenode/ca.cert
|
||||
grep -c BEGIN ~/.local/share/storj/identity/storagenode/identity.cert
|
||||
```
|
||||
|
||||
The first command should return `2`, and the second command should return `3`.
|
||||
|
||||
### Move the identity to the subfolder in the storage location (optional)
|
||||
In this example, I use `/dev/sdb1` partition and mount it to `/mnt/storj1` directory using `/etc/fstab` conffiguration file (_don't forget to change the `/mnt/storj1` ownership to your regular user using `chown` command_).
|
||||
|
||||
Create 2 folder named `identity` and `data` under `/mnt/storj1` directory (we will use them latter).
|
||||
|
||||
```shell
|
||||
mkdir /mnt/storj1/{identity,data}
|
||||
```
|
||||
|
||||
Then, copy your **generated identity folder** to `/mnt/storj1/identity` :
|
||||
```shell
|
||||
cp -rfv ~/.local/share/storj/identity/storagenode /mnt/storj1/identity/
|
||||
```
|
||||
|
||||
### Install docker and download the Storage Node Docker Container
|
||||
To setup a Storage Node, you first must have Docker installed. You can follow this official [Ubuntu Docker Installation](https://docs.docker.com/install/linux/docker-ce/ubuntu/).
|
||||
|
||||
After docker is successfully installed and running, download the Storage Node Docker Container:
|
||||
```shell
|
||||
docker pull storjlabs/storagenode:latest
|
||||
```
|
||||
|
||||
### Setting up the storage node
|
||||
> _You must static mount your storage partition via /etc/fstab. Failure to do so will put you in high risk of failing audits and getting disqualified._
|
||||
|
||||
> _The setup step must be performed only once. If a node has already been set up, running with the SETUP flag will result in failure._
|
||||
|
||||
|
||||
```shell
|
||||
docker run --rm -e SETUP="true" \
|
||||
--mount type=bind,source="<identity-dir>",destination=/app/identity \
|
||||
--mount type=bind,source="<storage-dir>",destination=/app/config \
|
||||
--name storagenode storjlabs/storagenode:latest
|
||||
```
|
||||
Replace the `<identity-dir>` and `<storage-dir>` with your parameters.
|
||||
|
||||
In this article I use `/mnt/storj1/identity/storagenode` for `<identity-dir>` and `/mnt/storj1/data` for `<storage-dir>` (see section **"Move the identity to the subfolder in the storage location"** above).
|
||||
|
||||
After running the command above, your node has been set up.
|
||||
|
||||
## Run the Storage Node
|
||||
Run the command below (edit the `WALLET`, `EMAIL`, `ADDRESS`, `STORAGE` and replace the `<identity-dir>`, and `<storage-dir>` with your parameters)
|
||||
|
||||
```shell
|
||||
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="youremail@example.com" \
|
||||
-e ADDRESS="host.yourdomain.com:28967" \
|
||||
-e STORAGE="500GB" \
|
||||
--mount type=bind,source="<identity-dir>",destination=/app/identity \
|
||||
--mount type=bind,source="<storage-dir>",destination=/app/config \
|
||||
--name storagenode storjlabs/storagenode:latest
|
||||
```
|
||||
You're officially a Storage Node operator! You can also check to see if the node was started properly by by running the following command in the terminal
|
||||
```shell
|
||||
docker ps -a
|
||||
```
|
||||
|
||||
### Check the status of your node
|
||||
You can check the status of your node, along with many other statistics by accessing web dashboard from browser: `http://host.yourdomain.com:14002`.
|
||||
|
||||
Or using command line:
|
||||
```shell
|
||||
docker exec -it storagenode /app/dashboard.sh
|
||||
```
|
||||
|
||||
## Resources:
|
||||
- [https://docs.storj.io/node/](https://docs.storj.io/node/)
|
||||
- [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/)
|
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 22 KiB |