Start accepting Bitcoin today with BTCPay Server! This guide will walk you through the installation.
While our instructions cover how to install BTCPayServer in one click on Azure or Lunanode, BTCPay Server is not limited to those options.
You will find below information about how you can install BTCPay Server easily in any environment having docker available.
As you can see, BTCPay depends on several pieces of infrastructure, mainly:
- A lightweight block explorer (NBXplorer),
- A database (PostgreSQL or SQLite),
- A full node (eg. Bitcoin Core)
There can be more dependencies if you support more than just standard Bitcoin transactions, including:
- C-Lightning
- LitecoinD and other coin daemons
- And more...
Note: The setup process can be time consuming, but is heavily automated to make it a fun and easy experience.
Take a look at how BTCPay works in a video below.
Here is a presentation of the global architecture at Advancing Bitcoin conference.
You can also install BTCPay Server on your own machine or VPS instance.
The officially supported setup is driven by Docker (and Docker-Compose).
First, make sure you have a domain name pointing to your host A record
, with ports 443
and 80
externally accessible. For Lightning Network, port 9735
is required (9736
if you use Litecoin Lightning). Otherwise, you will have to set a domain manually by running changedomain.sh
.
Let's assume your domain is btcpay.EXAMPLE.com
.
The setup below assumes you want to support Bitcoin, c-lightning, HTTPS automatically configured by Nginx. It also enables node pruning, which you can modify or ignore if you have enough disk space for a full node. Finally, your domain is btcpay.EXAMPLE.com
should reflect your actual domain name.
Environment variables can be tailored to your needs. Some variables require additional storage space.
# Login as root
sudo su -
# Create a folder for BTCPay
mkdir BTCPayServer
cd BTCPayServer
# Clone this repository
git clone https://github.com/btcpayserver/btcpayserver-docker
cd btcpayserver-docker
# Run btcpay-setup.sh with the right parameters
export BTCPAY_HOST="btcpay.EXAMPLE.com"
export NBITCOIN_NETWORK="mainnet"
export BTCPAYGEN_CRYPTO1="btc"
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage-s"
export BTCPAYGEN_REVERSEPROXY="nginx"
export BTCPAYGEN_LIGHTNING="clightning"
export BTCPAY_ENABLE_SSH=true
. ./btcpay-setup.sh -i
exit
btcpay-setup.sh
will then:
- Install Docker
- Install Docker-Compose
- Make sure BTCPay starts at reboot via upstart or systemd
- Setup environment variables to use BTCPay utilities
- Add BTCPay utilities in /usr/bin
- Start BTCPay Server
Video below guides you step by step on how to set up BTCPay Server on a VPS with Docker.
Check out this video if you're interested in learning more about setting up BTCPay with Docker Compose.
btcpay-setup.sh
will use the following environment variables:
BTCPAY_HOST
: The hostname of your website (eg.btcpay.example.com
)BTCPAY_ADDITIONAL_HOSTS
: Optional, specify additional domains to your BTCPayServer with https support if enabled. (eg. example2.com,example3.com)REVERSEPROXY_HTTP_PORT
: The public port the reverse proxy binds to for HTTP traffic (default: 80)REVERSEPROXY_HTTPS_PORT
: The public port the reverse proxy binds to for HTTPS traffic (default: 443)REVERSEPROXY_DEFAULT_HOST
: Optional, if using a reverse proxy nginx, specify which website should be presented if the server is accessed by its IP or by an unrecognized domain name.NOREVERSEPROXY_HTTP_PORT
: Optional, if not using a reverse proxy, specify which port should be opened for HTTP traffic. (default: 80)NBITCOIN_NETWORK
: The type of network to use (eg.mainnet
,testnet
, orregtest
. Default:mainnet
)LIGHTNING_ALIAS
: An alias for your lightning network node, if usedBTCPAYGEN_CRYPTO1
: First supported crypto currency (eg.btc
,ltc
. Default:btc
)BTCPAYGEN_CRYPTO2
: Second supported crypto currency (eg.btc
,ltc
. Default:(empty)
)BTCPAYGEN_CRYPTON
: N'th supported crypto currency where N is 9 at maximum. (eg.btc
,ltc
. Default:(empty)
)BTCPAYGEN_REVERSEPROXY
: Specify reverse proxy to use; NGinx has HTTPS support. (eg.nginx
,traefik
,(empty)
. Default:nginx
)BTCPAYGEN_LIGHTNING
: Lightning network implementation to use (eg.clightning
,lnd
, Default:(empty)
)BTCPAYGEN_SUBNAME
: The subname of the generated docker-compose file, where the full name isGenerated/docker-compose.SUBNAME.yml
(Default:generated
)BTCPAYGEN_ADDITIONAL_FRAGMENTS
: Semicolon-separated list of additional fragments you want to use (eg.opt-save-storage
)LETSENCRYPT_EMAIL
: An email will be sent to this address if certificate expires and fails to renew automatically (eg.[email protected]
)ACME_CA_URI
: The API endpoint to ask for HTTPS certificate (Default:production
)BTCPAY_ENABLE_SSH
: Optional, gives BTCPay Server SSH access to the host by allowing it to edit authorized_keys of the host, it can be used for managing the authorized_keys or updating BTCPay Server directly through the website. (Default: false)BTCPAYGEN_DOCKER_IMAGE
: Optional, Specify which generator image to use if you have customized the C# generator. Set tobtcpayserver/docker-compose-generator:local
to build the generator locally at runtime.BTCPAY_IMAGE
: Optional, Specify which btcpayserver image to use if you have a customized btcpayserver.BTCPAYGEN_EXCLUDE_FRAGMENTS
: Semicolon-separated list of fragments you want to forcefully exclude (eg.litecoin-clightning
)TOR_RELAY_NICKNAME
: If tor relay is activated with opt-add-tor-relay, the relay nicknameTOR_RELAY_EMAIL
: If tor relay is activated with opt-add-tor-relay, the email for Tor to contact you regarding your relay
Additionally, there are specific environment variables for some addons:
LIBREPATRON_HOST
: If libre patron is activated with opt-add-librepatron, the hostname of your libre patron website (eg.librepatron.example.com
)ZAMMAD_HOST
: If zammad is activated with opt-add-zammad, the hostname of your zammad website (eg.zammad.example.com
)WOOCOMMERCE_HOST
: If woocommerce is activated with opt-add-woocommerce, the hostname of your woocommerce website (eg.store.example.com
)EPS_XPUB
: If Electrum Personal Server (EPS) is activated with opt-add-electrum-ps, you must set the Extended Public Key (XPUB, YPUB or ZPUB) of the wallet you want to use, before first run of the EPS server. If you accidently start EPS without this, it will not work properly as the model of EPS is to monitor only specified wallets.- If Bitcoin Wallet Tracker is activated with opt-add-bwt, you can use
BWT_XPUB
/BWT_XPUB_*
(to set your XPUB/YPUB/ZPUB),BWT_DESCRIPTOR
/BWT_DESCRIPTOR_*
(for script descriptors),BWT_RESCAN_SINCE
(set to the wallet creation date in YYYY-MM-DD to speed up the rescan),BWT_BITCOIND_WALLET
andBWT_GAP_LIMIT
. LND_WTCLIENT_SWEEP_FEE
: If LND watchtower is activated with opt-lnd-wtclient, you can useLND_WTCLIENT_SWEEP_FEE
to change the sweep fee used in constructing the justice transaction (default is 10 sat/byte)FIREFLY_HOST
: If fireflyiii is activated with opt-add-fireflyiii, the hostname of your fireflyiii website (eg.firefly.example.com
)CLOUDFLARE_TUNNEL_TOKEN
: Used to expose your instance to clearnet with a Cloudflare Argo Tunnel (if cloudflare tunnel is activated with opt-add-cloudflared, for setup instructions see documentation)
A wide variety of useful scripts are available once BTCPay is installed:
bitcoin-cli.sh
: Access your Bitcoin node instance (for RPC)bitcoin-lightning-cli.sh
: Access your C-Lightning node instance (for RPC)changedomain.sh
: Change the domain of your BTCPayServer (remember to disable 2FA/U2F first, as you risk being unable to log in to your account)btcpay-update.sh
: Update BTCPayServer to the latest versionbtcpay-up.sh
: Rundocker-compose up
btcpay-down.sh
: Rundocker-compose down
btcpay-setup.sh
: Change the settings of your serverbtcpay-clean.sh
: Purge any unused docker images. ./btcpay-setup.sh
: Information about additional parameters. ./btcpay-setup.sh -i
: Set up your BTCPayServerbtcpay-restart.sh
: Restart your BTCPayServer
When you run btcpay-setup.sh
, your environment variables are used by build.sh (or build.ps1) to generate a docker-compose adapted for your needs. For the full list of options, see: Environment variables
By default, the generated file is Generated/docker-compose.generated.yml
, constructed from the relevant Docker fragments for your setup.
Available BTCPAYGEN_ADDITIONAL_FRAGMENTS
currently are:
- opt-save-storage will keep around 1 year of blocks (prune BTC for 100 GB)
- opt-save-storage-s will keep around 6 months of blocks (prune BTC for 50 GB)
- opt-save-storage-xs will keep around 3 months of blocks (prune BTC for 25 GB)
- opt-save-storage-xxs will keep around 2 weeks of blocks (prune BTC for 5 GB) (lightning not supported)
- opt-lnd-autopilot will activate auto pilot on LND. (5 channels, 60% of allocation)
- opt-lnd-keysend will activate keysend on LND.
- opt-lnd-wtclient will activate the watchtower client on LND.
LND_WTCLIENT_SWEEP_FEE
can be used to override the default 10 sat/byte justice transaction fee - opt-save-memory will decrease the default dbcache at the expense of longer synchronization time. (Useful if your machine is less than 2GB)
- opt-more-memory will increase the default dbcache to make synchronization faster (Useful if your machine is has around 4GB)
- opt-add-btcqbo will allow you to create an invoice on Quickbooks which include a way for your customer to pay on BTCPay Server (More information on this github repository, this add-on is maintained by JeffVandrewJr, see more on this video)
- opt-add-librepatron, for a self-hosted Patreon alternative backed by BTCPay (More information on this github repository, this add-on is maintained by JeffVandrewJr.
- opt-add-woocommerce, for a self-hosted woocommerce with BTCPay Server plugin pre installed.
- opt-add-tor, for exposing BTCPayServer, Woocommerce, your lightning nodes as hidden services and accept onion peers for your full node. Warning: This options is for working around NAT and firewall problems as well as to help protect your customer's privacy. This will not protect your privacy against a targeted attack against you.
- opt-add-btctransmuter, for a self-hosted IFTTT style service for crypto services such as fiat settlement. (More information on this github repository
- opt-txindex, to enable txindex=1 in bitcoin.conf if you require txindexing for Bisq, DOJO, etc.
- opt-expose-unsafe, to unsafely expose bitcoind P2P port 8333 if you require P2P for Bisq, DOJO, Esplora, etc. WARNING: ONLY USE ON TRUSTED LAN OR WITH FIREWALL RULES WHITELISTING SPECIFIC HOSTS
- opt-add-tor-relay, for a non-exit tor relay. Make sure to have port 9001 accessible externally. Please read the legal implications of running a tor relay and what resources are used to operate the relay.
- opt-add-electrumx, to integrate a full ElectrumX server (from official source) with BTCPay, using the BTCPay server's full bitcoin node for complete privacy when using your own Electrum wallet. You can also open port 50002 up to the internet on your router etc, to be part of the ElectrumX network, helping other Electrum wallet users to get connected. The bitcoin option
-txindex
is mandatory for ElectrumX, and this fragment will enable it on your BTCPay server automatically - No need to use the fragment opt-txindex.yml. - opt-add-electrum-ps, to integrate Electrum Personal Server (EPS) with BTCPay (EPS is a single-user alternative to the ElectrumX Server option above). EPS will also use the BTCPay server's full bitcoin node for complete privacy when using your own Electrum wallet, for your own personal use (i.e. other users cannot use your server to verify transactions). Also, the bitcoin option
-txindex
is NOT mandatory for EPS, and it will run on a pruned node (unlike ElectrumX). You will need to add your XPUB/YPUB/ZPUB as environment variableEPS_XPUB
before enabling EPS for the first time (see above section on environment variables, and see full documentation for details). - opt-add-electrum-bwt, to integrate the Bitcoin Wallet Tracker Electrum server, which uses a personal wallet index model similar to that of EPS. You will need to set
BWT_XPUB
with your XPUB/YPUB/ZPUB (see environment variables section). The server will only be available locally and through an onion service. - opt-add-configurator, to integrate the BTCPay Server Configurator to manage your BTCPay deployment through a UI, and to allow new deployments elsewhere easily.
- opt-add-pihole (See the documentation)
- opt-add-bluewallet-lndhub for Bluewallet LNDHub - Use non-custodial LND Lightning directly from your Bluewallet, and freely let others open accounts on your node. Fragment maintained by maltokyo.
- opt-add-ndlc (See the documentation)
- opt-add-lightning-terminal for Lightning Terminal/LiT. Maintained by dennisreimann.
- opt-add-mempool for Mempool. Maintained by dennisreimann.
- opt-add-sphinxrelay for Sphinx Relay. Maintained by dennisreimann.
- opt-add-tallycoin-connect for Tallycoin Connect. Maintained by dennisreimann.
- opt-add-thunderhub for a LND Lightning Node Manager in your Browser. Maintained by apotdevin.
- opt-add-teos for The Eye Of Satoshi, a BOLT13 Lightning Watchtower. Use port 9814 on your server or Tor to connect.
- opt-add-chatwoot for open source chat support system. (See the documentation)
- opt-add-zammad for Zammad, a web based open source helpdesk/customer support system with many features to manage customer communication via several channels like telephone, facebook, twitter, chat and e-mails
- opt-monero-expose to expose monero node's RPC port at 127.0.0.1:18081 to connect your own wallet. Use f.e. ssh port forwarding to forward to your own computer.
- opt-add-fireflyiii (See the documentation)
- opt-add-joinmarket (See the documentation)
- opt-add-helipad for Podcastindex.org Helipad. Requires LND.
- opt-add-nostr-relay for Nostr Relay.
- opt-add-cloudflared to expose your local server on clearnet painlessly (see documentation).
- opt-add-torq to install Torq node management application. Requires LND.
You can also create your own custom fragments.
If you want to add an option to BTCPAYGEN_ADDITIONAL_FRAGMENTS
and re-configure your install:
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="$BTCPAYGEN_ADDITIONAL_FRAGMENTS;opt-lnd-autopilot"
. btcpay-setup.sh -i
For example, if you want btc
and ltc
support with nginx
and clightning
inside Generated/docker-compose.custom.yml
:
Note: The first run might take a while, but following runs are instantaneous.
On Windows (run in powershell):
Invoke-Command {
$BTCPAYGEN_CRYPTO1="btc"
$BTCPAYGEN_CRYPTO2="ltc"
$BTCPAYGEN_REVERSEPROXY="nginx"
$BTCPAYGEN_LIGHTNING="clightning"
$BTCPAYGEN_SUBNAME="custom"
. .\build.ps1
}
On Linux:
BTCPAYGEN_CRYPTO1="btc" \
BTCPAYGEN_CRYPTO2="ltc" \
BTCPAYGEN_REVERSEPROXY="nginx" \
BTCPAYGEN_LIGHTNING="clightning" \
BTCPAYGEN_SUBNAME="custom" \
./build.sh
Next, you will need to configure the runtime environment variables for Generated/docker-compose.custom.yml
:
- If you are using NGinx, read this.
- If you are not using NGinx, read this instead.
btcpay-setup.sh
is a utility which does the following:
- Makes sure docker and docker-compose are installed on your system
- Generates a docker-compose via
./build.sh
- Sets up an Environment File to configure your docker-compose
- Sets up environment variables so the tools described in Tooling can work
- Adds symlinks of those tools into
/usr/bin
- Makes sure BTCPay restarts on reboot via upstart or systemd
- Starts BTCPay via docker-compose
/etc/profile.d/btcpay-env.sh
ensures that your environment variables are correctly setup when you login, so you can use the tools:
export BTCPAYGEN_OLD_PREGEN="false"
export BTCPAYGEN_CRYPTO1="btc"
export BTCPAYGEN_CRYPTO2=""
export BTCPAYGEN_CRYPTO3=""
export BTCPAYGEN_CRYPTO4=""
export BTCPAYGEN_CRYPTO5=""
export BTCPAYGEN_CRYPTO6=""
export BTCPAYGEN_CRYPTO7=""
export BTCPAYGEN_CRYPTO8=""
export BTCPAYGEN_CRYPTO9=""
export BTCPAYGEN_LIGHTNING="clightning"
export BTCPAYGEN_REVERSEPROXY="nginx"
export BTCPAYGEN_ADDITIONAL_FRAGMENTS=""
export BTCPAY_DOCKER_COMPOSE="/var/lib/waagent/custom-script/download/0/btcpayserver-docker/Production/docker-compose.generated.yml"
export BTCPAY_BASE_DIRECTORY="/var/lib/waagent/custom-script/download/0"
export BTCPAY_ENV_FILE="/var/lib/waagent/custom-script/download/0/.env"
export BTCPAY_HOST_SSHKEYFILE="/root/.ssh/id_rsa_btcpay"
if cat $BTCPAY_ENV_FILE &> /dev/null; then
export $(grep -v '^#' "$BTCPAY_ENV_FILE" | xargs)
fi
/etc/systemd/system/btcpayserver.service
ensures that you can control btcpay via systemctl
, and that BTCPayServer starts on reboot:
[Unit]
Description=BTCPayServer service
After=docker.service network-online.target
Requires=docker.service network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c '. /etc/profile.d/btcpay-env.sh && cd "$BTCPAY_BASE_DIRECTORY/btcpayserver-docker" && . helpers.sh && btcpay_up'
ExecStop=/bin/bash -c '. /etc/profile.d/btcpay-env.sh && cd "$BTCPAY_BASE_DIRECTORY/btcpayserver-docker" && . helpers.sh && btcpay_down'
ExecReload=/bin/bash -c '. /etc/profile.d/btcpay-env.sh && cd "$BTCPAY_BASE_DIRECTORY/btcpayserver-docker" && . helpers.sh && btcpay_restart'
[Install]
WantedBy=multi-user.target
.env
($BTCPAY_ENV_FILE
) contains environment variables passed to the containers managed by your docker-compose:
BTCPAY_HOST=btcpay.EXAMPLE.com
ACME_CA_URI=production
NBITCOIN_NETWORK=mainnet
LETSENCRYPT_EMAIL[email protected]
BTCPAY_SSHTRUSTEDFINGERPRINTS=SHA256:eSCD7NtQ/Q6IBl2iRB9caAQ3lDZd8s8iUL6SdeNnhpA
BTCPAY_SSHKEYFILE=/datadir/id_rsa
- Add support for your crypto to NBitcoin, NBxplorer, and BTCPayServer. (Use examples from other coins)
- Create your own docker image (Example for BTC)
- Create a docker-compose fragment (Example for BTC)
- Add your
CryptoDefinition
(Example for BTC)
build.sh
is using a pre-built image of the docker-compose generator
on docker hub.
If you modify the code source of docker-compose generator
(for example, the CryptoDefinition
Example for BTC), you need to configure build.sh
to use your own image by setting the environment variable BTCPAYGEN_DOCKER_IMAGE
to btcpayserver/docker-compose-generator:local
.
cd docker-compose-generator
BTCPAYGEN_DOCKER_IMAGE="btcpayserver/docker-compose-generator:local"
Or on powershell:
cd docker-compose-generator
$BTCPAYGEN_DOCKER_IMAGE="btcpayserver/docker-compose-generator:local"
Then run ./build.sh
or . .\build.ps1
.
This will generate your docker-compose in the Generated
folder, which you can then run and test.
Note that BTCPayServer developers will not spend excessive time testing your image, so make sure it works.
We are trying to update our dependencies to run on arm32v7
and x64
boards. Here is our progress:
Image | Version | x64 | arm32v7 | arm64v8 | links |
---|---|---|---|---|---|
btcpayserver/docker-compose-generator | latest | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/docker-compose | 1.28.6 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/lightning | v22.11.1 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
shesek/lightning-charge | 0.4.23-1-standalone | ✔️ | ✔️ | ✔️ | Github - DockerHub |
shesek/spark-wallet | 0.3.1-standalone | ✔️ | ✔️ | ✔️ | Github - DockerHub |
saubyk/c-lightning-rest | 0.9.0 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
shahanafarooqui/rtl | 0.13.3 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/lnd | v0.15.4-beta-1 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/bitcoin | 24.0.1-1 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/btcpayserver | 1.7.5$<BTCPAY_BUILD_CONFIGURATION>? | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/monero | 0.18.1.1 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
nicolasdorier/nbxplorer | 2.3.57 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/letsencrypt-nginx-proxy-companion | 1.12.2 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
nginx | 1.16.0 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/docker-gen | 0.7.8 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/btctransmuter | 0.0.59 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/cloudflared | 2022.6.3 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/btcpayserver-configurator | 0.0.21 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/eps | 0.2.2 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/joinmarket | 0.9.5 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
nicolasdorier/ndlc-cli | 1.0.1 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
pihole/pihole | v5.7 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/tor | 0.4.7.10 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/woocommerce | 3.1.0 | ✔️ | ️❌ | ✔️ | Github - DockerHub |
btcpayserver/postgres | 13.7 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
kamigawabul/btglnd | latest | ✔️ | ️❌ | ️❌ | Github - DockerHub |
kamigawabul/docker-bitcoingold | 0.15.2 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
acinq/eclair | release-0.7.0 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
chekaz/docker-bitcoinplus | 2.7.0 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
dalijolijo/docker-bitcore | 0.90.9.10 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
btcpayserver/dash | 18.1.0 | ✔️ | ️❌ | ✔️ | Github - DockerHub |
btcpayserver/dogecoin | 1.14.6 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
chekaz/docker-feathercoin | 0.16.3 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
groestlcoin/lightning | v22.11.1 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
groestlcoin/groestlcoin-lightning-charge | version-0.4.22 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
groestlcoin/groestlcoin-spark | version-0.2.16 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
groestlcoin/eclair | v0.6.0 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
groestlcoin/lnd | v0.10.0-grs | ✔️ | ️❌ | ️❌ | Github - DockerHub |
btcpayserver/groestlcoin | 24.0.1 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/elements | 0.21.0.2-4 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
btcpayserver/litecoin | 0.21.2.1-2 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
wakiyamap/docker-monacoin | 0.20.2 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
redis | 6.2.2-buster | ✔️ | ️❌ | ️❌ | Github - DockerHub |
bluewalletorganization/lndhub | v1.4.1 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
jvandrew/btcqbo | 0.3.36 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
shesek/bwt | 0.2.2-electrum | ✔️ | ✔️ | ✔️ | Github - DockerHub |
chatwoot/chatwoot | v1.7.0 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
lukechilds/electrumx | latest | ✔️ | ️❌ | ️❌ | Github - DockerHub |
fireflyiii/core | latest | ✔️ | ✔️ | ✔️ | Github - DockerHub |
podcastindexorg/podcasting20-helipad | v0.1.10 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
jvandrew/librepatron | 0.7.39 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
jvandrew/isso | atron.22 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
lightninglabs/lightning-terminal | v0.6.7-alpha-path-prefix | ✔️ | ️❌ | ✔️ | Github - DockerHub |
mempool/frontend | v2.5.0-dev1 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
mempool/backend | v2.5.0-dev1 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
mariadb | 10.5.8 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
kukks/nnostr-relay | v0.0.7 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
sphinxlightning/sphinx-relay | v2.2.9 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
djbooth007/tallycoin_connect | v1.7.5 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
talaia/python-teos | latest | ✔️ | ✔️ | ✔️ | Github - DockerHub |
apotdevin/thunderhub | base-v0.13.11 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
lncapital/torq | 0.17.3 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
timescale/timescaledb | latest-pg14 | ✔️ | ✔️ | ✔️ | Github - DockerHub |
zammad/zammad-docker-compose | zammad-postgresql-3.4.0-4 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
memcached | 1.5.22-alpine | ✔️ | ️❌ | ️❌ | Github - DockerHub |
traefik | v2.6 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
chekaz/docker-trezarcoin | 0.13.0 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
romanornr/docker-viacoin | 0.15.2 | ✔️ | ️❌ | ️❌ | Github - DockerHub |
As root, run . btcpay-setup.sh
; this will show you the environment variable it is expecting.
For example, if you support btc
and ltc
already, and want to add btg
:
export BTCPAYGEN_CRYPTO3='btg'
. btcpay-setup.sh -i
Yes, run the following commands to update:
sudo su -
cd $DOWNLOAD_ROOT/btcpayserver-docker
git checkout master
git pull
git checkout 9acb5d8067cb5c46f59858137feb699b41ac9f19
btcpay-update.sh
. ./btcpay-setup.sh -i
git checkout master
btcpay-update.sh
exit
If you see this error:
Cannot create container for service docker: b'Mount denied:\nThe source path "\\\\var\\\\run\\\\docker.sock:/var/run/docker.sock"\nis not a valid Windows path'
.
Run this in powershell:
$Env:COMPOSE_CONVERT_WINDOWS_PATHS=1
Then, run docker-compose -f EXAMPLE.yml up
.
This bug comes from Docker for Windows and is tracked on Github.
This will prune your Bitcoin full node to a maximum of 100GB (of blocks):
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage"
. ./btcpay-setup.sh -i
Other options are documented here.
In some instances, you might want to customize your environment in more detail. While you could modify Generated/docker-compose.generated.yml
manually, your changes would be overwritten the next time you run btcpay-update.sh
.
Luckily, you can leverage BTCPAYGEN_ADDITIONAL_FRAGMENTS
for this!
Let's enable pruning to 60 GB, for example:
First, copy opt-save-storage into the the docker fragment folder as opt-save-storage.custom.yml
. Important: the file must end with .custom.yml
, or there will be git conflicts whenever you run btcpay-update.sh
.
Modify the new opt-save-storage.custom.yml
file to your taste:
@@ -14,8 +14,7 @@ version: "3"
services:
bitcoind:
environment:
- BITCOIN_EXTRA_ARGS: prune=100000
+ BITCOIN_EXTRA_ARGS: prune=60000
Then set it up:
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="$BTCPAYGEN_ADDITIONAL_FRAGMENTS;opt-save-storage.custom"
. ./btcpay-setup.sh -i
You can change the ports for HTTP and HTTPS by setting the environment variables REVERSEPROXY_HTTP_PORT
and REVERSEPROXY_HTTPS_PORT
. This is handy when ports 80 and 443 are already in use on your host, or you want to offload SSL termination with an existing web proxy.
When you set REVERSEPROXY_HTTP_PORT
to another value than 80, the built-in Let's Encrypt certificate will not work, as Let's Encrypt will try to validate your SSL certificate request by connecting from the internet to your domain on port 80. This validation request should be able to reach BTCPay Server in order to receive the certificate.
If you need to run on a different port, it's best to terminate SSL using another web proxy and forward your traffic.
Yes. Please see the documentation.
See the Backup & Restore guide in our documentation.
For backwards compatibility: Click here for the description of the old backup.sh process
:::warning
Please consider switching to the new Backup & Restore process, because the backup.sh
will not be maintained anymore.
:::
We provide a backup script that dumps the database and saves the important files:
cd "$BTCPAY_BASE_DIRECTORY/btcpayserver-docker"
./backup.sh
This will save the backup locally as /var/lib/docker/volumes/backup_datadir/_data/backup.tar.gz
.
These are the options to customize the backup name and location:
BACKUP_TIMESTAMP=true
saves the backup with datetime as part of the file name, so that backups do not get overwritten.BACKUP_PROVIDER=SCP
saves the backup remotely, requires additionalSCP_TARGET
environment variable (see below).BACKUP_PROVIDER=Dropbox
saves the backup to Dropbox, requires additionalDROPBOX_TOKEN
environment variable (see below).
cd "$BTCPAY_BASE_DIRECTORY/btcpayserver-docker"
# Backup with custom file name and timestamp:
BACKUP_TIMESTAMP=true ./backup.sh
# Backup via SCP:
BACKUP_PROVIDER=SCP SCP_TARGET=myhost:backups/btcpay ./backup.sh
# Backup to Dropbox:
BACKUP_PROVIDER=Dropbox DROPBOX_TOKEN=myDropboxToken ./backup.sh
You can also choose to only dump the database. This option does not need to stop and restart the docker-containers:
cd "$BTCPAY_BASE_DIRECTORY/btcpayserver-docker"
./backup.sh --only-db
On the server you can open a database session by connecting via psql
as the postgres user:
docker exec -ti $(docker ps -a -q -f "name=postgres_1") psql -U postgres
Then, inside psql
you can select a database and interact with the tables:
# list databases
\l
# connect to database
\c btcpayservermainnet
# list tables
\dt
# list users
SELECT "Id", "Email" FROM "AspNetUsers";
# end session
\q
The main BTCPay Server database tables are part of the public
schema.
Plugins have their own schema, named after the plugin.
By default, only the tables of the public
schema are shown.
If you want to also see and select the plugin tables, you need to extend the search path:
# list plugin schemas
SELECT * FROM pg_catalog.pg_namespace WHERE nspname LIKE 'BTCPayServer.%';
# extend search path
SET search_path TO "BTCPayServer.Plugins.MyPlugin", public;
# table list now also shows the MyPlugin tables
\dt