This is the first in a multiple-part guide to installing and configuring an x86 bitcoin node from official binaries, including Bitcoin Core, Dojo, Whirlpool, Fulcrum and Mempool Explorer packages.
Manually configuring your own node is a great way to learn about the inner workings of a Bitcoin node. Another benefit is the ability to individually manage package updates whenever desired instead of waiting for all-in-one node devs to push updates, giving you sovereignty over your node.
However, this sovereignty comes with responsibility since you will have no support channels to lean on should you encounter downtime. The packages we cover in the guide do; however, all have great documentation wikis, so help is never far away.
You can use any PC, but you will need a 1TB SSD or larger (not HDD), and I recommend a minimum of 8GB of system memory. I also recommend checking your system’s BIOS power settings and, if one is available, enabling any automatic power-on modes. This reduces downtime after power loss by automatically booting the device once power returns.
Those wanting a device with a footprint similar in size to a traditional node may want to check out the Lenovo ThinkCentre M series or, my favourite, the Dell Optiplex M range of microcomputers.


The first step is installing Ubuntu Server on the machine. If you’re unsure how to do this, check out my previous article on installing Ubuntu Server.
Installing Bitcoin Core.
Before anything, create your Bitcoin user and provide sudo permissions. You will be prompted to create a password for the new user, so create a strong password, avoiding special characters, and back it up safely. Hit enter on the prompts that follow, leaving at defaults.
sudo adduser satoshi
sudo usermod -aG sudo satoshi
exit
SSH back in as your new user, “satoshi“, using your new password. You can now run a full system update and install all required dependencies.
sudo apt update && sudo apt upgrade -y
sudo apt install curl gpg unzip tor -y
Next, create and enter a downloads directory.
mkdir ~/downloads
cd ~/downloads
Next, visit bitcoincore.org and locate the page for the most current Bitcoin version, avoiding any releases marked “test“.
At the time of writing, version 25.0 is the most recent release. Copy the URL for the latest “x86_64-linux-gnu.tar.gz” package and download it using the “wget” command.
wget https://bitcoincore.org/bin/bitcoin-core-25.0/bitcoin-25.0-x86_64-linux-gnu.tar.gz
Do the same for the “SHA256SUMS” and “SHA256SUMS.asc” files listed on the same page.
wget https://bitcoincore.org/bin/bitcoin-core-25.0/SHA256SUMS
wget https://bitcoincore.org/bin/bitcoin-core-25.0/SHA256SUMS.asc


Now verify the checksum of your download.
sha256sum --ignore-missing --check SHA256SUMS
Ignore any warnings or errors but ensure you get an “ok” message, for example:- “bitcoin-24.1-x86_64-linux-gnu.tar.gz: OK“.
To verify the validity of the release, you need to check the signatures against the developer keys listed in the official Bitcoin Core repository and import them into your GPG keyring.


The following command will download all keys and import them into your keyring.
curl -L https://api.github.com/repos/bitcoin-core/guix.sigs/tarball --output bitcoin-builders.tgz && tar --strip-components=1 -xzvf bitcoin-builders.tgz --wildcards --no-anchored "bitcoin-core-guix.sigs-*/builder-keys" && gpg --import builder-keys/* && rm bitcoin-builders.tgz && rm -r builder-keys
You can now verify the release’s signatures.
gpg --verify SHA256SUMS.asc
This will output a series of signature checks for each public key that signed the checksums. The keys previously imported into your keyring should show a “gpg: Good signature” message.


