Browse Source

Remove legacy docker-compose.yml, auto generate the Test docker-compose

migrate-pregen
nicolas.dorier 7 years ago
parent
commit
82da850599
  1. 4
      README.md
  2. 19
      Regtest/README.md
  3. 1
      Regtest/docker-bitcoin-cli.ps1
  4. 45
      Regtest/docker-compose.yml
  5. 14
      Test/README.md
  6. 89
      Test/docker-compose.btc-ltc.yml
  7. 50
      Test/docker-compose.btc.yml
  8. 6
      docker-compose-generator/docker-fragments/btcpayserver-test.yml
  9. 17
      docker-compose-generator/src/DockerComposeDefinition.cs
  10. 17
      docker-compose-generator/src/Program.cs

4
README.md

@ -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.
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:

19
Regtest/README.md

@ -1,19 +0,0 @@
# About this docker-compose
This `docker-compose` shows how to configure postgres, bitcoind, NBXplorer and BTCPay on regtest.
![Architecture](https://github.com/btcpayserver/btcpayserver-doc/raw/master/img/Architecture.png)
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
Regtest/docker-bitcoin-cli.ps1

@ -1 +0,0 @@
docker exec -ti btcpayserver_regtest_bitcoind bitcoin-cli -regtest -conf="/data/bitcoin.conf" -datadir="/data" $args

45
Regtest/docker-compose.yml

@ -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

@ -0,0 +1,14 @@
# About this docker-compose
This `docker-compose` shows how to configure postgres, bitcoind, NBXplorer and BTCPay on regtest.
![Architecture](https://github.com/btcpayserver/btcpayserver-doc/raw/master/img/Architecture.png)
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

@ -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:

50
Production/docker-compose.yml → Test/docker-compose.btc.yml

@ -1,49 +1,5 @@
version: "3"
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:
restart: always
image: nicolasdorier/btcpayserver:1.0.1.53
@ -67,6 +23,8 @@ services:
volumes:
- "btcpay_datadir:/datadir"
- "nbxplorer_datadir:/root/.nbxplorer"
ports:
- "80:49392"
nbxplorer:
restart: always
image: nicolasdorier/nbxplorer:1.0.1.23
@ -104,10 +62,6 @@ services:
volumes:
- "bitcoin_datadir:/data"
volumes:
nginx_conf:
nginx_vhost:
nginx_html:
nginx_certs:
postgres_datadir:
btcpay_datadir:
nbxplorer_datadir:

6
docker-compose-generator/docker-fragments/btcpayserver-test.yml

@ -0,0 +1,6 @@
version: "3"
services:
btcpayserver:
ports:
- "80:49392"

17
docker-compose-generator/src/DockerComposeDefinition.cs

@ -10,12 +10,15 @@ namespace DockerGenerator
{
public class DockerComposeDefinition
{
string[] _Fragments;
public List<string> Fragments
{
get; set;
}
private string _Name;
public DockerComposeDefinition(string name, string[] fragments)
public DockerComposeDefinition(string name, List<string> fragments)
{
_Fragments = fragments;
Fragments = fragments;
_Name = name;
}
@ -39,21 +42,21 @@ namespace DockerGenerator
var serializer = new SerializerBuilder().Build();
Console.WriteLine($"With fragments:");
foreach(var fragment in _Fragments)
foreach(var fragment in Fragments)
{
Console.WriteLine($"\t{fragment}");
}
var services = 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);
}
if(doc.Children["volumes"] is YamlMappingNode fragmentVolumesRoot)
if(doc.Children.ContainsKey("volumes") && doc.Children["volumes"] is YamlMappingNode fragmentVolumesRoot)
{
volumes.AddRange(fragmentVolumesRoot.Children);
}

17
docker-compose-generator/src/Program.cs

@ -15,11 +15,10 @@ namespace DockerGenerator
private void Run()
{
List<DockerComposeDefinition> defs = new List<DockerComposeDefinition>();
var btc = new DockerComposeDefinition("btc",
new string[] { "nginx", "btcpayserver", "bitcoin" });
defs.Add(btc);
defs.Add(new DockerComposeDefinition("btc",
new List<string> { "nginx", "btcpayserver", "bitcoin" }));
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 productionLocation = FindLocation("Production");
@ -29,7 +28,15 @@ namespace DockerGenerator
def.BuildOutputDirectory = productionLocation;
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)

Loading…
Cancel
Save