diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..85266ff985a71c7c1d0a0933785b77be4d3d3c3d
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,11 @@
+services:
+  simcaq-node:
+    container_name: simcaq-node
+    build: .
+    ports:
+      - '3000:3000'
+    develop:
+      watch:
+        - action: sync
+          path: .
+          target: /API
diff --git a/entrypoint.sh b/entrypoint.sh
new file mode 100644
index 0000000000000000000000000000000000000000..04db51922c7afe6455aa25ef452e79ead0cd5751
--- /dev/null
+++ b/entrypoint.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+echo "Starting simcaq-node"
+gulp watch &> /dev/null &
+cd build
+NODE_ENV=production gulp run
diff --git a/gulpfile.template.js b/gulpfile.template.js
new file mode 100644
index 0000000000000000000000000000000000000000..3de679df0c18e307b692cb22a3cb6446c052fcaf
--- /dev/null
+++ b/gulpfile.template.js
@@ -0,0 +1,20 @@
+const gulp = require('gulp');
+
+const nodemon = require('gulp-nodemon');
+
+gulp.task('run', () => {
+    // process.chdir('build');
+    nodemon({
+        script: 'server.js',
+        // tasks: ['watch'],
+        ignore: ["test/test.js", "gulpfile.babel.js"],
+        ext: 'js html json',
+        env: { 'NODE_ENV': process.env.NODE_ENV }
+    });
+});
+
+gulp.task('default', () => {
+    console.log("Não execuatar apenas gulp, execute da forma:");
+    console.log("\t\tgulp <task>");
+});
+
diff --git a/src/libs/db/monet.js b/src/libs/db/monet.js
index d19fb37dfac5ed68cc15c1762a822818dbbc82da..156a6d0f73c4ce11a04901039aeb57dac6b20a27 100644
--- a/src/libs/db/monet.js
+++ b/src/libs/db/monet.js
@@ -16,6 +16,7 @@ const options = {
     dbname: config.monetdb.dbname,
     user: config.monetdb.user,
     password: config.monetdb.password,
+    idleTimeoutMillis: 30000
 };
 
 // Connection singleton
diff --git a/src/libs/db/query_exec.js b/src/libs/db/query_exec.js
index 904a34fe71b804cfa8a79d580f9be260402f2b07..e0e1637de66dd95a20dca21e4bd28873b3820736 100644
--- a/src/libs/db/query_exec.js
+++ b/src/libs/db/query_exec.js
@@ -37,22 +37,27 @@ const SqlString = require('sqlstring');
  //   Query with more than one parameter:
  //     execSqlQuery('SELECT name, age FROM people WHERE city = ? AND age > ?', ['São Paulo', 35]);
  // ```
-function execSqlQuery(sqlQuery, sqlQueryParams = []) {
+ function execSqlQuery(sqlQuery, sqlQueryParams = []) {
     log.debug(`Executing SQL query '${sqlQuery}' with params '${sqlQueryParams}'`);
     let queryStrWithParams = SqlString.format(sqlQuery, sqlQueryParams);
+
     return new Promise((resolve, reject) => {
-        // Execute query
-        conn.query(queryStrWithParams, [], true).then((dbResult) => {
-            // release resources allocated for the prepared statement
-            resolve(dbResult.data);
-        },(queryError) => {
-            log.error(`SQL query execution error: ${queryError.message}`);
-            log.error(`SQL query: ${sqlQuery} with params: ${sqlQueryParams}`);
-            reject(new Error(queryError.message));
-        });
+        conn.query(queryStrWithParams, [], true)
+            .then((dbResult) => {
+                resolve(dbResult.data);
+            })
+            .catch((queryError) => {
+                log.error(`SQL query execution error: ${queryError.message}`);
+                log.error(`SQL query: ${sqlQuery} with params: ${sqlQueryParams}`);
+                reject(new Error(queryError.message));
+            })
+            .finally(() => {
+                conn.close();
+            });
     });
 }
 
+
 function execMultiQuery(querySet = []) {
     // Issue all queries concurrently to the database, for every query object in the iterable
     // NOTE: Array.map() returns a copy of the original array with each object 'mapped'.