This is a set of files to make Bisq run in Docker on the hardware you control, including Raspberry PI
, with the external tor
and noVNC for the remote access. Don't use this on public cloud such as AWS!
Clone this repo, then copy .env.example
to .env
and edit it according to your needs. The following environment variables are used:
USERNAME
andPASSWORD
to authenticate your session in browserTZ
– the timezone, e.g.Europe/London
(optional)JAVA_OPTS
–JVM
options, e.g.-Xms512M -Xmx512M
(optional)BISQ_DESKTOP_OPTS
–Bisq
command line arguments (optional)
The following volumes are created to store tor
and Bisq
data:
tor-etc
(mainly forcontrol_auth_cookie
)tor-data
(storeswww
hidden service)user-data
(allBisq
data)
Be sure to backup tor-data
and user-data
to preserve your www
address and wallet.
Then you just launch it with docker-compose up -d
. It binds to the 8080
port so that you may access it from your LAN. Don't expose this to the Internet, it's unenctypted!
The cool part, you can use e.g. Private Window with Tor
in Brave
browser, or similar to access it from anywhere! To make this work, get your tor
address:
docker-compose exec tor cat /var/lib/tor/www/hostname
When using tor
, the connection is encrypted, despite the Not secure
badge in the browser. The noVNC
complain regarding unencrypted
connection concerns the link between noVNC
and tighVNC
which is inside Docker and moreover is only on localhost
anyway.
There are several things that needs to be addressed to make Bisq
work with acceptable speed on Raspberry Pi (assuming RPi 3B+
or better):
- Use the external SSD. Really, SDXC is the main bottleneck, even with the best available cards. I/O just kills
Bisq
(maybe the controller is bad.) The most affordable option is SanDisk Extreme Pro USB drive (which is, in fact, not USB flash drive, but SSD with USB interface.)RPI 4
can't boot off USB yet, but at least you should put Docker volumes, or the whole/var/lib/docker
on it. - Use a good power supply AND a good cable (e.g. AWG 20.) Few people realize how bad the average USB power supplies & cables are. The pitfall here is that RPi provides very limited means to know if its CPU is throttling.
- Install the heatsink on RPi CPU (for the same reason.) Use this script to check if CPU is throttling or not.
- Use the minimal
Raspbian
image and change memory split in favor of main memory i.e.16 MB
for video framebuffer. - Comment the
CONF_SWAPSIZE
line in/etc/dphys-swapfile
(assuming you already added SSD to your configuration.) Not necessary if you only store Docker volumes on SSD. - Use
JAVA_OPTS
to limit Java heap size, i.e.-Xms512M -Xmx512M
. - Use
BISQ_DESKTOP_OPTS
to limit the number of network connections, i.e.--maxConnections=6 --msgThrottlePerSec=40 --msgThrottlePer10Sec=200 --numConnectionForBtc=3
- In case of
RPi 3B+
, useWi-Fi
as Ethernet sits on the sameUSB 2.0
bus as your external SSD.
Be patient, initial sync takes a long time. While syncing, Bisq
GUI becomes unresponsive on RPi. After the sync is complete, go to settings and disable prevent standby
setting. It doesn't have much sense inside Docker, but generates unnecessary warnings about Bisq
inability to access the audio device.