From e17de97c93aaea51cd4cfc97f8bfbff7423efc0b Mon Sep 17 00:00:00 2001 From: Andrew Camilleri Date: Tue, 4 Dec 2018 14:54:04 +0100 Subject: [PATCH 1/6] Isolate postgres and enable mysql & sqlite through docker --- .../docker-fragments/btcpayserver.yml | 2 -- .../docker-fragments/mysql.yml | 19 +++++++++++++++++++ .../docker-fragments/postgres.yml | 5 +++++ .../src/DockerComposition.cs | 7 +++++++ docker-compose-generator/src/Program.cs | 4 +++- 5 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 docker-compose-generator/docker-fragments/mysql.yml diff --git a/docker-compose-generator/docker-fragments/btcpayserver.yml b/docker-compose-generator/docker-fragments/btcpayserver.yml index 9309a8b..8e34946 100644 --- a/docker-compose-generator/docker-fragments/btcpayserver.yml +++ b/docker-compose-generator/docker-fragments/btcpayserver.yml @@ -9,7 +9,6 @@ services: - "49392" environment: # BTCPay settings - 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: ${BTCPAY_PROTOCOL:-https}://${BTCPAY_HOST}/ @@ -19,7 +18,6 @@ services: BTCPAY_DEBUGLOG: btcpay.log links: - nbxplorer - - postgres volumes: - "btcpay_datadir:/datadir" - "nbxplorer_datadir:/root/.nbxplorer" diff --git a/docker-compose-generator/docker-fragments/mysql.yml b/docker-compose-generator/docker-fragments/mysql.yml new file mode 100644 index 0000000..0fde6c9 --- /dev/null +++ b/docker-compose-generator/docker-fragments/mysql.yml @@ -0,0 +1,19 @@ +version: "3" + +services: + mysql: + restart: unless-stopped + image: mysql:8.0 + volumes: + - "mysql_datadir:/var/lib/mysql" + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: yes + + btcpayserver: + environment: + BTCPAY_POSTGRES: Server=mysql;Database=btcpayserver${NBITCOIN_NETWORK:-regtest};Uid=root;Pwd=;Port=3306; + links: + - mysql + +volumes: + mysql_datadir: \ No newline at end of file diff --git a/docker-compose-generator/docker-fragments/postgres.yml b/docker-compose-generator/docker-fragments/postgres.yml index d558564..49563b9 100644 --- a/docker-compose-generator/docker-fragments/postgres.yml +++ b/docker-compose-generator/docker-fragments/postgres.yml @@ -6,6 +6,11 @@ services: image: postgres:9.6.5 volumes: - "postgres_datadir:/var/lib/postgresql/data" + btcpayserver: + environment: + BTCPAY_POSTGRES: User ID=postgres;Host=postgres;Port=5432;Database=btcpayserver${NBITCOIN_NETWORK:-regtest} + links: + - postgres volumes: postgres_datadir: \ No newline at end of file diff --git a/docker-compose-generator/src/DockerComposition.cs b/docker-compose-generator/src/DockerComposition.cs index 8a924ed..050e39b 100644 --- a/docker-compose-generator/src/DockerComposition.cs +++ b/docker-compose-generator/src/DockerComposition.cs @@ -17,6 +17,12 @@ namespace DockerGenerator get; set; } + + public string SelectedDatabase + { + get; + set; + } public string SelectedLN { get; @@ -39,6 +45,7 @@ namespace DockerGenerator continue; composition.SelectedCryptos.Add(selectedCrypto.ToLowerInvariant()); } + composition.SelectedDatabase = (Environment.GetEnvironmentVariable("BTCPAYGEN_DATABASE") ?? "postgtres").ToLowerInvariant(); composition.SelectedProxy = (Environment.GetEnvironmentVariable("BTCPAYGEN_REVERSEPROXY") ?? "").ToLowerInvariant(); composition.SelectedLN = (Environment.GetEnvironmentVariable("BTCPAYGEN_LIGHTNING") ?? "").ToLowerInvariant(); composition.AdditionalFragments = (Environment.GetEnvironmentVariable("BTCPAYGEN_ADDITIONAL_FRAGMENTS") ?? "").ToLowerInvariant() diff --git a/docker-compose-generator/src/Program.cs b/docker-compose-generator/src/Program.cs index df4c0ad..8161fd4 100644 --- a/docker-compose-generator/src/Program.cs +++ b/docker-compose-generator/src/Program.cs @@ -51,7 +51,9 @@ namespace DockerGenerator } fragments.Add("btcpayserver"); fragments.Add("nbxplorer"); - fragments.Add("postgres"); + if(composition.SelectedDatabase != "sqlite"){ + fragments.Add(composition.SelectedDatabase); + } foreach (var crypto in CryptoDefinition.GetDefinitions()) { if (!composition.SelectedCryptos.Contains(crypto.Crypto)) From db341e5c5b79c66f45ed29f93c94693788ea8606 Mon Sep 17 00:00:00 2001 From: Andrew Camilleri Date: Tue, 4 Dec 2018 15:02:01 +0100 Subject: [PATCH 2/6] integrate into build scripts --- README.md | 1 + btcpay-setup.sh | 4 ++++ build.ps1 | 1 + build.sh | 1 + docker-compose-generator/src/Properties/launchSettings.json | 3 ++- 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cf572f1..ee06db5 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ You can read [the article](https://medium.com/@BtcpayServer/hosting-btcpay-serve * `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`, `(empty)`) +* `BTCPAYGEN_DATABASE`: Database Engine to use(eg. `postgres`, `mysql`, `sqlite`. Default: `postgres`) * `BTCPAYGEN_SUBNAME`: The subname of the generated docker-compose file, where the full name is `Generated/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. `me@example.com`) diff --git a/btcpay-setup.sh b/btcpay-setup.sh index 776faae..ea11ed0 100755 --- a/btcpay-setup.sh +++ b/btcpay-setup.sh @@ -57,6 +57,7 @@ Environment variables: BTCPAYGEN_CRYPTON: N th supported crypto currency where N is maximum at maximum 9. (Default: none) BTCPAYGEN_REVERSEPROXY: Whether to use or not a reverse proxy. NGinx setup HTTPS for you. (eg. nginx, traefik, none. Default: nginx) BTCPAYGEN_LIGHTNING: Lightning network implementation to use (eg. clightning, lnd, none) + BTCPAYGEN_DATABASE: Database Engine to use(eg. postgres, mysql, sqlite. Default: postgres) BTCPAYGEN_ADDITIONAL_FRAGMENTS: Semi colon separated list of additional fragments you want to use (eg. opt-save-storage) ACME_CA_URI: The API endpoint to ask for HTTPS certificate (default: https://acme-v01.api.letsencrypt.org/directory) BTCPAY_HOST_SSHKEYFILE: Optional, SSH private key that BTCPay can use to connect to this VM's SSH server. This key will be copied on BTCPay's data directory @@ -85,6 +86,7 @@ fi : "${BTCPAYGEN_CRYPTO1:=btc}" : "${BTCPAYGEN_REVERSEPROXY:=nginx}" : "${BTCPAYGEN_LIGHTNING:=none}" +: "${BTCPAYGEN_DATABASE:=postgres}" : "${ACME_CA_URI:=https://acme-v01.api.letsencrypt.org/directory}" OLD_BTCPAY_DOCKER_COMPOSE=$BTCPAY_DOCKER_COMPOSE @@ -143,6 +145,7 @@ BTCPAYGEN_CRYPTO8:$BTCPAYGEN_CRYPTO8 BTCPAYGEN_CRYPTO9:$BTCPAYGEN_CRYPTO9 BTCPAYGEN_REVERSEPROXY:$BTCPAYGEN_REVERSEPROXY BTCPAYGEN_LIGHTNING:$BTCPAYGEN_LIGHTNING +BTCPAYGEN_DATABASE:$BTCPAYGEN_DATABASE BTCPAYGEN_ADDITIONAL_FRAGMENTS:$BTCPAYGEN_ADDITIONAL_FRAGMENTS BTCPAY_IMAGE:$BTCPAY_IMAGE ACME_CA_URI:$ACME_CA_URI @@ -186,6 +189,7 @@ export BTCPAYGEN_CRYPTO7=\"$BTCPAYGEN_CRYPTO7\" export BTCPAYGEN_CRYPTO8=\"$BTCPAYGEN_CRYPTO8\" export BTCPAYGEN_CRYPTO9=\"$BTCPAYGEN_CRYPTO9\" export BTCPAYGEN_LIGHTNING=\"$BTCPAYGEN_LIGHTNING\" +export BTCPAYGEN_DATABASE=\"$BTCPAYGEN_DATABASE\" export BTCPAYGEN_REVERSEPROXY=\"$BTCPAYGEN_REVERSEPROXY\" export BTCPAYGEN_ADDITIONAL_FRAGMENTS=\"$BTCPAYGEN_ADDITIONAL_FRAGMENTS\" export BTCPAY_DOCKER_COMPOSE=\"$BTCPAY_DOCKER_COMPOSE\" diff --git a/build.ps1 b/build.ps1 index 2bafc9e..0b1baed 100755 --- a/build.ps1 +++ b/build.ps1 @@ -22,6 +22,7 @@ docker run -v "$(Get-Location)\Generated:/app/Generated" ` -e "BTCPAYGEN_REVERSEPROXY=$BTCPAYGEN_REVERSEPROXY" ` -e "BTCPAYGEN_ADDITIONAL_FRAGMENTS=$BTCPAYGEN_ADDITIONAL_FRAGMENTS" ` -e "BTCPAYGEN_LIGHTNING=$BTCPAYGEN_LIGHTNING" ` + -e "BTCPAYGEN_DATABASE=$BTCPAYGEN_DATABASE" ` -e "BTCPAYGEN_SUBNAME=$BTCPAYGEN_SUBNAME" ` --rm $BTCPAYGEN_DOCKER_IMAGE diff --git a/build.sh b/build.sh index 09f9a4a..dcb3588 100755 --- a/build.sh +++ b/build.sh @@ -23,6 +23,7 @@ docker run -v "$(pwd)/Generated:/app/Generated" \ -e "BTCPAYGEN_REVERSEPROXY=$BTCPAYGEN_REVERSEPROXY" \ -e "BTCPAYGEN_ADDITIONAL_FRAGMENTS=$BTCPAYGEN_ADDITIONAL_FRAGMENTS" \ -e "BTCPAYGEN_LIGHTNING=$BTCPAYGEN_LIGHTNING" \ + -e "BTCPAYGEN_DATABASE=$BTCPAYGEN_DATABASE" \ -e "BTCPAYGEN_SUBNAME=$BTCPAYGEN_SUBNAME" \ --rm $BTCPAYGEN_DOCKER_IMAGE diff --git a/docker-compose-generator/src/Properties/launchSettings.json b/docker-compose-generator/src/Properties/launchSettings.json index b29a0ab..eebb423 100644 --- a/docker-compose-generator/src/Properties/launchSettings.json +++ b/docker-compose-generator/src/Properties/launchSettings.json @@ -9,7 +9,8 @@ "BTCPAYGEN_CRYPTO3": "btg", "BTCPAYGEN_CRYPTO2": "ltc", "BTCPAYGEN_CRYPTO1": "btc", - "BTCPAYGEN_REVERSEPROXY": "nginx" + "BTCPAYGEN_REVERSEPROXY": "nginx", + "BTCPAYGEN_DATABASE": "postgres" } } } From 5d4cd5427f72c824a69fbb3965350bd7da7c1939 Mon Sep 17 00:00:00 2001 From: Andrew Camilleri Date: Wed, 5 Dec 2018 14:03:36 +0100 Subject: [PATCH 3/6] Update mysql.yml --- docker-compose-generator/docker-fragments/mysql.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose-generator/docker-fragments/mysql.yml b/docker-compose-generator/docker-fragments/mysql.yml index 0fde6c9..80c844b 100644 --- a/docker-compose-generator/docker-fragments/mysql.yml +++ b/docker-compose-generator/docker-fragments/mysql.yml @@ -11,9 +11,9 @@ services: btcpayserver: environment: - BTCPAY_POSTGRES: Server=mysql;Database=btcpayserver${NBITCOIN_NETWORK:-regtest};Uid=root;Pwd=;Port=3306; + BTCPAY_MYSQL: Server=mysql;Database=btcpayserver${NBITCOIN_NETWORK:-regtest};Uid=root;Pwd=;Port=3306; links: - mysql volumes: - mysql_datadir: \ No newline at end of file + mysql_datadir: From b6c4948d5633d955f68f171e29f45991ace943ec Mon Sep 17 00:00:00 2001 From: Andrew Camilleri Date: Thu, 6 Dec 2018 11:03:11 +0100 Subject: [PATCH 4/6] text env var fix --- docker-compose-generator/docker-fragments/mysql.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-generator/docker-fragments/mysql.yml b/docker-compose-generator/docker-fragments/mysql.yml index 80c844b..fbf9ebe 100644 --- a/docker-compose-generator/docker-fragments/mysql.yml +++ b/docker-compose-generator/docker-fragments/mysql.yml @@ -7,7 +7,7 @@ services: volumes: - "mysql_datadir:/var/lib/mysql" environment: - MYSQL_ALLOW_EMPTY_PASSWORD: yes + MYSQL_ALLOW_EMPTY_PASSWORD:"yes" btcpayserver: environment: From 21592b82fab488e17d8628529346ea98651ca0c6 Mon Sep 17 00:00:00 2001 From: Andrew Camilleri Date: Thu, 6 Dec 2018 11:04:26 +0100 Subject: [PATCH 5/6] yml fix --- docker-compose-generator/docker-fragments/mysql.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-generator/docker-fragments/mysql.yml b/docker-compose-generator/docker-fragments/mysql.yml index fbf9ebe..739ee72 100644 --- a/docker-compose-generator/docker-fragments/mysql.yml +++ b/docker-compose-generator/docker-fragments/mysql.yml @@ -7,7 +7,7 @@ services: volumes: - "mysql_datadir:/var/lib/mysql" environment: - MYSQL_ALLOW_EMPTY_PASSWORD:"yes" + - MYSQL_ALLOW_EMPTY_PASSWORD="true" btcpayserver: environment: From 8c734d28c9adf7e4402d630767ebaf2e579a6ad0 Mon Sep 17 00:00:00 2001 From: Andrew Camilleri Date: Thu, 6 Dec 2018 11:54:50 +0100 Subject: [PATCH 6/6] format file --- docker-compose-generator/src/Program.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/docker-compose-generator/src/Program.cs b/docker-compose-generator/src/Program.cs index 8161fd4..4bf6e32 100644 --- a/docker-compose-generator/src/Program.cs +++ b/docker-compose-generator/src/Program.cs @@ -8,10 +8,10 @@ namespace DockerGenerator { class Program { - static void Main(string[] args) { - var root = Environment.GetEnvironmentVariable("INSIDE_CONTAINER") == "1" ? FindRoot("app") + var root = Environment.GetEnvironmentVariable("INSIDE_CONTAINER") == "1" + ? FindRoot("app") : Path.GetFullPath(Path.Combine(FindRoot("docker-compose-generator"), "..")); var composition = DockerComposition.FromEnvironmentVariables(); @@ -27,7 +27,9 @@ namespace DockerGenerator private void Run(DockerComposition composition, string name, string output) { - var fragmentLocation = Environment.GetEnvironmentVariable("INSIDE_CONTAINER") == "1" ? "app" : "docker-compose-generator"; + var fragmentLocation = Environment.GetEnvironmentVariable("INSIDE_CONTAINER") == "1" + ? "app" + : "docker-compose-generator"; fragmentLocation = FindRoot(fragmentLocation); fragmentLocation = Path.GetFullPath(Path.Combine(fragmentLocation, "docker-fragments")); @@ -49,11 +51,14 @@ namespace DockerGenerator fragments.Add("btcpayserver-noreverseproxy"); break; } + fragments.Add("btcpayserver"); fragments.Add("nbxplorer"); - if(composition.SelectedDatabase != "sqlite"){ + if (composition.SelectedDatabase != "sqlite") + { fragments.Add(composition.SelectedDatabase); } + foreach (var crypto in CryptoDefinition.GetDefinitions()) { if (!composition.SelectedCryptos.Contains(crypto.Crypto)) @@ -64,6 +69,7 @@ namespace DockerGenerator { fragments.Add(crypto.CLightningFragment); } + if (composition.SelectedLN == "lnd" && crypto.LNDFragment != null) { fragments.Add(crypto.LNDFragment); @@ -96,4 +102,4 @@ namespace DockerGenerator } } } -} +} \ No newline at end of file