All guides
Getting started
VPS
- VPS operating systems
- VPS snapshots and
off-site backups - How to host your own VPN on a VPS with WireGuard
- How to run a Tor relay, bridge or onion service on a VPS
- How to
self-host BTCPay Server on a VPS - How to run a Bitcoin or Monero node on a VPS
Dedicated servers
- Using IPMI and the KVM console on a dedicated server
- Choosing a RAID layout for your dedicated server
Windows RDP
Windows Server 2019 , 2022 or 2025 vsWindows 10 and 11 for RDP- How to connect to a Windows RDP server from any device
GPU servers
Security
On this page
- What you need to run a Bitcoin node or a Monero node on a VPS
- Run a Bitcoin node on a VPS with Bitcoin Core
- Run a Monero node on a VPS with monerod
- Share your node as a Monero remote node
- Route your node through Tor or I2P (optional)
- Privacy: a node on a VPS versus a node at home
- Bandwidth, mining and our rules for nodes
- Update Bitcoin Core and monerod
- Frequently asked questions
To run a Bitcoin node on a VPS, verify and install Bitcoin Core, set prune=550bitcoindmonerod
The steps use an Offshore VPS on
What you need to run a Bitcoin node or a Monero node on a VPS
Bitcoin Core requirements, like Monero's, come down to disk. A pruned node checks every block but keeps only what it still needs; a full node keeps the whole history. Sizes on
| Node | Disk | RAM | Traffic | Plan to start with |
|---|---|---|---|---|
| Bitcoin Core, pruned | About | Whole chain once, then about | Sloop ( | |
| Bitcoin Core, full | The same, plus | Dedicated server | ||
| Monero, pruned | About | About a third of the chain once | Schooner ( | |
| Monero, full | About | Whole chain once | Frigate ( | |
| Both, pruned | About | Both of the above | Brigantine ( |
- Bitcoin: block data reached
771 GB on25 September 2026 , up82 GB ina year , on Blockchain.com's blockchain size chart. Bitcoin Core 31.1's source budgets856 GiB for a synced node, undo data and the14 GiB UTXO set (the chainstate) included, with the 5 to 10% headroom of its release process. The bitcoin.org full node guide asks for2 GB of RAM and counts about20 GB of downloadsa month , and often200 GB or more of uploads. - Monero: the docs' node guide gave about
250 GiB full and100 GiB pruned on20 January 2026 . It recommends4 GB of RAM or more and625 GiB of SSD for a full node,250 GiB for a pruned one. A public full node reported275 GiB on26 September 2026 : showsget_info , rounded up to the nextdatabase_size5 GiB on a restricted RPC port.
For a Bitcoin node VPS, the Sloop meets bitcoin.org's
A full Bitcoin node needs a dedicated server. Two
Run a Bitcoin node on a VPS with Bitcoin Core
Bitcoin Core 31.1 is the current version on the download page; its release notes list fixes for excessive chainstate disk writes and an IP address leak in private broadcast.
Download and verify Bitcoin Core
Set the version once; later commands reuse it:
apt update
apt install -y wget gnupg git
cd /root
VERSION=31.1
wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/bitcoin-$VERSION-x86_64-linux-gnu.tar.gz
wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS
wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS.asc
sha256sum --ignore-missing --check SHA256SUMS
The check must print bitcoin-31.1-x86_64-linux-gnu.tar.gz: OK. Several builders sign each release; import their keys from the guix.sigs repository, as the download page shows:
git clone --depth 1 https://github.com/bitcoin-core/guix.sigs
gpg --import guix.sigs/builder-keys/*
gpg --verify SHA256SUMS.asc SHA256SUMS
Each valid signature prints a line starting with gpg: Good signatureBAD signaturefanquake.gpgE777 299F C265 DD04 7930 70EB 944D 35F9 AC3D B76A. Then install the two programs a server needs:
tar -xzf bitcoin-$VERSION-x86_64-linux-gnu.tar.gz
install -m 0755 -o root -g root -t /usr/local/bin bitcoin-$VERSION/bin/bitcoind bitcoin-$VERSION/bin/bitcoin-cli
bitcoind -version
Write bitcoin.conf for a pruned node
useradd --system --user-group --shell /usr/sbin/nologin bitcoin
install -d -m 0710 -o root -g bitcoin /etc/bitcoin
cat > /etc/bitcoin/bitcoin.conf <<'EOF'
prune=550
dbcache=1024
maxconnections=40
server=1
rpcbind=127.0.0.1
rpcallowip=127.0.0.1
EOF
chgrp bitcoin /etc/bitcoin/bitcoin.conf
chmod 640 /etc/bitcoin/bitcoin.conf
- prune=550
- At most
550 MiB of block and undo files, the smallest automatic target. It rules out , and undoing it means downloading the whole chain again. Omit it for a full node.txindex - dbcache=1024
- The UTXO cache, in MiB. Since 31.0 the default is 1024 when Bitcoin Core detects at least
4096 MiB of RAM, otherwise 450: set 450 on a2 GB plan. More cache means a faster first sync. - maxconnections=40
- Down from 125: 11 outbound connections plus room for inbound peers, with less memory and traffic.
- server, rpcbind, rpcallowip
JSON-RPC for on localhost only, with cookie authentication. The help text warns: "Do not expose the RPC server to untrusted networks such as the public internet".bitcoin-cli
Start bitcoind with systemd
Bitcoin Core keeps its systemd unit in the source tree, not the archive; fetch it and point it at /usr/local/bin
wget -O /etc/systemd/system/bitcoind.service https://raw.githubusercontent.com/bitcoin/bitcoin/v$VERSION/contrib/init/bitcoind.service
sed -i 's|/usr/bin/bitcoind|/usr/local/bin/bitcoind|' /etc/systemd/system/bitcoind.service
systemctl daemon-reload
systemctl enable --now bitcoind
It runs bitcoindbitcoin/var/lib/bitcoind/usr/etcsystemd-notify --stopping
Open port 8333 for inbound peers (optional)
ufw allow 8333/tcp
The node syncs through outbound connections anyway, but bitcoin.org says you must allow inbound connections to support the network. Allow SSH before you enable UFW, as in the hardening guide, and never open the RPC port, 8332.
Check the sync
bitcoin-cli -datadir=/var/lib/bitcoind getblockchaininfo
blocksheadersverificationprogressinitialblockdownloadfalseprunedtrue-getinfogetblockchaininfo/var/lib/bitcoind/debug.log
Run a Monero node on a VPS with monerod
Monero 0.18.5.1 "Fluorine Fermi" is the current
Download and verify the Monero CLI
Monero lists the hash of each file in hashes.txt
apt update
apt install -y wget gnupg bzip2
cd /root
wget -O binaryfate.asc https://raw.githubusercontent.com/monero-project/monero/master/utils/gpg_keys/binaryfate.asc
gpg --show-keys --with-fingerprint binaryfate.asc
The fingerprint must read 81AC 591F E9C4 B65C 5806 AFC3 F0AF 4D46 2A0B DF92; if not, stop. Import the key and verify the list:
gpg --import binaryfate.asc
wget -O hashes.txt https://www.getmonero.org/downloads/hashes.txt
gpg --verify hashes.txt
Look for Good signature
XMR=v0.18.5.1
wget https://downloads.getmonero.org/cli/monero-linux-x64-$XMR.tar.bz2
sha256sum monero-linux-x64-$XMR.tar.bz2
grep monero-linux-x64-$XMR.tar.bz2 hashes.txt
Both lines must show the same hash, which for 0.18.5.1 starts with 22a7dda79958
tar -xjf monero-linux-x64-$XMR.tar.bz2
install -m 0755 -o root -g root -t /usr/local/bin monero-x86_64-linux-gnu-$XMR/monerod
monerod --version
Write monerod.conf for a pruned node
As in the docs' node guide, monerod runs as a monero
useradd --system --user-group --shell /usr/sbin/nologin monero
install -d -m 0750 -o root -g monero /etc/monero
install -d -m 0750 -o monero -g monero /var/lib/monero /var/log/monero
cat > /etc/monero/monerod.conf <<'EOF'
data-dir=/var/lib/monero
log-file=/var/log/monero/monero.log
log-level=0
prune-blockchain=1
sync-pruned-blocks=1
p2p-bind-port=18080
no-igd=1
in-peers=48
limit-rate-up=4096
enable-dns-blocklist=1
check-updates=disabled
rpc-bind-ip=127.0.0.1
rpc-bind-port=18081
EOF
chgrp monero /etc/monero/monerod.conf
chmod 640 /etc/monero/monerod.conf
prune-blockchain , sync-pruned-blocks- Pruning "saves 2/3 of disk space w/o degrading functionality", says the monerod reference; set it before the first sync. The second line accepts blocks that peers already pruned, saving transfer. Omit both for a full node.
p2p-bind-port =18080,no-igd - The default
peer-to-peer port, without UPnP, which a server with a public IP address does not need. in-peers =48,limit-rate-up =4096- Inbound peers are unlimited by default; 48 is the cap in the docs' sample. Upload is in kB/s: 4096 is about
34 Mbit/s , half the default. - enable-dns-blocklist,
check-updates =disabled - Refuses peers on a DNS blocklist kept by Monero contributors, and leaves updates to you.
rpc-bind-ip =127.0.0.1- The full RPC on
port 18081 "gives full administrative capabilities over the node", so it stays local.
Start monerod with systemd
This unit comes from the Monero docs; --non-interactive
cat > /etc/systemd/system/monerod.service <<'EOF'
[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.target
EOF
systemctl daemon-reload
systemctl enable --now monerod
Open port 18080 for inbound peers (optional)
ufw allow 18080/tcp
As with Bitcoin, the node syncs without it, and the open port lets other nodes connect to yours; keep 18081 closed.
Check the sync
monerod status
monerod sync_info
statussync_info/var/log/monero/monero.logjournalctl -u monerod
Share your node as a Monero remote node
A Monero remote node serves wallets on other machines. The Monero docs give them a restricted RPC port, 18089, and keep the full RPC on localhost. Add three lines to /etc/monero/monerod.conf
rpc-restricted-bind-ip=0.0.0.0
rpc-restricted-bind-port=18089
public-node=1
ufw allow 18089/tcp
systemctl restart monerod
The restricted port answers public-node=1
The alternative, restricted-rpc=1rpc-bind-ip=0.0.0.0confirm-external-bind=1
Route your node through Tor or I2P (optional)
Install tor from the Tor Project's repository, as in our Tor relay guide; its SOCKS proxy listens on 127.0.0.1:9050 by default.
- Bitcoin Core:
routes outbound connections through Tor, andproxy=127.0.0.1:9050 keeps automatic ones on onion peers. A proxy turns listening off; withonlynet=onion and access to Tor's control port, Bitcoin Core creates its own onion service. Since 31.0,listen=1 sends transactions submitted withprivatebroadcast=1 only over Tor or I2P.sendrawtransaction - Monero:
tx-proxy=tor,127.0.0.1:9050,disable_noisebroadcasts your wallets' transactions over Tor. An onion address needs a line andHiddenServiceDir lines for ports 18084 and 18089 inHiddenServicePort , plus antorrc line; the docs' Tor and I2P guide has them all, and I2P works the same way. Tor needs no open ports.anonymous-inbound
Privacy: a node on a VPS versus a node at home
Peers see your node's IP address. On a VPS, that is the server's address, not your home's, and your internet provider sees connections to one server rather than a node trading data with dozens of peers. Your wallet also stops querying a stranger's node, whose operator "can link transactions to IP addresses", as Moneropedia's remote node entry warns.
A server is not invisible: its host can see traffic metadata, meaning which addresses it talks to, when and how much. Bitcoin Core encrypts connections to peers that support BIP324, which is on by default, and Tor hides your peers as well. We do not log or inspect customer server traffic.
Our records are short: an email address, which can be disposable, your
Bandwidth, mining and our rules for nodes
- Nodes are welcome. Our acceptable use policy allows anything legal where the server runs, and Bitcoin, Monero and Lightning nodes are among the uses we list for our VPS.
- No mining on a VPS or RDP. It takes CPU time from the other customers on the host, so the policy forbids it there, monerod's
built-in miner included. Dedicated and GPU servers allow it. - Fair use. Traffic is unmetered on
1 Gbps ports, but cap a busy public node: inmaxuploadtarget=5G aims forbitcoin.conf5 GiB a day, and caps monerod. If a node causes a problem on a VPS, we tell you in the client area first and suggest a fix, such as a dedicated server, which you can use to its stated capacity.limit-rate-up
The Bitcoin target is soft: near it, Bitcoin Core stops serving blocks older than a week, a major part of the traffic, as bitcoin-cli -datadir=/var/lib/bitcoind getnettotals shows what is left of the current
Update Bitcoin Core and monerod
Neither archive updates itself. For a new version, repeat the download and verification steps with the new version number, then stop the service with systemctl stop bitcoindsystemctl stop monerod
Frequently asked questions
How much disk does a Bitcoin node need?
A full node needs about prune=550
Can I run a Monero node on a VPS?
Yes. A pruned Monero node needed about
Is it legal to run a Bitcoin or Monero node?
A node downloads, checks and relays public data and holds no one else's money, and most crypto rules target businesses such as exchanges. From
Can I mine on a VPS?
No. Our acceptable use policy forbids cryptocurrency mining on VPS and RDP plans, because it takes CPU time from the other customers on the host; that includes monerod's
What is a pruned node?
A pruned node checks every block like a full node, then deletes data it no longer needs. Bitcoin Core with prune=550txindex
Dedicated and GPU customers can open a ticket from the client area with the server’s IP address and what they tried. First reply target: under