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:
USERNAMEandPASSWORDto authenticate your session in browserTZ– the timezone, e.g.Europe/London(optional)JAVA_OPTS–JVMoptions, e.g.-Xms512M -Xmx512M(optional)BISQ_DESKTOP_OPTS–Bisqcommand line arguments (optional)
The following volumes are created to store tor and Bisq data:
tor-etc(mainly forcontrol_auth_cookie)tor-data(storeswwwhidden service)user-data(allBisqdata)
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 4can't boot off USB yet, but at least you should put Docker volumes, or the whole/var/lib/dockeron 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
Raspbianimage and change memory split in favor of main memory i.e.16 MBfor video framebuffer. - Comment the
CONF_SWAPSIZEline in/etc/dphys-swapfile(assuming you already added SSD to your configuration.) Not necessary if you only store Docker volumes on SSD. - Use
JAVA_OPTSto limit Java heap size, i.e.-Xms512M -Xmx512M. - Use
BISQ_DESKTOP_OPTSto limit the number of network connections, i.e.--maxConnections=6 --msgThrottlePerSec=40 --msgThrottlePer10Sec=200 --numConnectionForBtc=3 - In case of
RPi 3B+, useWi-Fias Ethernet sits on the sameUSB 2.0bus 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.