How to Build a Bitcoin Full Node & Personal Mining Pool
Install Ubuntu Server on a dedicated PC, sync the full Bitcoin blockchain, and run public-pool to create your own personal solo mining pool — no third party required.
What You Will Need
- ▸A purpose-built dedicated PC — see the Parts List for the exact build used
- ▸At least 16 GB of RAM for smooth 24/7 operation
- ▸At least 1 TB NVMe SSD (PCIe 4.0 recommended for faster initial sync)
- ▸A stable, wired internet connection
- ▸A USB drive (8 GB+) to install Ubuntu Server
- ▸Basic comfort with typing commands in a terminal
Use Quality Hardware for 24/7 Operation
Step-by-Step Instructions
Install Ubuntu Server 24.04 LTS
Download the Ubuntu Server 24.04 LTS ISO from ubuntu.com/download/server. Flash it to a USB drive using Balena Etcher or Raspberry Pi Imager.
Boot from the USB and follow the installer. Choose Ubuntu Server (minimized) — you do not need a desktop environment. Set a strong password and enable OpenSSH during installation so you can connect remotely.
Use a Static IP Address
192.168.0.100). This ensures the Antminer always knows where to find the pool. You can set this in the network configuration step of the Ubuntu installer.Update the System and Install Dependencies
After the first boot, SSH in from another computer:
ssh [email protected]Then update the system and install required packages:
sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl wget build-essential nodejs npmInstall Bitcoin Core
Download the latest Bitcoin Core release from the official site. Always verify the signature before installing.
# Download Bitcoin Core (check bitcoin.org for the latest version)
wget https://bitcoincore.org/bin/bitcoin-core-27.0/bitcoin-27.0-x86_64-linux-gnu.tar.gz
# Extract and install
tar -xzf bitcoin-27.0-x86_64-linux-gnu.tar.gz
sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-27.0/bin/*Create the Bitcoin data directory and configuration file:
mkdir -p ~/.bitcoin
cat > ~/.bitcoin/bitcoin.conf << 'EOF'
# Enable server mode (required for mining)
server=1
daemon=1
# RPC credentials (change these!)
rpcuser=bitcoinrpc
rpcpassword=YourStrongPasswordHere
# Allow connections from local network
rpcallowip=127.0.0.1
rpcallowip=192.168.0.0/24
# Enable transaction indexing
txindex=1
# Limit memory usage (adjust based on your RAM)
dbcache=4096
EOFStart Bitcoin Core and begin the initial blockchain sync:
bitcoind -daemonInitial Sync Takes Time
bitcoin-cli getblockchaininfoInstall Node.js and public-pool
public-pool is the open-source solo mining pool software that connects your Antminer to your Bitcoin node. Install it from GitHub:
# Install Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# Clone public-pool
cd ~
git clone https://github.com/benjamin-wilson/public-pool.git
cd public-pool
# Install dependencies
npm install
# Copy and edit the config
cp .env.example .env
nano .envIn the .env file, set the following critical values:
# Your Bitcoin node RPC credentials (must match bitcoin.conf)
BITCOIN_RPC_URL=http://127.0.0.1:8332
BITCOIN_RPC_USER=bitcoinrpc
BITCOIN_RPC_PASSWORD=YourStrongPasswordHere
# The port miners connect to (default 3333)
STRATUM_PORT=3333
# The port for the web dashboard
API_PORT=3334Run public-pool with PM2 (Auto-Restart)
Install PM2, a process manager that keeps public-pool running automatically and restarts it if it crashes:
sudo npm install -g pm2
# Start public-pool
cd ~/public-pool
pm2 start npm --name "public-pool" -- start
# Save the process list so it restarts after reboot
pm2 save
pm2 startup # Follow the instructions it printsVerify it is running:
pm2 status
pm2 logs public-pool --lines 20Configure the Firewall
Open the required ports so miners can connect and you can access the dashboard:
sudo ufw allow 22/tcp # SSH
sudo ufw allow 3333/tcp # Stratum mining port
sudo ufw allow 3334/tcp # public-pool web dashboard
sudo ufw enableVerify Everything is Working
Check that Bitcoin Core is syncing and public-pool is running:
# Check Bitcoin Core sync progress
bitcoin-cli getblockchaininfo | grep -E "blocks|headers|verificationprogress"
# Check public-pool is listening on port 3333
ss -tlnp | grep 3333Access the public-pool web dashboard in your browser:
http://192.168.0.100:3334Part 1 Complete!
Hardware Performance Reference
| Component | Typical Load | Notes |
|---|---|---|
| AMD Ryzen 5 5600G | 45–55W | Well below 65W TDP — runs cool |
| 16GB DDR4-3200 | ~6W | Dual channel for better bandwidth |
| 1TB NVMe SSD | ~3W | PCIe 4.0 for fast initial sync |
| Total System | ~86W typical | ~$6.20/month at $0.10/kWh |