NeoFS Storage Node Deploy

  • docker v20.10.2 or older,
  • docker-compose v1.25.5 or older,
  • NeoFS CLI v0.21.1
  • N3 testnet compatible wallet app (we will use neo-go v0.95.2 in our examples).

Prepare keys and wallets

Start our journey by generating a private key for the storage node. You can generate one with NeoFS CLI.

Receive testnet GAS

To deploy node to NeoFS network we need to make a deposit to a storage node address. Deposit is being used to:

  • filter out “free” nodes that can affect the network.

Make deposit

Deposit is made by transferring GAS directly to NeoFS contract. In N3 Testnet, NeoFS contract is deployed at the address NadZ8YfvkddivcFFkztZgfwxZyKf1acpRF. You can transfer any amount of GAS under 9000

neo-go wallet nep17 transfer -r -w keys/storage_wallet.json --from NdisEtkGKNsmkQXFTM5NjEiJYiQ1Vxe5iW --to NadZ8YfvkddivcFFkztZgfwxZyKf1acpRF --token GAS --amount 10

Configure storage node

We have prepared configured image of storage node and docker-compose file for easy setup. Get config directory from neofs-node repository.

  • UN/LOCODE attribute.
  • path to the key file.

Path to storage dir

NeoFS objects will be stored on your machine. By default docker-compose has been configured to store objects in named docker volume neofs_storage. You can specify directory and all objects will be stored there:

- /home/username/neofs/rc3/storage:/storage

Network address

Specify your public IP address or domain name with the open port in NODE_ADDRESS and BIND_ADDRESS config values in the node_config.env file. The first address used for the public announcement in the network map. The second used to open the connection listening socket on your machine. By default keep these addresses the same.


UN/LOCODE attribute

UN/LOCODE is a database of locations used by NeoFS to control data placement geographically. Find suitable LOCODE (from the link above) for your storage node and set it in the node_config.env.

$ neofs-cli util locode info --db ./locode_db --locode 'RU LED' Country: Russia 
Location: Saint Petersburg (ex Leningrad)
Continent: Europe 5Subdivision: [SPE] Sankt-Peterburg
Coordinates: 59.53, 30.15

Start and maintain storage node

Now, our docker-compose file should look like this.

---version: "2.4"
image: nspccdev/neofs-storage-testnet:0.21.1
container_name: neofs-testnet
env_file: node_config.env
network_mode: host
restart: always
- /home/username/neofs/rc3/storage:/storage
- /home/username/neofs/rc3/keys/storage.key:/node.key
stop_signal: SIGINT
image: victoriametrics/vmagent:v1.61.0
env_file: node_config.env
container_name: vmagent
- '-promscrape.config=/configs/prometheus.yml'
- '-remoteWrite.url='
network_mode: host
restart: always
- ./prometheus.yml:/configs/prometheus.yml

Start up

To start the storage node in the background, run this command:

$ docker-compose up -d
$ neofs-cli control healthcheck -k storage.key -r
Network status: ONLINE
Health status: READY
$ neofs-cli netmap snapshot -k storage.key -r


Node’s logs are available in docker-compose.

$ docker logs neofs-testnet


The best way to shut down the node is to move it to offline mode and then stop docker image. To send node to offline mode use NeoFS CLI.


In this article, we have covered the most basic node setup. With these steps, you will be able to become a part of NeoFS storage network in N3 testnet. Provide storage resources to increase network capacity and use it for your data and dApps with N3 Oracles and NeoFS HTTP Gates.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store