If you want to accept Bitcoin (and many more kinds of crypto, such as Ethereum, Litecoin, or Monero) payments without depending on third parties, BTCPay is your answer.
The challenge, though? A full Bitcoin node consumes over 600GB of storage at the time of writing — which can be a significant expense when paying for hosting (and this is only Bitcoin). The solution? Running a pruned node, which gives you the same validation benefits while using as little as 60GB of space, depending on what crypto currencies you want to support. Quite a bit less space to say the least.
That said, in this guide, I'll walk you through how to set up a pruned BTCPay server. Let's dive in.
What is BTCPay and why use pruning?
BTCPay Server is an open-source, self-hosted payment processor that lets you accept Bitcoin and other cryptocurrencies directly, without intermediaries taking fees or controlling your funds. When you run BTCPay Server, payments go straight to your wallet—no middlemen, no permission needed.
By default, Bitcoin nodes download the entire blockchain history (over 600GB and growing). Pruning is a Bitcoin Core feature that discards older transaction data after verification, keeping only recent blocks and the UTXO set (unspent transaction outputs). This dramatically reduces storage requirements.
First things first
For a pruned BTCPay server, you'll need a server or VPS with:
- 2+ CPU cores
- 2GB RAM minimum (4GB+ suggested)
- 80GB+ storage (room for OS, a pruned blockchain, and BTCPay configuration files)
- Docker support
xTom's V.PS platform is perfect for this. You can grab a plan here, such as our "Premium" package that'll work perfectly for self-hosting a BTCPay server. Otherwise, make sure you have a server with the minimum specs above.
Also:
- A domain name for your BTCPay server
- Basic command line familiarity
- SSH client (built into macOS/Linux, PuTTY for Windows)
Now let's set up your BTCPay server.
Step 1: Secure and prepare your server
For my server, I've picked Ubuntu 22.04 LTS, as it's currently the officially recommended Linux distribution by BTCPay, but anything that supports Docker should work.
If you’re using another distribution, you’ll need to adjust certain commands (like changing apt
to dnf
/yum
etc.). There may be minor differences for Debian as well.
Connect to your server using SSH as root:
ssh root@your_server_ip
Update the system
apt update && apt upgrade -y
Install essential packages
apt install -y apt-transport-https ca-certificates curl gnupg software-properties-common ufw
Set up basic firewall rules
ufw allow ssh
ufw allow http
ufw allow https
ufw enable
Step 2: Install Docker and Docker Compose
BTCPay uses Docker for easy deployment.
On Ubuntu, you can install Docker with:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-compose
systemctl enable --now docker
For Debian 12, we have a guide here. Other distributions are similar but may require different commands.
Step 3: Install BTCPay with pruning enabled
Still as root, do the following:
mkdir -p ~/btcpay
cd ~/btcpay
git clone https://github.com/btcpayserver/btcpayserver-docker
cd btcpayserver-docker
Run your BTCPay setup parameters
export BTCPAY_HOST="btcpay.EXAMPLE.com"
export NBITCOIN_NETWORK="mainnet"
export BTCPAYGEN_CRYPTO1="btc"
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage-s"
export BTCPAYGEN_REVERSEPROXY="nginx"
export BTCPAYGEN_LIGHTNING="clightning"
export BTCPAY_ENABLE_SSH=true
Note: The
opt-save-storage-s
fragment enables pruning, using about 60GB for Bitcoin’s blockchain data. For additional BTCPay settings available, such as enabling additional crypto currencies, view their documentation here.
Configure your BTCPay domain
In your domain registrar or DNS provider, create an A record pointing to your server’s IP:
Type: A
Host: btcpay (or any subdomain you like)
Value: Your_Server_IP
TTL: 3600
After DNS propagation (1-24 hours), BTCPay will automatically configure SSL using Let’s Encrypt when you access your domain.
Run the BTCPay Server setup script
The setup script must be sourced (not simply executed) so that its environment exports persist in your current shell.
Run:
. ./btcpay-setup.sh -i
(The leading .
is crucial—it means "source this script.")
This process will take some time as it downloads Docker images, configures containers, and starts synchronizing the Bitcoin blockchain in pruned mode.
Step 4: Access and set up your BTCPay server
Once installation is complete and DNS has propagated:
- Open your browser and navigate to
https://your-domain.com
- Create an administrator account
- Set up your first store
- Configure your Bitcoin wallet
How to manage your pruned node
To verify your node is pruned:
cd ~/btcpay/btcpayserver-docker
./bitcoin-cli.sh getblockchaininfo
Look for:
"pruned": true
— Confirms pruning is enabled"pruneheight"
— Oldest block stored"size_on_disk"
— Current blockchain data usage
Check BTCPay services:
./btcpay-status.sh
Update BTCPay:
./btcpay-update.sh
Backup best practices
Even with a pruned node, regular backups are essential.
Create backups of:
- Your BTCPay Server configuration:
cp ~/btcpay/btcpayserver-docker/.env ~/backups/env-$(date +%Y%m%d).backup
- Your Bitcoin wallet file:
cd ~/btcpay/btcpayserver-docker
./bitcoin-cli.sh backupwallet ~/backups/wallet-$(date +%Y%m%d).backup
Troubleshooting common issues
Synchronization seems stuck
Bitcoin initial synchronization can take days.
To check progress:
./bitcoin-cli.sh getblockchaininfo
Compare "blocks" with "headers" to see how far along you are.
Out of disk space
If you run out of space despite pruning:
- Check your pruning configuration:
grep BITCOIN_PRUNE ~/btcpay/btcpayserver-docker/.env
- Consider increasing your storage
Connection issues
If you can't connect to your BTCPay Server:
- Verify your firewall allows HTTP/HTTPS traffic (the following is for UFW):
sudo ufw status
- Check if your containers are running:
cd ~/btcpay/btcpayserver-docker
docker-compose ps
Conclusion
Setting up a pruned BTCPay server gives you the perfect balance of sovereignty and efficiency. You maintain full control over your payment processing, it's easy to setup, and just works. What more is there to want out of a payment processor?
As mentioned above our VPS line will work great for a BTCPay server, but if you're looking to expand beyond a VPS, xTom offers a full range of solutions to support your growth, from dedicated servers with abundant storage for full nodes to colocation services for your own hardware. Check out xTom's services page to explore all options.
Thanks for reading, and here's to control over your own payment processing! ;-)
Frequently asked questions about BTCPay
What is the difference between a pruned and full Bitcoin node?
A full Bitcoin node stores the entire blockchain history (over 600GB), while a pruned node only keeps recent blocks and the UTXO set after validating the entire chain. Pruned nodes provide the same security benefits while using significantly less storage.
How much storage does a pruned BTCPay server need?
A pruned BTCPay Server can run comfortably on a 80GB NVMe VPS from xTom's V.PS platform. The Bitcoin blockchain data will use approximately 60GB (depending on your pruning settings), with the rest available for the BTCPay Server application, database, and future growth.
Will a pruned node affect my ability to accept Bitcoin payments?
No. A pruned BTCPay Server can process payments just as effectively as one running on a full node. The pruning process only removes historical data after validation, not information about current unspent outputs needed for payment processing.
How long does initial synchronization take on xTom's infrastructure?
With xTom's high-performance NVMe storage and reliable network, initial Bitcoin synchronization typically takes less than one day with pruning enabled. This varies based on network conditions, and your chosen VPS specifications. Higher-tier V.PS plans with more CPU cores will synchronize faster.
Can I upgrade from a pruned to a full node later?
Yes, but you'll need to start synchronization from scratch. If you anticipate needing a full node in the future, consider xTom's dedicated servers with larger storage capacities instead of a VPS solution.
Is a pruned BTCPay server secure for business transactions?
Absolutely. A pruned node validates the entire blockchain just like a full node — it simply discards older blocks after verification. Your pruned BTCPay server maintains the same security properties as a full node for current transactions.
Do I need technical knowledge to maintain a BTCPay server?
Basic Linux command line skills are helpful for maintenance and troubleshooting. However, once set up, a BTCPay server requires minimal intervention, mostly consisting of occasional updates.