If you've been experimenting with cryptocurrencies, you probably discovered that you can't properly operate your wallet unless it's fully synced. As blockchain sizes and transaction rates grow, wallet synchronization becomes problematic for a lot of people. This is what "wallet sync" search term looks like on Google Trends:

walletsync

Solution: set up your own dedicated blockchain node on your local network and point your wallets to it. Your wallets will always sync instantly.

I like having a decicated machine for keeping up with the blockchain data (Ethereum and Monero in my case). For a device that's always on and does a lot of random reads/writes, I prefer energy efficient, SSD-based hardware. HD used to make Stream 200-010 Mini Desktop (discontinued). It's a thing of beauty - quiet (fanless), energy efficient (5..10 Watts), and easy to upgrade (first thing I did was swap out the standard 32GB SSD for 128GB):

IMG_5146

HP Stream Mini Desktop is unfortunately no longer available for sale, but may occasionally be found on eBay. Amazon offers a wide selection of similar hardware.

Once Ubuntu is set up, you can proceed with installing the Monero daemon software.

First, make sure that port 18080 is open (UFW example):

sudo ufw allow 18080

Download and extract the current Monero core binaries:

wget https://downloads.getmonero.org/linux64
mkdir monero
tar -xjvf linux64 -C monero
cd monero

Take a look at the various settings monerod accepts:

./monerod --help

We will use the following settings:
--restricted-rpc to enable RPC access (it's disabled by default)
--rpc-bind-ip to bind to a specific (public) network interface
--confirm-external-bind to allow external connections

Launch monerod with these settings (replace 192.168.1.99 with the IP address of your node):

./monerod --restricted-rpc --rpc-bind-ip 192.168.1.99 --confirm-external-bind

You should now be able to connect to your Monero daemon via RPC from other machines, using command-line tools:

./monero-wallet-cli --daemon-address 192.168.1.99:18081

If all goes well, you should see your wallet connecting, and syncronizing very quickly:

Mac:Monero mike$ ./monero-wallet-cli --daemon-address 192.168.1.99:18081
Monero 'Helium Hydra' (v0.11.1.0-release)
Logging to ./monero-wallet-cli.log
Specify wallet file name (e.g., MyWallet). If the wallet doesn't exist, it will be created.
Wallet file name (or Ctrl-C to quit): personalwallet
Wallet and key files found, loading...
Wallet password: *******************************
Opened wallet: 46URAzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Use "help" command to see the list of available commands.

Starting refresh...
Refresh done, blocks received: 4                                
Balance: 0.593885362165, unlocked balance: 0.593885362165
Background refresh thread started
[wallet 46URAz]:

Similarly, you can specify your new local daemon in the GUI wallet:
monerowallet

Now your wallets are lightning-fast.