# Step-by-Step Instructions to Install   Silo Node Using Docker

***

## **Step 1: Understand Prerequisites**

Before setting up a Silo node, ensure the following:

1. **Hardware Requirements**:
   * Minimum **500 GB of free storage**.
   * Minimum **2 TB of bandwidth per month**.
   * Stable and consistent **internet connection**.
2. **Operating System**:
   * Linux or Windows (Docker support is required).
3. **Docker**:
   * Ensure Docker is installed. Follow the [Docker installation guide](https://docs.docker.com/get-docker/) if needed.
4. **Public IP Address**:
   * A public IP or properly configured Dynamic DNS.
5. **Wallet Address**:
   * A [Larissa Network](https://play.google.com/store/apps/details?id=network.larissa.wallet\&hl=en_IN) wallet address for Silo payouts.

***

## **Step 2: Get an Authorization Token**

1. Open **Silo** registration page on the [Silo website](https://silos3.com/signup/).
2. Enter your email to generate an **authorization token**.
3. Save this token securely, as it will be used to authenticate your node.

***

## **Step 3: Setup Port Forwarding**

1. Access your router’s configuration page:
   * Typically accessed via `http://192.168.1.1` (or your router's IP address).
2. Forward the following ports:
   * **TCP Port 28967**: Default Silo node communication port.
   * **UDP Port 28967** (if QUIC is enabled, see Step 4).
3. Ensure the forwarded ports point to the local IP address of the machine hosting the Silo node.

***

## **Step 4: Configure QUIC**

QUIC improves performance and is recommended for Silo nodes.

1. Forward **UDP Port 28967** (as per Step 3).
2. Confirm with your ISP that **UDP traffic** is not blocked.
3. No additional configuration is required on the node for QUIC if the port is open.

***

## **Step 5: Create an Trustkey**

**Download the Trustkey Tool**:

{% tabs %}
{% tab title="Windows" %}
PowerShell:

```
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; curl https://github.com/silos3/silo-release/releases/download/v1.0.0-P/trustkey_windows_amd64.exe.zip -o trustkey_windows_amd64.exe.zip; Expand-Archive ./trustkey_windows_amd64.exe.zip . -Force; Rename-Item -Path ./trustkey_windows_amd64.exe -NewName trustkey.exe
```

**Generate an Trustkey**:

```bash
./trustkey.exe create silonode
```

**Authorize the Trustkey**:

```bash
./trustkey.exe authorize silonode <email:your-authorization-token>
```

{% endtab %}

{% tab title="Linux" %}

```
curl -L https://github.com/silos3/silo-release/releases/download/v1.0.0-P/trustkey_linux_amd64.zip -o trustkey_linux_amd64.zip
unzip -o trustkey_linux_amd64.zip
chmod +x trustkey_linux_amd64
sudo mv trustkey_linux_amd64 /usr/local/bin/trustkey
```

**Generate an Identity**:

```bash
trustkey create silonode
```

**Authorize the Identity**:

```bash
trustkey authorize silonode <email:your-authorization-token>
```

{% endtab %}
{% endtabs %}

**Store Securely**:

* Ensure the trustkey  files are saved in a secure and accessible location.

***

## **Step 6: Install Silo Node Software - Docker**

**Pull the Silo Docker Image**:

* Use the following command to download the official Silo node Docker image:

  ```bash
  docker pull silos3/silo-node:latest
  ```

{% tabs %}
{% tab title="Windows" %}
Paste the command into a plain text editor, such as Notepad++ (highly recommended), avoiding any word processing software.

```
docker run --rm -e SETUP="true" --mount type=bind,source="<trustkey-dir>",destination=/app/trustkey --mount type=bind,source="<storage-dir>",destination=/app/config --name storagenode silos3/silo-node:latest
```

Substitute `<trustkey-dir>` and `<storage-dir>` with your specific parameters, execute the revised command in a terminal, and confirm that your node is now successfully configured.
{% endtab %}

{% tab title="Linux" %}
Copy the command into a plain text editor like a `nano`:

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

Substitute `<trustkey-dir>` and `<storage-dir>` with your specific parameters, execute the revised command in a terminal, and confirm that your node is now successfully configured.
{% endtab %}
{% endtabs %}

**Run the Docker Container**:

{% tabs %}
{% tab title="Windows" %}
Paste the command into a text editor, such as Notepad++ (highly recommended), avoiding the use of any word processing software.

```
docker run -d --restart unless-stopped --stop-timeout 300 -p 28967:28967/tcp -p 28967:28967/udp -p 127.0.0.1:14002:14002 -e WALLET="0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -e EMAIL="username@domain.com" -e ADDRESS="domain.ddns.net:28967" -e STORAGE="2TB" --mount type=bind,source="<trustkey-dir>",destination=/app/trustkey --mount type=bind,source="<storage-dir>",destination=/app/config --name storagenode silos3/silo-node:latest
```

Modify the values for WALLET, EMAIL, ADDRESS, and STORAGE, replacing `<trustkey-dir>` and `<storage-dir>` with your specific parameters.

Execute the updated command in your terminal.

Congratulations, you are now operating as a Storage Node!&#x20;
{% endtab %}

{% tab title="Linux" %}
Copy the command into a plain text editor, like a `nano`:

```
docker run -d --restart unless-stopped --stop-timeout 300 \
  -p 28967:28967/tcp \
  -p 28967:28967/udp \
  -p 127.0.0.1:14002:14002 \
  -e WALLET="0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -e EMAIL="username@domain.com" \
  -e ADDRESS="domain.ddns.net:28967" \
  -e STORAGE="2TB" \
  --user $(id -u):$(id -g) \
  --mount type=bind,source="<trustkey-dir>",destination=/app/trustkey \
  --mount type=bind,source="<storage-dir>",destination=/app/config \
  --name storagenode silos3/silo-node:latest
```

Update the WALLET, EMAIL, ADDRESS, and STORAGE fields with your specific parameters, replacing `<identity-dir>` and `<storage-dir>` accordingly.

After making the necessary changes, copy the revised command and execute it in your terminal.

Congratulations, you are now operating as a Storage Node!
{% endtab %}
{% endtabs %}

**Check Node Status**: Verify the Silo node is running by listing Docker containers:

```bash
docker ps -a
```

**Monitor** : Your node stats

```bash
http://127.0.0.1:14002
```

***
