From effde35b53e1c976449accb85548c85568fece35 Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Thu, 12 Jan 2017 18:34:34 +0530 Subject: [PATCH 1/9] adds support for mariadb database backend --- bitnami/express/rootfs/app-entrypoint.sh | 60 +++++++++++++------ .../rootfs/app_template/config/mariadb.js | 18 ++++++ .../rootfs/app_template/config/mongodb.js | 2 +- 3 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 bitnami/express/rootfs/app_template/config/mariadb.js diff --git a/bitnami/express/rootfs/app-entrypoint.sh b/bitnami/express/rootfs/app-entrypoint.sh index fba3e5aeaf22..af0ac14e3686 100755 --- a/bitnami/express/rootfs/app-entrypoint.sh +++ b/bitnami/express/rootfs/app-entrypoint.sh @@ -19,31 +19,57 @@ dependencies_up_to_date() { } database_tier_exists() { - [ ! -z "$(getent hosts mongodb)" ] + [ -n "$(getent hosts mongodb mariadb)" ] +} + +__wait_for_db() { + local host=$1 + local port=$2 + local ip_address=$(getent hosts $1 | awk '{ print $1 }') + + log "Connecting to at $host server at $ip_address" + + counter=0 + until nc -z $ip_address $port; do + counter=$((counter+1)) + if [ $counter == 10 ]; then + log "Error: Couldn't connect to $host server." + return 1 + fi + log "Trying to connect to $host server at $ip_address. Attempt $counter." + sleep 5 + done + log "Connected to $host server" } wait_for_db() { - mongodb_address=$(getent hosts mongodb | awk '{ print $1 }') - counter=0 + if getent hosts mongodb >/dev/null; then + __wait_for_db mongodb 27017 + fi - log "Connecting to MongoDB at $mongodb_address" + if getent hosts mariadb >/dev/null; then + __wait_for_db mariadb 3306 + fi +} - until nc -z $mongodb_address 27017; do - counter=$((counter+1)) - if [ $counter == 10 ]; then - log "Error: Couldn't connect to MongoDB." - exit 1 - fi - log "Trying to connect to MongoDB at $mongodb_address. Attempt $counter." - sleep 5 - done - log "Connected to MongoDB database" +__setup_db() { + local server=$1 + local module=$2 + npm install $module --save + + log "Adding $server example files under config/$server.js" + mkdir -p config/ + cp -rn /app_template/config/$server.js config/$server.js } setup_db() { - npm install mongodb@2.1.18 --save - log "Adding MongoDB example files under /config/mongodb.js" - cp -rn /app_template/config . + if getent hosts mongodb >/dev/null; then + __setup_db mongodb mongodb@2.1.18 + fi + + if getent hosts mariadb >/dev/null; then + __setup_db mariadb mysql@2.12.0 + fi } log () { diff --git a/bitnami/express/rootfs/app_template/config/mariadb.js b/bitnami/express/rootfs/app_template/config/mariadb.js new file mode 100644 index 000000000000..1e3449d88ffc --- /dev/null +++ b/bitnami/express/rootfs/app_template/config/mariadb.js @@ -0,0 +1,18 @@ +/* + Note: Generated by Bitnami: + Configuration file that shows how to use the built in MySQL database in your project. + Based on the examples found here: https://github.com/mysqljs/mysql +*/ + +var mysql = require('mysql') + , assert = require('assert');; + +// Connection URL configured in your docker-compose.yml file +var url = process.env.DATABASE_URL; + +var connection = mysql.createConnection(url); +connection.connect(function(err) { + assert.equal(null, err); + console.log("Connected correctly to MySQL server"); + connection.end(); +}); diff --git a/bitnami/express/rootfs/app_template/config/mongodb.js b/bitnami/express/rootfs/app_template/config/mongodb.js index f41dd80dcb06..ad668e76ec86 100644 --- a/bitnami/express/rootfs/app_template/config/mongodb.js +++ b/bitnami/express/rootfs/app_template/config/mongodb.js @@ -11,7 +11,7 @@ var MongoClient = require('mongodb').MongoClient , assert = require('assert'); // Connection URL configured in your docker-compose.yml file -var url = process.env.DATABASE_URL +var url = process.env.DATABASE_URL; MongoClient.connect(url, function(err, db) { assert.equal(null, err); From b270895b5dc12b900ed78ecf7e898de54a478db2 Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Fri, 13 Jan 2017 09:55:17 +0530 Subject: [PATCH 2/9] adds compose spec for developing with mariadb backend --- bitnami/express/docker-compose-mariadb.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 bitnami/express/docker-compose-mariadb.yml diff --git a/bitnami/express/docker-compose-mariadb.yml b/bitnami/express/docker-compose-mariadb.yml new file mode 100644 index 000000000000..e8748e7b9f0b --- /dev/null +++ b/bitnami/express/docker-compose-mariadb.yml @@ -0,0 +1,19 @@ +version: '2' + +services: + mariadb: + image: bitnami/mariadb:latest + environment: + - MARIADB_DATABASE=my_app_development + + myapp: + tty: true # Enables debugging capabilities when attached to this container. + image: bitnami/express:latest + environment: + - DATABASE_URL=mysql://root@mariadb/my_app_development + depends_on: + - mariadb + ports: + - 3000:3000 + volumes: + - .:/app From f25e6bc2a1de52dec3a1f9203aa8f54d10bc8c7e Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Fri, 13 Jan 2017 10:36:38 +0530 Subject: [PATCH 3/9] copy sample js files to `samples/` directory --- bitnami/express/Dockerfile | 2 +- bitnami/express/rootfs/app-entrypoint.sh | 17 +++++------------ .../config => dist/samples}/mariadb.js | 0 .../config => dist/samples}/mongodb.js | 0 4 files changed, 6 insertions(+), 13 deletions(-) rename bitnami/express/rootfs/{app_template/config => dist/samples}/mariadb.js (100%) rename bitnami/express/rootfs/{app_template/config => dist/samples}/mongodb.js (100%) diff --git a/bitnami/express/Dockerfile b/bitnami/express/Dockerfile index 6197a059008a..72890e81e05d 100644 --- a/bitnami/express/Dockerfile +++ b/bitnami/express/Dockerfile @@ -24,7 +24,7 @@ COPY rootfs/ / # The extra files that we bundle should use the Bitnami User # so the entrypoint does not have any permission issues -RUN chown -R bitnami: /app /app_template +RUN chown -R bitnami: /app /dist USER bitnami diff --git a/bitnami/express/rootfs/app-entrypoint.sh b/bitnami/express/rootfs/app-entrypoint.sh index af0ac14e3686..b747793e9953 100755 --- a/bitnami/express/rootfs/app-entrypoint.sh +++ b/bitnami/express/rootfs/app-entrypoint.sh @@ -52,23 +52,13 @@ wait_for_db() { fi } -__setup_db() { - local server=$1 - local module=$2 - npm install $module --save - - log "Adding $server example files under config/$server.js" - mkdir -p config/ - cp -rn /app_template/config/$server.js config/$server.js -} - setup_db() { if getent hosts mongodb >/dev/null; then - __setup_db mongodb mongodb@2.1.18 + npm install --save mongodb@2.1.18 fi if getent hosts mariadb >/dev/null; then - __setup_db mariadb mysql@2.12.0 + npm install --save mysql@2.12.0 fi } @@ -80,6 +70,9 @@ if [ "$1" == npm -a "$2" == "start" ]; then if ! app_present; then log "Creating express application" express . -f + + log "Adding dist samples" + cp -r /dist/samples . fi if ! dependencies_up_to_date; then diff --git a/bitnami/express/rootfs/app_template/config/mariadb.js b/bitnami/express/rootfs/dist/samples/mariadb.js similarity index 100% rename from bitnami/express/rootfs/app_template/config/mariadb.js rename to bitnami/express/rootfs/dist/samples/mariadb.js diff --git a/bitnami/express/rootfs/app_template/config/mongodb.js b/bitnami/express/rootfs/dist/samples/mongodb.js similarity index 100% rename from bitnami/express/rootfs/app_template/config/mongodb.js rename to bitnami/express/rootfs/dist/samples/mongodb.js From 1c82a31c23aac10d7f6417ac27d65031eafef0f4 Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Fri, 13 Jan 2017 10:51:17 +0530 Subject: [PATCH 4/9] updated mongodb npm module version --- bitnami/express/rootfs/app-entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitnami/express/rootfs/app-entrypoint.sh b/bitnami/express/rootfs/app-entrypoint.sh index b747793e9953..839ca10dddf5 100755 --- a/bitnami/express/rootfs/app-entrypoint.sh +++ b/bitnami/express/rootfs/app-entrypoint.sh @@ -54,7 +54,7 @@ wait_for_db() { setup_db() { if getent hosts mongodb >/dev/null; then - npm install --save mongodb@2.1.18 + npm install --save mongodb@2.2.19 fi if getent hosts mariadb >/dev/null; then From e9c7b3f7027c917fe54e1ef84edc5b1e294e7ab7 Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Fri, 13 Jan 2017 11:17:43 +0530 Subject: [PATCH 5/9] install `mongodb` and `mariadb` modules only if they are not already installed --- bitnami/express/rootfs/app-entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bitnami/express/rootfs/app-entrypoint.sh b/bitnami/express/rootfs/app-entrypoint.sh index 839ca10dddf5..cec86481d246 100755 --- a/bitnami/express/rootfs/app-entrypoint.sh +++ b/bitnami/express/rootfs/app-entrypoint.sh @@ -53,11 +53,11 @@ wait_for_db() { } setup_db() { - if getent hosts mongodb >/dev/null; then + if getent hosts mongodb >/dev/null && ! npm ls mongodb >/dev/null; then npm install --save mongodb@2.2.19 fi - if getent hosts mariadb >/dev/null; then + if getent hosts mariadb >/dev/null && ! npm ls mysql >/dev/null; then npm install --save mysql@2.12.0 fi } From fa9056bbf2e0b484af8b104ab88833194be4c85f Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Fri, 13 Jan 2017 11:19:48 +0530 Subject: [PATCH 6/9] drop version numbers from `mongodb` and `mariadb` modules --- bitnami/express/rootfs/app-entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bitnami/express/rootfs/app-entrypoint.sh b/bitnami/express/rootfs/app-entrypoint.sh index cec86481d246..6b3b8e1fdfff 100755 --- a/bitnami/express/rootfs/app-entrypoint.sh +++ b/bitnami/express/rootfs/app-entrypoint.sh @@ -54,11 +54,11 @@ wait_for_db() { setup_db() { if getent hosts mongodb >/dev/null && ! npm ls mongodb >/dev/null; then - npm install --save mongodb@2.2.19 + npm install --save mongodb fi if getent hosts mariadb >/dev/null && ! npm ls mysql >/dev/null; then - npm install --save mysql@2.12.0 + npm install --save mysql fi } From c26ac0ae35fbfc50bbd664710f6f5f3e42081488 Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Fri, 13 Jan 2017 11:35:46 +0530 Subject: [PATCH 7/9] perform mariadb/mongodb module installation only with generated code --- bitnami/express/rootfs/app-entrypoint.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/bitnami/express/rootfs/app-entrypoint.sh b/bitnami/express/rootfs/app-entrypoint.sh index 6b3b8e1fdfff..1125350bfafb 100755 --- a/bitnami/express/rootfs/app-entrypoint.sh +++ b/bitnami/express/rootfs/app-entrypoint.sh @@ -52,7 +52,7 @@ wait_for_db() { fi } -setup_db() { +add_database_support() { if getent hosts mongodb >/dev/null && ! npm ls mongodb >/dev/null; then npm install --save mongodb fi @@ -67,10 +67,18 @@ log () { } if [ "$1" == npm -a "$2" == "start" ]; then + if database_tier_exists; then + wait_for_db + fi + if ! app_present; then log "Creating express application" express . -f + if database_tier_exists; then + add_database_support + fi + log "Adding dist samples" cp -r /dist/samples . fi @@ -81,10 +89,6 @@ if [ "$1" == npm -a "$2" == "start" ]; then log "Dependencies updated" fi - if database_tier_exists; then - wait_for_db - fi - if ! fresh_container; then echo "#########################################################################" echo " " @@ -95,9 +99,7 @@ if [ "$1" == npm -a "$2" == "start" ]; then echo " " echo "#########################################################################" else - if database_tier_exists; then - setup_db - fi + # Perform any app initialization tasks here. log "Initialization finished" fi From 8c7e42ca890ef220e01e4c4fc02761687d02a442 Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Fri, 13 Jan 2017 15:50:54 +0530 Subject: [PATCH 8/9] adds `PORT` to container environment --- bitnami/express/docker-compose-mariadb.yml | 1 + bitnami/express/docker-compose.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/bitnami/express/docker-compose-mariadb.yml b/bitnami/express/docker-compose-mariadb.yml index e8748e7b9f0b..3c39386a9969 100644 --- a/bitnami/express/docker-compose-mariadb.yml +++ b/bitnami/express/docker-compose-mariadb.yml @@ -10,6 +10,7 @@ services: tty: true # Enables debugging capabilities when attached to this container. image: bitnami/express:latest environment: + - PORT=3000 - DATABASE_URL=mysql://root@mariadb/my_app_development depends_on: - mariadb diff --git a/bitnami/express/docker-compose.yml b/bitnami/express/docker-compose.yml index ad1e8a2c69dd..a742d1ae5d7e 100644 --- a/bitnami/express/docker-compose.yml +++ b/bitnami/express/docker-compose.yml @@ -8,6 +8,7 @@ services: tty: true # Enables debugging capabilities when attached to this container. image: bitnami/express:latest environment: + - PORT=3000 - DATABASE_URL=mongodb://mongodb:27017/my_app_development depends_on: - mongodb From 9b77f24358fcaaad47c6c86875df9085f4f8440d Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Fri, 13 Jan 2017 15:51:21 +0530 Subject: [PATCH 9/9] check `package.json` in `app_present` check --- bitnami/express/rootfs/app-entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitnami/express/rootfs/app-entrypoint.sh b/bitnami/express/rootfs/app-entrypoint.sh index 1125350bfafb..5c9da4a3beaa 100755 --- a/bitnami/express/rootfs/app-entrypoint.sh +++ b/bitnami/express/rootfs/app-entrypoint.sh @@ -9,7 +9,7 @@ fresh_container() { } app_present() { - [ -f /app/app.js ] + [ -f package.json ] } dependencies_up_to_date() {