Would you like to learn how to do a Steem witness installation? In this tutorial, we are going to show you how to install a Steem witness using a computer running Ubuntu Linux.

Hardware List:

The following section presents the list of equipment used to create this Steem tutorial.

Every piece of hardware listed above can be found at Amazon website.

Steem Related Tutorial:

On this page, we offer quick access to a list of tutorials related to Steem.

Tutorial - Steem Witness Installation

On the Ubuntu Linux console, use the following commands to install the BerkleyDB package:

# apt-get update
# apt-get install libdb++-dev libdb-dev

Use the following commands to install the required libraries and the required packages:

# apt-get install libboost-all-dev libzmq3-dev libminiupnpc-dev
# apt-get install curl git build-essential libtool autotools-dev
# apt-get install automake pkg-config bsdmainutils python3
# apt-get install software-properties-common libssl-dev libevent-dev
# apt-get install cmake doxygen

Create a directory to the node software and download the Steem package.

# mkdir /downloads
# cd /downloads
# git clone https://github.com/steemit/steem

Compile and install the Steem node software.

# cd steem
# git checkout stable
# git submodule update --init --recursive
# mkdir build
# cd build
# make
# make install

Create the Steem configuration structure using the following commands:

# cd /root
# steemd

Press [CTRL + C] to stop the steem service.

This will create a directory named witness_node_data_dir with all the required files and folders inside /root.

First, let me show you how the default configuration file, config.ini, looks like.

Here is the original file, before our configuration:

shared-file-size = 54G

public-api = database_api login_api account_by_key_api

enable-plugin = witness account_history account_by_key

max-block-age = 200

flush = 100000

backtrace = yes

account-stats-bucket-size = [60,3600,21600,86400,604800,2592000]

account-stats-history-per-bucket = 100

account-stats-tracked-accounts = []

chain-stats-bucket-size = [60,3600,21600,86400,604800,2592000]

chain-stats-history-per-bucket = 100

follow-max-feed-size = 500

follow-start-feeds = 0

market-history-bucket-size = [15,60,300,3600,86400]

market-history-buckets-per-size = 5760

enable-stale-production = false

required-participation = false




[logger.default] level=warn


[logger.p2p] level=warn


Now, let's delete the content of the configuration file.

# echo > witness_node_data_dir/config.ini

Our next step is to edit the configuration file.

# vi witness_node_data_dir/config.ini

Here is the new file with our configuration.

seed-node = seed-east.steemit.com:2001
seed-node = seed-central.steemit.com:2001
seed-node = seed-west.steemit.com:2001
seed-node = steem-seed1.abit-more.com:2001
seed-node =
seed-node = seed.steemd.com:34191
seed-node = anyx.co:2001
seed-node = seed.xeldal.com:12150
seed-node = seed.steemnodes.com:2001
seed-node = seed.liondani.com:2016
seed-node = gtg.steem.house:2001
seed-node = seed.jesta.us:2001
seed-node = steemd.pharesim.me:2001
seed-node =
seed-node = lafonasteem.com:2001
seed-node = seed.rossco99.com:2001
seed-node = steem-seed.altcap.io:40696
seed-node = seed.steemfeeder.com:2001
seed-node = seed.roelandp.nl:2001
seed-node = steem.global:2001
seed-node = seed.esteem.ws:2001
seed-node =
seed-node = seed.thecryptodrive.com:2001
seed-node = steem-id.altexplorer.xyz:2001
seed-node = seed.bitcoiner.me:2001
seed-node =
seed-node =
seed-node = seed.bhuz.info:2001
seed-node = seed.steemviz.com:2001
seed-node = steem-seed.lukestokes.info:2001
seed-node = seed.blackrift.net:2001
seed-node = seed.followbtcnews.com:2001
seed-node = node.mahdiyari.info:2001
seed-node = seed.jerrybanfield.com:2001
seed-node = seed.minnowshares.net:2001
seed-node = seed.windforce.farm:2001
seed-node = seed.teamsteem.me:2001
seed-node = steem-seed.crypto.fans:2001

shared-file-size = 100G

flush = 100000

rpc-endpoint =

public-api = database_api login_api

enable-plugin = witness

bucket-size = [15,60,300,3600,86400]

history-per-size = 5760

enable-stale-production = false

required-participation = false

witness = "virtualcoin"












Copy the contents above to your config.ini file and change only the following options.

On the witness option, set it to your Steemit username.

witness = "virtualcoin"

In our example, we used our steemit username virtualcoin

On the private-key option, set it to your Steemit account ACTIVE PRIVATE KEY..


Now, it is time to start your Steem witness node daemon.

# cd /root
# steemd

Wait for the synchronization of the blockchain to end.

The blockchain synchronization might take days or weeks.

After finishing the blockchain synchronization, you should start seeing messages like these:

Got 56 transactions on block 20094300 by good-karma -- latency: 606 ms
Got 60 transactions on block 20094301 by blocktrades -- latency: 710 ms
Got 47 transactions on block 20094302 by pharesim -- latency: 732 ms
Got 50 transactions on block 20094303 by steemychicken1 -- latency: 776 ms
Got 60 transactions on block 20094296 by someguy123 -- latency: 613 ms

This means that your Steem witness is up and running

Use the following command to stop the Steem service:

# [CRTL + C]

Steem - Active Private key

If you don't know how to get you ACTIVE PRIVATE KEY, here is a quick tutorial:

Go to the website steemit.com, access the Wallet menu and select the Permissions option.

Steem witness key

On the permission menu, you will be presented to 4 public keys named: POSTING, ACTIVE, OWNER and MEMO.

Locate the ACTIVE option, click on the LOGIN TO SHOW button and enter your Steemit password.

After entering the Steemit password, click on the LOGIN TO SHOW button and your ACTIVE PRIVATE KEY key will be shown.

Copy this value and use it on the configuration file private-key option.

Steem - Reporting for Duty

After finishing the installation of your Steem witness,  you need to let the network know that you are available.

After the Steemd service finishes the Blockchain synchronization, you need to access the local wallet.

# cd /root
# cli_wallet

Now, let's protect the local wallet by setting a password.

# set_password "kamisama123"

In our example, we set the password kamisama123.

To unlock the local wallet use the following command.

# unlock "kamisama123"

The next step, is to import your steem account's ACTIVE PRIVATE KEY inside the local wallet.


Time to notify the network of your witness.

# update_witness "virtualcoin" "https://steemit.com/witness-category/@virtualcoin/my-witness-thread" "STM6ABCDEFGHIJKLMONPRST" {"account_creation_fee":"0.100 STEEM","maximum_block_size":65536,"sbd_interest_rate":0} true

On the command above, you need to change my username virtualcoin to your Steem username.

On the command above, you need to change my ACTIVE PUBLIC KEY STM6ABCDEFGHIJKLMONPRST to your Steem ACTIVE PUBLIC KEY.

As a Witness, you are supposed to inform the system about the Steem Based Dolar price.

use the following command to notify the price to the system:

# publish_feed virtualcoin { "base":"3.989 SBD", "quote":"1.000 STEEM"} true

After finishing everything, you can verify the status of your Steem witness.

# get_witness virtualcoin