Appearance
How to run a pruned Monero node (monerod) on a VPS
Running your own Monero node means your wallet talks to a daemon you control instead of a random remote node that can see your IP address and the timing of your requests. A pruned node keeps roughly one third of the blockchain data while still validating everything. This guide follows the official Monero systemd setup on Ubuntu 24.04 and adds pruning.
What you need
- A VPS with 6 vCPU, 12 GB RAM and 192 GB of disk. On DataPasa that is VPS-5. A pruned database takes around 110 GB and keeps growing, so smaller disks run out quickly. Our crypto node VPS page compares plans for other networks.
- Ubuntu 24.04 with root access over SSH, see how to connect via SSH.
You can pay for the VPS in XMR directly. The list of accepted coins is on crypto VPS hosting.
Step 1. Download monerod and verify it
Check the latest CLI version on getmonero.org/downloads and set it in a variable without the v:
bash
VERSION=0.18.5.1
cd /tmp
wget https://downloads.getmonero.org/cli/monero-linux-x64-v${VERSION}.tar.bz2Import the key of binaryFate, who signs the list of hashes, and check its fingerprint:
bash
wget -O binaryfate.asc https://raw.githubusercontent.com/monero-project/monero/master/utils/gpg_keys/binaryfate.asc
gpg --keyid-format long --with-fingerprint binaryfate.asc
gpg --import binaryfate.ascThe fingerprint must be 81AC 591F E9C4 B65C 5806 AFC3 F0AF 4D46 2A0B DF92. Now download the signed hash list and verify it:
bash
wget -O hashes.txt https://www.getmonero.org/downloads/hashes.txt
gpg --verify hashes.txtLook for Good signature from "binaryFate". Finally compare the archive hash with the signed list:
bash
grep "monero-linux-x64-v${VERSION}.tar.bz2" hashes.txt | sha256sum --checkThe output must be monero-linux-x64-VERSION.tar.bz2: OK.
Step 2. Install the binaries and create a user
bash
apt install -y bzip2
tar -xjf monero-linux-x64-v${VERSION}.tar.bz2
mv monero-x86_64-linux-gnu-v${VERSION}/* /usr/local/bin/
chown root:root /usr/local/bin/monero*
monerod --versionCreate the service user and the directories for config, blockchain and logs, exactly as in the official guide:
bash
useradd --system monero
mkdir -pm 750 /etc/monero /var/lib/monero /var/log/monero
chown root:monero /etc/monero
chown monero:monero /var/lib/monero /var/log/moneroStep 3. Write monerod.conf
Create /etc/monero/monerod.conf:
bash
nano /etc/monero/monerod.confA private node for your own wallets:
ini
data-dir=/var/lib/monero/bitmonero
prune-blockchain=1
sync-pruned-blocks=1
check-updates=disabled
enable-dns-blocklist=1
log-file=/var/log/monero/monero.log
log-level=0
p2p-bind-ip=0.0.0.0
p2p-bind-port=18080
no-igd=1
out-peers=12
in-peers=48prune-blockchain=1enables pruning. Set it before the first sync. Added later, old data is only pruned logically and the database file does not shrink.sync-pruned-blocks=1accepts already pruned blocks from peers, which saves download traffic.- The full RPC stays on
127.0.0.1:18081, the default. Do not bind it to a public address.
Step 4. Create the systemd service
Create /etc/systemd/system/monerod.service:
ini
[Unit]
Description=Monero Daemon
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/monerod --config-file /etc/monero/monerod.conf --non-interactive
Restart=always
RestartSec=30
User=monero
Group=monero
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.targetStart the node:
bash
systemctl daemon-reload
systemctl enable --now monerod
systemctl status monerodIf you use UFW, open the P2P port so other nodes can connect to you:
bash
ufw allow 18080/tcpStep 5. Watch the sync
monerod accepts commands for the running daemon. Run them on the server:
bash
monerod status
monerod sync_info
tail -n 100 /var/log/monero/monero.logstatus prints the height as current/target with a percentage. The first sync downloads and verifies the whole chain history, which on a VPS usually takes from one to several days. Disk speed matters most, which is where NVMe helps. Check free space from time to time with df -h /var/lib/monero.
Do not interrupt the database
Stop the node with systemctl stop monerod and let it finish. A hard power off during heavy writes can corrupt the LMDB database and force a resync.
Step 6. Connect your wallet
The safest way to use the node from your computer is an SSH tunnel to the local RPC port, so nothing extra is exposed:
bash
ssh -N -L 18081:127.0.0.1:18081 root@YOUR_SERVER_IPWhile the tunnel is open, point your wallet (Monero GUI, Feather or monero-wallet-cli) to the remote node 127.0.0.1:18081.
Public RPC: should you open it?
You can let other people's wallets use your node through the restricted RPC, which hides admin calls. The official guide does it with these lines:
ini
rpc-restricted-bind-ip=0.0.0.0
rpc-restricted-bind-port=18089
public-node=1and a firewall rule ufw allow 18089/tcp. public-node=1 advertises the node on the P2P network so wallets can find it automatically. Leave it out if you want to share the address only with friends.
Before you open it, keep in mind:
- Traffic and load grow. Every connected wallet scans blocks through your node. VPS-5 includes 32 TB of traffic a month, but CPU and disk load rise with users.
- Your IP is public. The node is listed and gets scanned, so keep the rest of the server locked down with UFW and fail2ban.
- Never expose port 18081. The unrestricted RPC allows admin calls like stopping the daemon.
Keep the node running
- Update when a new version is released: download, verify, replace the binaries in
/usr/local/bin, thensystemctl restart monerod. - Keep your DataPasa balance topped up. When it runs out, the server is suspended and deleted after 24 hours together with its disk, so you would have to sync from scratch.
Summary
You verified and installed monerod, enabled pruning before the first sync and run the daemon under systemd with its own user. Your wallets can now use a node you control, privately through an SSH tunnel or publicly through the restricted RPC.