Easily run bitcoind + Fulcrum via Docker Compose
CURRENTLY WIP, but should work without issues.
- Remove trust in other Bitcoin nodes or Electrum servers
- Drastically improve your transactional privacy in Bitcoin
- Faster/potentially more reliable wallet sync than using centralized servers, especially over clearnet
- Run in one place (home, VPS, etc.), connect many wallets/apps
- Greatly simplifies installation
- Greatly simplifies updates
- Automatically runs on boot and restarts if a simple issue happens
- Makes the install much more portable across OSs and Linux distros
- Introduces trust in the Docker image maintainers
- Introduces trust in Docker Hub (the hosting platform for most Docker images)
As of writing, the following requirements apply:
- This assumes Linux, YMMV on another OS but Docker is very portable.
- CPU: The more the merrier, but can run with low end hardware
- RAM: The more the merrier, but can run with low end hardware (if lower than 8GB you will need to remove dbcache and Fulcrum memory variables!)
- Disk: Fast disk is very important, you should only run this on an SSD minimum, NVMe drive recommended
- Current disk usage as of October 2022:
- bitcoind:
500GB
- Fulcrum:
120GB
- bitcoind:
- Recommended free space:
750GB+
- Current disk usage as of October 2022:
- Docker installed: https://docs.docker.com/engine/install/
- Docker Compose plugin installed: https://docs.docker.com/compose/install/
git clone https://github.com/sethforprivacy/easy-fulcrum.git && cd easy-fulcrum
- Configure RPC auth/user/password in the
.env
file- Be sure to change the default options, as they are insecure!
- Choose a username and generate a secure password
- Generate the
RPC_AUTH
value with https://github.com/jlopp/bitcoin-core-rpc-auth-generator
- Increase Fulcrum memory variable if you can afford to give it more than 2GB of RAM during initial sync
- The more you give it here the faster initial sync will be, and this RAM is only allocated during initial sync
- Increase bitcoin dbcache variable in
bitcoin.conf
if you can afford to give it more than 2GB of RAM
docker compose up -d
- To tail logs, i.e. follow sync status:
docker compose logs --follow --tail=50
- To update bitcoind/fulcrum:
docker compose pull && docker compose up -d
By default, only the p2p port for bitcoind and the SSL port for Fulcrum are exposed on the host. If you'd like to reach either of these externally forward the necessary ports from your router.
Note: if you need bitcoind RPC for other apps or tools, you can expose it by removing the 127.0.0.1:
before 8332:8332
in the docker-compose.yml
file
- If internal to your network, point your wallet (i.e. Envoy or Sparrow to your hosts internal IP address (i.e. 192.168.x.xxx) and use port
50002
- i.e. for Envoy, use
ssl://192.168.1.2:50002
and for Sparrow use192.168.1.2
, set port to50002
, and check "Use SSL"
- i.e. for Envoy, use
- If you're outside of the network, first forward port
50002
(if needed) to Fulcrum and then connect using the hosts external (internet-facing) IP address plus the port you exposed (normally also50002
)- i.e. for Envoy, use
ssl://my.home.dns:50002
and for Sparrow usemy.home.dns
, set port to50002
, and check "Use SSL"
- i.e. for Envoy, use
- @kylemanna for the excellent bitcoin Docker image: https://github.com/kylemanna/docker-bitcoind
- @cculianu for the incredible Fulcrum: https://github.com/cculianu/Fulcrum
- @jlopp for the awesome Bitcoin config and rpcauth generators: https://github.com/jlopp/bitcoin-core-rpc-auth-generator