mirror of
https://github.com/aljazceru/btcpayserver-docker.git
synced 2025-12-18 23:14:21 +01:00
Remove legacy docker-compose.yml, auto generate the Test docker-compose
This commit is contained in:
@@ -12,9 +12,9 @@ As you can see, it depends on several piece of infrastructure, mainly:
|
|||||||
|
|
||||||
Setting up the dependencies might be time consuming, this repository is meant to give working example of `docker-compose` file which will setup everything for you.
|
Setting up the dependencies might be time consuming, this repository is meant to give working example of `docker-compose` file which will setup everything for you.
|
||||||
|
|
||||||
The [Regtest](Regtest) `docker-compose` can be used for local testing.
|
The [Test](Test) `docker-compose` are used for local testing.
|
||||||
|
|
||||||
The [Production](Production) `docker-compose` is used for production environment. It is using NGinx as a reverse proxy and [Let's Encrypt and DockerGen](https://github.com/gilyes/docker-nginx-letsencrypt-sample) to automatically configured HTTPS.
|
The [Production](Production) `docker-compose` are used for production environment. It adds NGinx as a reverse proxy and [Let's Encrypt and DockerGen](https://github.com/gilyes/docker-nginx-letsencrypt-sample) to automatically configure HTTPS.
|
||||||
|
|
||||||
The production `docker-compose` is used under the hood to deploy an instance of BTCPay on Microsoft Azure in one click:
|
The production `docker-compose` is used under the hood to deploy an instance of BTCPay on Microsoft Azure in one click:
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
# About this docker-compose
|
|
||||||
|
|
||||||
This `docker-compose` shows how to configure postgres, bitcoind, NBXplorer and BTCPay on regtest.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
It exposes BTCPay on the host address http://localhost:8080/.
|
|
||||||
|
|
||||||
If you need to access bitcoind RPC, you can use bitcoin-cli inside the container:
|
|
||||||
|
|
||||||
On Powershell:
|
|
||||||
```
|
|
||||||
.\docker-bitcoin-cli getblockcount
|
|
||||||
```
|
|
||||||
|
|
||||||
On Linux:
|
|
||||||
```
|
|
||||||
docker exec -ti btcpayserver_regtest_bitcoind bitcoin-cli -regtest -conf="/data/bitcoin.conf" -datadir="/data" getblockcount
|
|
||||||
```
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
docker exec -ti btcpayserver_regtest_bitcoind bitcoin-cli -regtest -conf="/data/bitcoin.conf" -datadir="/data" $args
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
services:
|
|
||||||
|
|
||||||
btcpayserver:
|
|
||||||
image: nicolasdorier/btcpayserver:1.0.1.53
|
|
||||||
ports:
|
|
||||||
- 8080:49392
|
|
||||||
expose:
|
|
||||||
- "49392"
|
|
||||||
environment:
|
|
||||||
BTCPAY_POSTGRES: "User ID=postgres;Host=postgres;Port=5432;Database=btcpayserver"
|
|
||||||
BTCPAY_NETWORK: regtest
|
|
||||||
BTCPAY_EXPLORERURL: http://nbxplorer:32838/
|
|
||||||
BTCPAY_BIND: 0.0.0.0:49392
|
|
||||||
links:
|
|
||||||
- nbxplorer
|
|
||||||
- postgres
|
|
||||||
|
|
||||||
nbxplorer:
|
|
||||||
image: nicolasdorier/nbxplorer:1.0.1.23
|
|
||||||
expose:
|
|
||||||
- "32838"
|
|
||||||
environment:
|
|
||||||
NBXPLORER_NETWORK: regtest
|
|
||||||
NBXPLORER_RPCURL: http://bitcoind:43782/
|
|
||||||
NBXPLORER_RPCUSER: ceiwHEbqWI83
|
|
||||||
NBXPLORER_RPCPASSWORD: DwubwWsoo3
|
|
||||||
NBXPLORER_NODEENDPOINT: bitcoind:8332
|
|
||||||
NBXPLORER_BIND: 0.0.0.0:32838
|
|
||||||
NBXPLORER_NOAUTH: 1
|
|
||||||
links:
|
|
||||||
- bitcoind
|
|
||||||
|
|
||||||
bitcoind:
|
|
||||||
container_name: btcpayserver_regtest_bitcoind
|
|
||||||
image: nicolasdorier/docker-bitcoin:0.16.0
|
|
||||||
environment:
|
|
||||||
BITCOIN_EXTRA_ARGS: "rpcuser=ceiwHEbqWI83\nrpcpassword=DwubwWsoo3\nregtest=1\nrpcport=43782\nport=8332"
|
|
||||||
expose:
|
|
||||||
- "43782"
|
|
||||||
- "8332"
|
|
||||||
|
|
||||||
postgres:
|
|
||||||
image: postgres:9.6.5
|
|
||||||
14
Test/README.md
Normal file
14
Test/README.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# About this docker-compose
|
||||||
|
|
||||||
|
This `docker-compose` shows how to configure postgres, bitcoind, NBXplorer and BTCPay on regtest.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This is the same architecture as [Production](../Production)
|
||||||
|
|
||||||
|
The relevant environment variables are:
|
||||||
|
|
||||||
|
* `NBITCOIN_NETWORK`: the blockchain identifier used by NBitcoin (eg., `regtest`, `testnet`, `mainnet`)
|
||||||
|
* `BTCPAY_HOST`: the external url used to access your server from internet. This domain name must point to this machine for Let's Encrypt to create your certificate. (typically with a CNAME or A record)
|
||||||
|
|
||||||
|
The port `80` is exposed.
|
||||||
89
Test/docker-compose.btc-ltc.yml
Normal file
89
Test/docker-compose.btc-ltc.yml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
btcpayserver:
|
||||||
|
restart: always
|
||||||
|
image: nicolasdorier/btcpayserver:1.0.1.53
|
||||||
|
expose:
|
||||||
|
- "49392"
|
||||||
|
environment:
|
||||||
|
BTCPAY_POSTGRES: User ID=postgres;Host=postgres;Port=5432;Database=btcpayserver${NBITCOIN_NETWORK:-regtest}
|
||||||
|
BTCPAY_NETWORK: ${NBITCOIN_NETWORK:-regtest}
|
||||||
|
BTCPAY_BIND: 0.0.0.0:49392
|
||||||
|
BTCPAY_EXTERNALURL: https://${BTCPAY_HOST}/
|
||||||
|
VIRTUAL_NETWORK: nginx-proxy
|
||||||
|
VIRTUAL_PORT: 49392
|
||||||
|
VIRTUAL_HOST: ${BTCPAY_HOST}
|
||||||
|
LETSENCRYPT_HOST: ${BTCPAY_HOST}
|
||||||
|
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-yourname@example.com}
|
||||||
|
BTCPAY_CHAINS: "btc,ltc"
|
||||||
|
BTCPAY_BTCEXPLORERURL: http://nbxplorer:32838/
|
||||||
|
BTCPAY_LTCEXPLORERURL: http://nbxplorer:32838/
|
||||||
|
links:
|
||||||
|
- nbxplorer
|
||||||
|
- postgres
|
||||||
|
volumes:
|
||||||
|
- "btcpay_datadir:/datadir"
|
||||||
|
- "nbxplorer_datadir:/root/.nbxplorer"
|
||||||
|
ports:
|
||||||
|
- "80:49392"
|
||||||
|
nbxplorer:
|
||||||
|
restart: always
|
||||||
|
image: nicolasdorier/nbxplorer:1.0.1.23
|
||||||
|
expose:
|
||||||
|
- "32838"
|
||||||
|
environment:
|
||||||
|
NBXPLORER_NETWORK: ${NBITCOIN_NETWORK:-regtest}
|
||||||
|
NBXPLORER_BIND: 0.0.0.0:32838
|
||||||
|
NBXPLORER_CHAINS: "btc,ltc"
|
||||||
|
NBXPLORER_BTCRPCURL: http://bitcoind:43782/
|
||||||
|
NBXPLORER_BTCNODEENDPOINT: bitcoind:39388
|
||||||
|
NBXPLORER_LTCRPCURL: http://litecoind:43782/
|
||||||
|
NBXPLORER_LTCNODEENDPOINT: litecoind:39388
|
||||||
|
volumes:
|
||||||
|
- "nbxplorer_datadir:/datadir"
|
||||||
|
- "bitcoin_datadir:/root/.bitcoin"
|
||||||
|
- "litecoin_datadir:/root/.litecoin"
|
||||||
|
links:
|
||||||
|
- bitcoind
|
||||||
|
- litecoind
|
||||||
|
postgres:
|
||||||
|
restart: always
|
||||||
|
image: postgres:9.6.5
|
||||||
|
volumes:
|
||||||
|
- "postgres_datadir:/var/lib/postgresql/data"
|
||||||
|
bitcoind:
|
||||||
|
restart: always
|
||||||
|
container_name: btcpayserver_bitcoind
|
||||||
|
image: nicolasdorier/docker-bitcoin:0.16.0
|
||||||
|
environment:
|
||||||
|
BITCOIN_EXTRA_ARGS: |
|
||||||
|
rpcport=43782
|
||||||
|
${NBITCOIN_NETWORK:-regtest}=1
|
||||||
|
port=39388
|
||||||
|
whitelist=0.0.0.0/0
|
||||||
|
expose:
|
||||||
|
- "43782"
|
||||||
|
- "39388"
|
||||||
|
volumes:
|
||||||
|
- "bitcoin_datadir:/data"
|
||||||
|
litecoind:
|
||||||
|
restart: always
|
||||||
|
container_name: btcpayserver_litecoind
|
||||||
|
image: nicolasdorier/docker-litecoin:0.14.2
|
||||||
|
environment:
|
||||||
|
BITCOIN_EXTRA_ARGS: |
|
||||||
|
rpcport=43782
|
||||||
|
${NBITCOIN_NETWORK:-regtest}=1
|
||||||
|
port=39388
|
||||||
|
whitelist=0.0.0.0/0
|
||||||
|
expose:
|
||||||
|
- "43782"
|
||||||
|
- "39388"
|
||||||
|
volumes:
|
||||||
|
- "litecoin_datadir:/data"
|
||||||
|
volumes:
|
||||||
|
postgres_datadir:
|
||||||
|
btcpay_datadir:
|
||||||
|
nbxplorer_datadir:
|
||||||
|
bitcoin_datadir:
|
||||||
|
litecoin_datadir:
|
||||||
@@ -1,49 +1,5 @@
|
|||||||
version: "3"
|
version: "3"
|
||||||
services:
|
services:
|
||||||
nginx:
|
|
||||||
restart: always
|
|
||||||
image: nginx
|
|
||||||
container_name: nginx
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
- "443:443"
|
|
||||||
volumes:
|
|
||||||
- "nginx_conf:/etc/nginx/conf.d"
|
|
||||||
- "nginx_vhost:/etc/nginx/vhost.d"
|
|
||||||
- "nginx_html:/usr/share/nginx/html"
|
|
||||||
- "nginx_certs:/etc/nginx/certs:ro"
|
|
||||||
links:
|
|
||||||
- btcpayserver
|
|
||||||
nginx-gen:
|
|
||||||
restart: always
|
|
||||||
image: jwilder/docker-gen
|
|
||||||
container_name: nginx-gen
|
|
||||||
volumes:
|
|
||||||
- "/var/run/docker.sock:/tmp/docker.sock:ro"
|
|
||||||
- "./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro"
|
|
||||||
- "nginx_conf:/etc/nginx/conf.d"
|
|
||||||
- "nginx_vhost:/etc/nginx/vhost.d"
|
|
||||||
- "nginx_html:/usr/share/nginx/html"
|
|
||||||
- "nginx_certs:/etc/nginx/certs:ro"
|
|
||||||
entrypoint: /usr/local/bin/docker-gen -notify-sighup nginx -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
|
|
||||||
links:
|
|
||||||
- nginx
|
|
||||||
letsencrypt-nginx-proxy-companion:
|
|
||||||
restart: always
|
|
||||||
image: jrcs/letsencrypt-nginx-proxy-companion
|
|
||||||
container_name: letsencrypt-nginx-proxy-companion
|
|
||||||
volumes:
|
|
||||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
|
||||||
- "nginx_conf:/etc/nginx/conf.d"
|
|
||||||
- "nginx_vhost:/etc/nginx/vhost.d"
|
|
||||||
- "nginx_html:/usr/share/nginx/html"
|
|
||||||
- "nginx_certs:/etc/nginx/certs:rw"
|
|
||||||
environment:
|
|
||||||
NGINX_DOCKER_GEN_CONTAINER: "nginx-gen"
|
|
||||||
NGINX_PROXY_CONTAINER: "nginx"
|
|
||||||
ACME_CA_URI: ${ACME_CA_URI:-https://acme-staging.api.letsencrypt.org/directory}
|
|
||||||
links:
|
|
||||||
- nginx
|
|
||||||
btcpayserver:
|
btcpayserver:
|
||||||
restart: always
|
restart: always
|
||||||
image: nicolasdorier/btcpayserver:1.0.1.53
|
image: nicolasdorier/btcpayserver:1.0.1.53
|
||||||
@@ -67,6 +23,8 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- "btcpay_datadir:/datadir"
|
- "btcpay_datadir:/datadir"
|
||||||
- "nbxplorer_datadir:/root/.nbxplorer"
|
- "nbxplorer_datadir:/root/.nbxplorer"
|
||||||
|
ports:
|
||||||
|
- "80:49392"
|
||||||
nbxplorer:
|
nbxplorer:
|
||||||
restart: always
|
restart: always
|
||||||
image: nicolasdorier/nbxplorer:1.0.1.23
|
image: nicolasdorier/nbxplorer:1.0.1.23
|
||||||
@@ -104,10 +62,6 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- "bitcoin_datadir:/data"
|
- "bitcoin_datadir:/data"
|
||||||
volumes:
|
volumes:
|
||||||
nginx_conf:
|
|
||||||
nginx_vhost:
|
|
||||||
nginx_html:
|
|
||||||
nginx_certs:
|
|
||||||
postgres_datadir:
|
postgres_datadir:
|
||||||
btcpay_datadir:
|
btcpay_datadir:
|
||||||
nbxplorer_datadir:
|
nbxplorer_datadir:
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
btcpayserver:
|
||||||
|
ports:
|
||||||
|
- "80:49392"
|
||||||
@@ -10,12 +10,15 @@ namespace DockerGenerator
|
|||||||
{
|
{
|
||||||
public class DockerComposeDefinition
|
public class DockerComposeDefinition
|
||||||
{
|
{
|
||||||
string[] _Fragments;
|
public List<string> Fragments
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
private string _Name;
|
private string _Name;
|
||||||
|
|
||||||
public DockerComposeDefinition(string name, string[] fragments)
|
public DockerComposeDefinition(string name, List<string> fragments)
|
||||||
{
|
{
|
||||||
_Fragments = fragments;
|
Fragments = fragments;
|
||||||
_Name = name;
|
_Name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,21 +42,21 @@ namespace DockerGenerator
|
|||||||
var serializer = new SerializerBuilder().Build();
|
var serializer = new SerializerBuilder().Build();
|
||||||
|
|
||||||
Console.WriteLine($"With fragments:");
|
Console.WriteLine($"With fragments:");
|
||||||
foreach(var fragment in _Fragments)
|
foreach(var fragment in Fragments)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"\t{fragment}");
|
Console.WriteLine($"\t{fragment}");
|
||||||
}
|
}
|
||||||
var services = new List<KeyValuePair<YamlNode, YamlNode>>();
|
var services = new List<KeyValuePair<YamlNode, YamlNode>>();
|
||||||
var volumes = new List<KeyValuePair<YamlNode, YamlNode>>();
|
var volumes = new List<KeyValuePair<YamlNode, YamlNode>>();
|
||||||
|
|
||||||
foreach(var doc in _Fragments.Select(f => ParseDocument(f)))
|
foreach(var doc in Fragments.Select(f => ParseDocument(f)))
|
||||||
{
|
{
|
||||||
if(doc.Children["services"] is YamlMappingNode fragmentServicesRoot)
|
if(doc.Children.ContainsKey("services") && doc.Children["services"] is YamlMappingNode fragmentServicesRoot)
|
||||||
{
|
{
|
||||||
services.AddRange(fragmentServicesRoot.Children);
|
services.AddRange(fragmentServicesRoot.Children);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doc.Children["volumes"] is YamlMappingNode fragmentVolumesRoot)
|
if(doc.Children.ContainsKey("volumes") && doc.Children["volumes"] is YamlMappingNode fragmentVolumesRoot)
|
||||||
{
|
{
|
||||||
volumes.AddRange(fragmentVolumesRoot.Children);
|
volumes.AddRange(fragmentVolumesRoot.Children);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,11 +15,10 @@ namespace DockerGenerator
|
|||||||
private void Run()
|
private void Run()
|
||||||
{
|
{
|
||||||
List<DockerComposeDefinition> defs = new List<DockerComposeDefinition>();
|
List<DockerComposeDefinition> defs = new List<DockerComposeDefinition>();
|
||||||
var btc = new DockerComposeDefinition("btc",
|
defs.Add(new DockerComposeDefinition("btc",
|
||||||
new string[] { "nginx", "btcpayserver", "bitcoin" });
|
new List<string> { "nginx", "btcpayserver", "bitcoin" }));
|
||||||
defs.Add(btc);
|
|
||||||
defs.Add(new DockerComposeDefinition("btc-ltc",
|
defs.Add(new DockerComposeDefinition("btc-ltc",
|
||||||
new string[] { "nginx", "btcpayserver", "bitcoin", "litecoin" }));
|
new List<string> { "nginx", "btcpayserver", "bitcoin", "litecoin" }));
|
||||||
|
|
||||||
var fragmentLocation = FindLocation("docker-fragments");
|
var fragmentLocation = FindLocation("docker-fragments");
|
||||||
var productionLocation = FindLocation("Production");
|
var productionLocation = FindLocation("Production");
|
||||||
@@ -29,7 +28,15 @@ namespace DockerGenerator
|
|||||||
def.BuildOutputDirectory = productionLocation;
|
def.BuildOutputDirectory = productionLocation;
|
||||||
def.Build();
|
def.Build();
|
||||||
}
|
}
|
||||||
File.Copy(btc.GetFilePath(), Path.Combine(new FileInfo(btc.GetFilePath()).Directory.FullName, "docker-compose.yml"), true);
|
|
||||||
|
var testLocation = FindLocation("Test");
|
||||||
|
foreach(var def in defs)
|
||||||
|
{
|
||||||
|
def.Fragments.Remove("nginx");
|
||||||
|
def.Fragments.Add("btcpayserver-test");
|
||||||
|
def.BuildOutputDirectory = testLocation;
|
||||||
|
def.Build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string FindLocation(string path)
|
private string FindLocation(string path)
|
||||||
|
|||||||
Reference in New Issue
Block a user