Remove the downloaded verification files; they are no longer required.
rm SHA256SUMS && rm SHA256SUMS.asc
Next, unpackage your Core download and remove the archive.
tar xzf bitcoin-*-x86_64-linux-gnu.tar.gz
rm -r bitcoin-*-x86_64-linux-gnu.tar.gz
Now install Bitcoin & remove the leftover folder.
sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-*/bin/*
rm -r bitcoin-*/
Now that Bitcoin is installed start the daemon with the following command. The blockchain will immediately begin downloading.
bitcoind -daemon
Next, create a Bitcoin configuration file.
nano ~/.bitcoin/bitcoin.conf
Paste the following lines into the file.
server=1 txindex=1 daemon=1 pruned=0 rpcport=8332 rpcbind=0.0.0.0 rpcallowip=127.0.0.1 rpcallowip=10.0.0.0/8 rpcallowip=172.0.0.0/8 rpcallowip=192.0.0.0/8 zmqpubrawblock=tcp://0.0.0.0:28332 zmqpubrawtx=tcp://0.0.0.0:28333 zmqpubhashblock=tcp://0.0.0.0:28334 whitelist=127.0.0.1
If you plan to use your node with the Bisq Network P2P exchange, you must also include the following line.
peerbloomfilters=1
You also have the option of enabling or disabling “Mempool Full-RBF“. If you want to ensure that your choice persists through updates, regardless of whatever defaults future Core releases settle on, then I recommend flagging this in your conf file using either the enable (1) or disable (0) flag. You can ignore this line if you are happy to flow with any defaults chosen for you in future updates.
mempoolfullrbf=0
Leave the file open and start a new terminal session. SSH into the node and download the raw “rpcauth.py file” from the Bitcoin repository with the “wget” command.
wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/share/rpcauth/rpcauth.py
chmod +x rpcauth.py
Create a strong & unique RPC password, avoiding special characters, and record it safely. Edit the following command to include your newly created password.
./rpcauth.py bitcoin password
In the output, copy the RPC string. It will start like this:- “rpcauth=bitcoin:“.
Paste this, including the long string of numbers that follow, into the bottom of the “bitcoin.conf” file, still open in your first terminal window.
You can then save and exit the file by pressing “control+x” and confirm by pressing “y” and then “enter“. The second terminal you opened can be safely closed.
Next, remove the “rpcauth.py” file.
rm rpcauth.py
Now that you have a valid configuration file, the next step is creating a service file that allows the Bitcoin CLI to start whenever the node boots automatically.
First, stop the CLI.
bitcoin-cli stop
Copy the link to the raw “bitcoind.service” file in the Bitcoin repository. You need to download the file to a different directory this time.
cd /etc/systemd/system/
sudo wget https://raw.githubusercontent.com/bitcoin/bitcoin/25.x/contrib/init/bitcoind.service
sudo nano bitcoind.service
The file will open. You need to make several edits.
####change ExecStart=/usr/bin/bitcoind -daemonwait \ -pid=/run/bitcoind/bitcoind.pid \ -conf=/etc/bitcoin/bitcoin.conf \ -datadir=/var/lib/bitcoind ##to ExecStart=/usr/local/bin/bitcoind -daemon \ -pid=/run/bitcoind/bitcoind.pid \ -conf=/home/satoshi/.bitcoin/bitcoin.conf \ -datadir=/home/satoshi/.bitcoin ####comment out ExecStartPre=/bin/chgrp bitcoin /etc/bitcoin ##like this #ExecStartPre=/bin/chgrp bitcoin /etc/bitcoin ####edit User=bitcoin Group=bitcoin ##to User=satoshi Group=satoshi ####comment out ProtectHome=true ##like this #ProtectHome=true
Exit the file with “control+x”, ensuring you save it when prompted with “y” and then “enter“. Next, activate the service file.
sudo systemctl enable bitcoind
sudo systemctl start bitcoind
sudo systemctl status bitcoind
You should see a green light and an “active” status. You can exit the output in the usual way with “control+c”.
Before continuing, wait until the initial block download completes. IBD speeds vary depending on bandwidth, but it can complete as quickly as 24 hours with a good connection. Use the following command to monitor progress.
cd
tail -f .bitcoin/debug.log
Once the logs show “progress=1.000000“, the IBD is complete.
Configuring Tor.
Tor needs to be configured to work with the Bitcoin CLI. First, check that Tor is operational.
sudo systemctl status tor
Again, you should look for the green light and “active” status. Exit the status output and run the following command to open the “torrc” file.
sudo nano /etc/tor/torrc
Paste the following at the bottom of the file and then save and exit.
# Hidden Service Bitcoind ControlPort 9051 CookieAuthentication 1 CookieAuthFileGroupReadable 1
Now restart Tor.
sudo systemctl restart tor
Then add your Bitcoin user to the Tor group.
sudo usermod -aG debian-tor satoshi
You now need to make further edits to the “bitcoin.conf” file.
nano .bitcoin/bitcoin.conf
At the very bottom, paste the following lines.
# Hidden Service Bitcoind proxy=127.0.0.1:9050 listen=1 bind=127.0.0.1 onlynet=onion
Your first peer needs to be added manually. This temporary edit is required to plug your node into the network of other Tor nodes.
Leave the “bitcoin.conf” file open in the terminal and open a web browser. Visit the Tor node page at Bitnodes.io and scroll down to the list of active Tor nodes. Select any onion address from the list.
Note: Bitnodes has recently started blocking the IP addresses of many VPN providers. If you encounter difficulties accessing the above link, either disable your VPN or access the link using a Tor browser.


Copy the address and port number, then returning to your terminal, paste it at the bottom of the conf file. As shown in the example below, you need to start the line with the “addnode=” prefix.
addnode=ufi6x4yympldoxmzgszvq5pb3pzixelxicvrhssrmky23f5bgxfxlfqd.onion:8333
Save and exit the conf file, then reboot the node.
sudo reboot
After a minute or so, SSH back into the node. You need to check that your node is successfully connecting to peers. Run the following command several times until you see four or five connected peers.
bitcoin-cli getconnectioncount
You may now remove the node that you added manually. Open your “bitcoin.conf” file and delete the “addnode=” line using “control+k“, then save and exit.
nano .bitcoin/bitcoin.conf
Next, restart the CLI and, after a minute, check that you are still connecting to other Tor nodes.
sudo systemctl restart bitcoind
bitcoin-cli getconnectioncount
Finally, you need to confirm that network traffic only passes through Tor. Use the following command and ensure that the output shows a “reachable false” status for both “IPV4” and “IPV6“. You also want to confirm that “onion” shows a “reachable true” status.
bitcoin-cli getnetworkinfo


The output of this command also displays your Bitcoin Core onion address. This is useful for services requiring a direct connection to Core, such as the Bisq application. You can also make a specific request for your onion address with the following command.
bitcoin-cli getnetworkinfo | grep address.*onion
Congratulations if you have made it this far; you now have a fully synchronised Bitcoin Core installation configured with Tor.
In the next article, we will be installing the Fulcrum indexer.