Hi,
Can I add more than one storage location? In my PC I have two drives and each is 1TB.
Can I specify additional location to the one I created with node installation? If yes, how?
Thanks!
Yes, you can host multiple Silo storage nodes on the same machine, each using a separate drive, but you cannot specify various storage locations for a single node. Each node must have its unique identity, storage path, and configuration. Here’s how you can set up a second node on the same PC to utilize both drives:
Steps to Set Up an Additional Node on the Same PC
1. Generate a New Trust key
- You need a new trustkey for each additional node.
- Use the Silo trustkey tool to generate a new trustkey:
trustkey create silonode2
- Follow the instructions to sign the new trustkey.
2. Configure the Second Node
- Choose a different port for the second node. For example:
- First node: Port
28967 - Second node: Port
28968
- First node: Port
- Ensure your firewall and router are configured to forward these ports to your machine.
3. Create a New Storage Path
- Create a directory for the additional node’s storage on the second drive. For example:
D:\SiloNode2
4. Run a Second Docker Container (if using Docker)
- Launch a second container for the new node, specifying the new trustkey, storage path, and port:
docker run -d --restart unless-stopped --stop-timeout 300 \
-p 28968:28968/tcp \
-p 28968:28968/udp \
-p 127.0.0.1:14003:14003 \
-e WALLET="0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-e EMAIL="[email protected]" \
-e ADDRESS="domain.ddns.net:28968" \
-e STORAGE="2TB" \
--user $(id -u):$(id -g) \
--mount type=bind,source="<trustkey2-dir>",destination=/app/trustkey \
--mount type=bind,source="<storage2-dir>",destination=/app/config \
--name storagenode silos3/silo-node:latest
- Adjust the paths and parameters based on your configuration.
- Use Same email, wallet address as node 1
Thanks mate, very clear and perfect instructions.
One thing I would add to step-by-step instructions as that was not clear.
Create storage location/directory for , this was not clear.
Sorry, do you mean for this to be 28967 OR 28968?
Sorry it’s correct port is 28968 for 2nd silo node
Just in case someone want to perform this, here are what I have to change to get this running (Bold):
docker run -d --restart unless-stopped --stop-timeout 300
-p 28968:28968/tcp
-p 28968:28968/udp
-p 127.0.0.1:14003:14003
-e WALLET=“0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”
-e EMAIL="[email protected]"
-e ADDRESS=“domain.ddns.net:28968”
-e STORAGE=“2TB”
–mount type=bind,source=“”,destination=/app/trustkey
–mount type=bind,source=“”,destination=/app/config
–name storagenode2 silos3/silo-node:latest
Also, this line was not accepted, so I removed it
–user $(id -u):$(id -g) \
Yes, in the same system need to change port 14002 to 14003
And this line is required on Linux Not on Windows
Even all seems fine and container running, but I cannot get to node dashboard.
docker keeps throughing this in the log:
2025-01-22T07:43:57Z ERROR contact:service ping orbital failed {“Process”: “storagenode”, “Orbital ID”: “1dkRxqhU46NfjV1xJZrxnt8RwWGK2uAas1jtncvZoj4s8HVVK4”, “attempts”: 9, “error”: “ping orbital: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: EOF”, “errorVerbose”: “ping orbital: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: EOF\n\tsilos3.com/silo/storagenode/contact.(*Service).pingOrbitalOnce:209\n\tsilos3.com/silo/storagenode/contact.(*Service).pingOrbital:157\n\tsilos3.com/silo/storagenode/contact.(*Chore).updateCycles.func1:87\n\tsilos3.com/common/sync2.(*Cycle).Run:102\n\tsilos3.com/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:78”}
Make sure your port forwarding properly setup for port 28968
Does Silo3 server communicate on port 28968 also?
Yes, first check in your 1st node print any error logs?
No, first node is working without any errors. Dashboard also good.
The only difference I found between those two are:
node1:
{
“Id”: “05754249d18114041556f22092f848a5b1b8fd7223ae9b9861a79f7ea74389fb”,
“Created”: “2025-01-22T07:05:47.029932699Z”,
“Path”: “/entrypoint”,
“Args”: ,
“State”: {
“Status”: “running”,
“Running”: true,
“Paused”: false,
“Restarting”: false,
“OOMKilled”: false,
“Dead”: false,
“Pid”: 11700,
“ExitCode”: 0,
“Error”: “”,
“StartedAt”: “2025-01-22T11:35:09.882100051Z”,
“FinishedAt”: “2025-01-22T10:07:24.11219236Z”
},
“Image”: “sha256:937f25caa661646daa89a44a5d039e9b79eb8cbad73ec2e017a9c41da698d1a7”,
“ResolvConfPath”: “/var/lib/docker/containers/05754249d18114041556f22092f848a5b1b8fd7223ae9b9861a79f7ea74389fb/resolv.conf”,
“HostnamePath”: “/var/lib/docker/containers/05754249d18114041556f22092f848a5b1b8fd7223ae9b9861a79f7ea74389fb/hostname”,
“HostsPath”: “/var/lib/docker/containers/05754249d18114041556f22092f848a5b1b8fd7223ae9b9861a79f7ea74389fb/hosts”,
“LogPath”: “/var/lib/docker/containers/05754249d18114041556f22092f848a5b1b8fd7223ae9b9861a79f7ea74389fb/05754249d18114041556f22092f848a5b1b8fd7223ae9b9861a79f7ea74389fb-json.log”,
“Name”: “/storagenode”,
“RestartCount”: 0,
“Driver”: “overlayfs”,
“Platform”: “linux”,
“MountLabel”: “”,
“ProcessLabel”: “”,
“AppArmorProfile”: “”,
“ExecIDs”: null,
“HostConfig”: {
“Binds”: null,
“ContainerIDFile”: “”,
“LogConfig”: {
“Type”: “json-file”,
“Config”: {}
},
“NetworkMode”: “bridge”,
“PortBindings”: {
“14002/tcp”: [
{
“HostIp”: “127.0.0.1”,
“HostPort”: “14002”
}
],
“28967/tcp”: [
{
“HostIp”: “”,
“HostPort”: “28967”
}
],
“28967/udp”: [
{
“HostIp”: “”,
“HostPort”: “28967”
}
]
},
“RestartPolicy”: {
“Name”: “unless-stopped”,
“MaximumRetryCount”: 0
},
“AutoRemove”: false,
“VolumeDriver”: “”,
“VolumesFrom”: null,
“ConsoleSize”: [
50,
120
],
“CapAdd”: null,
“CapDrop”: null,
“CgroupnsMode”: “host”,
“Dns”: ,
“DnsOptions”: ,
“DnsSearch”: ,
“ExtraHosts”: null,
“GroupAdd”: null,
“IpcMode”: “private”,
“Cgroup”: “”,
“Links”: null,
“OomScoreAdj”: 0,
“PidMode”: “”,
“Privileged”: false,
“PublishAllPorts”: false,
“ReadonlyRootfs”: false,
“SecurityOpt”: null,
“UTSMode”: “”,
“UsernsMode”: “”,
“ShmSize”: 67108864,
“Runtime”: “runc”,
“Isolation”: “”,
“CpuShares”: 0,
“Memory”: 0,
“NanoCpus”: 0,
“CgroupParent”: “”,
“BlkioWeight”: 0,
“BlkioWeightDevice”: ,
“BlkioDeviceReadBps”: ,
“BlkioDeviceWriteBps”: ,
“BlkioDeviceReadIOps”: ,
“BlkioDeviceWriteIOps”: ,
“CpuPeriod”: 0,
“CpuQuota”: 0,
“CpuRealtimePeriod”: 0,
“CpuRealtimeRuntime”: 0,
“CpusetCpus”: “”,
“CpusetMems”: “”,
“Devices”: ,
“DeviceCgroupRules”: null,
“DeviceRequests”: null,
“MemoryReservation”: 0,
“MemorySwap”: 0,
“MemorySwappiness”: null,
“OomKillDisable”: false,
“PidsLimit”: null,
“Ulimits”: ,
“CpuCount”: 0,
“CpuPercent”: 0,
“IOMaximumIOps”: 0,
“IOMaximumBandwidth”: 0,
“Mounts”: [
{
“Type”: “bind”,
“Source”: “C:\Users\rida\AppData\Roaming\Silo\Trustkey\silonode”,
“Target”: “/app/trustkey”
},
{
“Type”: “bind”,
“Source”: “C:\Silo3_storage1”,
“Target”: “/app/config”
}
],
“MaskedPaths”: [
“/proc/asound”,
“/proc/acpi”,
“/proc/kcore”,
“/proc/keys”,
“/proc/latency_stats”,
“/proc/timer_list”,
“/proc/timer_stats”,
“/proc/sched_debug”,
“/proc/scsi”,
“/sys/firmware”,
“/sys/devices/virtual/powercap”
],
“ReadonlyPaths”: [
“/proc/bus”,
“/proc/fs”,
“/proc/irq”,
“/proc/sys”,
“/proc/sysrq-trigger”
]
},
“GraphDriver”: {
“Data”: null,
“Name”: “overlayfs”
},
“Mounts”: [
{
“Type”: “bind”,
“Source”: “C:\Users\rida\AppData\Roaming\Silo\Trustkey\silonode”,
“Destination”: “/app/trustkey”,
“Mode”: “”,
“RW”: true,
“Propagation”: “rprivate”
},
{
“Type”: “bind”,
“Source”: “C:\Silo3_storage1”,
“Destination”: “/app/config”,
“Mode”: “”,
“RW”: true,
“Propagation”: “rprivate”
}
],
“Config”: {
“Hostname”: “05754249d181”,
“Domainname”: “”,
“User”: “”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“ExposedPorts”: {
“14002/tcp”: {},
“28967/tcp”: {},
“28967/udp”: {}
},
“Tty”: false,
“OpenStdin”: false,
“StdinOnce”: false,
“Env”: [
“WALLET=0xcb102b7f5f143f7d2de56b33c1ecfa01dfbcc70f”,
“[email protected]”,
“ADDRESS:28967=sunquest.zapto.org”,
“STORAGE=800MB”,
“PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”,
“GOARCH=amd64”,
“VERSION_SERVER_URL=https://updater.silos3.com”,
“SUPERVISOR_SERVER=unix”,
“SETUP=false”,
“AUTO_UPDATE=true”,
“LOG_LEVEL=”,
“BINARY_STORE_DIR=/app/config/bin”
],
“Cmd”: null,
“Image”: “silos3/silo-node:latest”,
“Volumes”: null,
“WorkingDir”: “/app”,
“Entrypoint”: [
“/entrypoint”
],
“OnBuild”: null,
“Labels”: {},
“StopTimeout”: 300
},
“NetworkSettings”: {
“Bridge”: “”,
“SandboxID”: “d682063aaad3dc0a19536da0b89a3b3cfbc6e7a5eba660aef9885703b694e38a”,
“SandboxKey”: “/var/run/docker/netns/d682063aaad3”,
“Ports”: {
“14002/tcp”: [
{
“HostIp”: “127.0.0.1”,
“HostPort”: “14002”
}
],
“28967/tcp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “28967”
}
],
“28967/udp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “28967”
}
]
},
“HairpinMode”: false,
“LinkLocalIPv6Address”: “”,
“LinkLocalIPv6PrefixLen”: 0,
“SecondaryIPAddresses”: null,
“SecondaryIPv6Addresses”: null,
“EndpointID”: “12eda475de7b29e895063c21e7e0a967d720428f45224389ae3c2e53afded3cd”,
“Gateway”: “172.17.0.1”,
“GlobalIPv6Address”: “”,
“GlobalIPv6PrefixLen”: 0,
“IPAddress”: “172.17.0.3”,
“IPPrefixLen”: 16,
“IPv6Gateway”: “”,
“MacAddress”: “02:42:ac:11:00:03”,
“Networks”: {
“bridge”: {
“IPAMConfig”: null,
“Links”: null,
“Aliases”: null,
“MacAddress”: “02:42:ac:11:00:03”,
“DriverOpts”: null,
“NetworkID”: “c98bd6ed76329ef5cd6ba381afa71009844a0e553df6282e591bd5ffc78916ad”,
“EndpointID”: “12eda475de7b29e895063c21e7e0a967d720428f45224389ae3c2e53afded3cd”,
“Gateway”: “172.17.0.1”,
“IPAddress”: “172.17.0.3”,
“IPPrefixLen”: 16,
“IPv6Gateway”: “”,
“GlobalIPv6Address”: “”,
“GlobalIPv6PrefixLen”: 0,
“DNSNames”: null
}
}
}
}
AND
“Config”: {
“Hostname”: “05754249d181”,
“Domainname”: “”,
“User”: “”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“ExposedPorts”: {
“14002/tcp”: {},
“28967/tcp”: {},
“28967/udp”: {}
node2:
“Config”: {
“Hostname”: “0225c780dfe8”,
“Domainname”: “”,
“User”: “”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“ExposedPorts”: {
“14002/tcp”: {},
“14003/tcp”: {},
“28967/tcp”: {},
“28968/tcp”: {},
“28968/udp”: {}
AND:
“NetworkSettings”: {
“Bridge”: “”,
“SandboxID”: “101f5e373073c2910f529ad508e85e8c78d55ed970f4ee464ad3b5f4f6c00c77”,
“SandboxKey”: “/var/run/docker/netns/101f5e373073”,
“Ports”: {
“14002/tcp”: null,
“14003/tcp”: [
{
“HostIp”: “127.0.0.1”,
“HostPort”: “14003”
}
],
“28967/tcp”: null,
“28968/tcp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “28968”
}
],
“28968/udp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “28968”
Ah, I see an issue.
Correct CMD is
docker run -d --restart unless-stopped --stop-timeout 300 \
-p 28968:28967/tcp \
-p 28968:28967/udp \
-p 127.0.0.1:14003:14002 \
-e WALLET="0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-e EMAIL="[email protected]" \
-e ADDRESS="domain.ddns.net:28968" \
-e STORAGE="2TB" \
--user $(id -u):$(id -g) \
--mount type=bind,source="<trustkey2-dir>",destination=/app/trustkey \
--mount type=bind,source="<storage2-dir>",destination=/app/config \
--name storagenode silos3/silo-node:latest
28968:28967/tcp & 28968:28967/udp
Explaintion: in docker Silo Node open port
28967and in your PC bind on28968
@600cc Problem Solved?
Hi,
I had to recreate key again as it was throughing error about trust certificate. I just started the node, no errors so far so I will just expect its working.
the only thing that I couldn’t start the dashboard on 14003. But I will try tomorrow.
thanks a bunch for your help!
docker run -d --restart unless-stopped --stop-timeout 300 \
-p 28968:28967/tcp \
-p 28968:28967/udp \
-p 127.0.0.1:14003:14002 \
-e WALLET="0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-e EMAIL="[email protected]" \
-e ADDRESS="domain.ddns.net:28968" \
-e STORAGE="2TB" \
--user $(id -u):$(id -g) \
--mount type=bind,source="<trustkey2-dir>",destination=/app/trustkey \
--mount type=bind,source="<storage2-dir>",destination=/app/config \
--name storagenode silos3/silo-node:latest
Run this
yeees mate, this is worked perfect.
Thanks again, glad this is sorted out.
Have a wonderful day.
Hello, I don’t want to create a new topic, I have a question, I’m creating a second node on a PC where one node is already installed and working, I did everything according to the manual here, but the node refuses to connect.
port forwarding 28969 is configured, firewall is configured and disabled, token was recreated, ports are checked, open and port forwarding works
Here are my settings for creating a node:
docker run --rm -e SETUP=“true” --mount type=bind,source=“C:\Users\Web\AppData\Roaming\Silo\Trustkey\silonode2”,destination=/app/trustkey --mount type=bind,source=“F:\SILO”,destination=/app/config --name storagenode2 silos3/silo-node:latest
docker run -d --restart unless-stopped --stop-timeout 300 -p 28969:28967/tcp -p 28969:28967/udp -p 14003:14002 -e WALLET=“0x5bf65dec155a62b162734fb0049131fa95316c0a” -e EMAIL="[email protected]" -e ADDRESS=“95.31.,:28969” -e STORAGE=“10TB” --mount type=bind,source=“C:\Users\Web\AppData\Roaming\Silo\Trustkey\silonode2”,destination=/app/trustkey --mount type=bind,source=“F:\SILO”,destination=/app/config --name storagenode2 silos3/silo-node:latest
Here’s the connection error again:
2025-01-24 15:12:06 2025-01-24T12:12:06Z ERROR contact:service ping orbital failed {“Process”: “storagenode”, “Orbital ID”: “1dkRxqhU46NfjV1xJZrxnt8RwWGK2uAas1jtncvZoj4s8HVVK4”, “attempts”: 11, “error”: “ping orbital: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: tls peer certificate verification: not signed by any CA in the whitelist: CA cert”, “errorVerbose”: “ping orbital: failed to ping storage node, your node indicated error code: 0, rpc: tcp connector failed: rpc: tls peer certificate verification: not signed by any CA in the whitelist: CA cert\n\tsilos3.com/silo/storagenode/contact.(*Service).pingOrbitalOnce:209\n\tsilos3.com/silo/storagenode/contact.(*Service).pingOrbital:157\n\tsilos3.com/silo/storagenode/contact .(*Chore).updateCycles.func1:87\n\tsilos3.com/common/sync2.(*Cycle).Run:163\n\tsilos3.com/common/sync2.(*Cycle).Start.func1:77\n\tgolang.org/x/sync/errgroup.(*Group).Go.func1:78”}


