diff --git a/Dockerfile b/Dockerfile index 1243aad..01f90d6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,60 @@ -FROM node:boron +FROM ubuntu:16.04 -# Create app directory -WORKDIR /usr/src/app +RUN apt-get update +## Install base environment +RUN apt-get install -y wget python python-pip -# Install app dependencies -COPY package.json package-lock.json ./ +## Nodejs +# Prepare +WORKDIR /opt/ +# Download +RUN wget https://nodejs.org/dist/v6.11.1/node-v6.11.1-linux-x64.tar.xz +# Unpack +RUN tar xf node-v6.11.1-linux-x64.tar.xz +RUN rm node-v6.11.1-linux-x64.tar.xz +RUN mv node-v6.11.1-linux-x64 node +# Install +WORKDIR /opt/node +RUN mv bin/* /usr/bin/ +RUN mv include/* /usr/include/ +RUN mv lib/* /usr/lib/ +RUN mv share/doc/* /usr/share/doc/ +RUN mv share/man/man1/* /usr/share/man/man1/ +RUN mv share/systemtap/* /usr/share/systemtap/ + +## Postgres +# Installation +RUN apt-get install -y postgresql postgresql-contrib + +# Configuration +RUN mkdir /opt/pgsql +RUN chown postgres -R /opt/pgsql +WORKDIR /opt/postgresql + +ADD resources/dbcreate.sql dbcreate.sql +RUN service postgresql start && su postgres -c "createuser rasaui && echo \"create database rasaui; \c rasaui; \i dbcreate.sql\" | psql && echo \"grant all on database rasaui to rasaui; grant all privileges on all tables in schema public to rasaui; grant all privileges on all sequences in schema public to rasaui \"|psql rasaui" && service postgresql stop + +## RasaUI +# Installation +ADD . /opt/rasaui +WORKDIR /opt/rasaui + +# Install server packages RUN npm install -# Bundle app source -COPY . . +# Setup user +RUN useradd rasaui +RUN chown rasaui -R . -#Install webapp dependencies -WORKDIR /usr/src/app/web/src/ -RUN cd /usr/src/app/web/src/ +# Install web packages +WORKDIR /opt/rasaui/web/src RUN npm install +WORKDIR /opt/rasaui + +# Setup RasaUI configuration +RUN sed -r 's/("postgresConnectionString": )"[^"]*"(.*)/\1"\/var\/run\/postgresql"\2/' -i package.json +ENV rasaserver=http://localhost:5000 -WORKDIR /usr/src/app -RUN ls -ltr EXPOSE 5001 -CMD [ "npm", "start" ] + +ENTRYPOINT bash -c 'hostname -I; service postgresql start && su rasaui -c "npm start"' \ No newline at end of file diff --git a/package.json b/package.json index bab3a70..e8e13bc 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "start": "node server/server.js" }, "author": "Paul Aschmann", - "url": "http://", + "url": "https://github.com/paschmann/rasa-ui", "copyright": "Copyright 2017", - "license": "http://" + "license": "https://github.com/paschmann/rasa-ui/blob/master/license" } diff --git a/server/db/db.js b/server/db/db.js index a35f94c..b734717 100644 --- a/server/db/db.js +++ b/server/db/db.js @@ -6,7 +6,6 @@ var options = { }; var pgp = require('pg-promise')(options); -var connectionString = process.env.npm_package_config_postgresConnectionString; -var db = pgp(connectionString); +var db = pgp(global.postgresserver); module.exports = db; diff --git a/server/routes/middleware.js b/server/routes/middleware.js index b0779d9..0d21cab 100644 --- a/server/routes/middleware.js +++ b/server/routes/middleware.js @@ -5,8 +5,8 @@ const NodeCache = require( "node-cache" ); const parseLogCache = new NodeCache(); function getRasaNluStatus(req, res, next) { - console.log("Rasa NLU Status Request -> " + process.env.npm_package_config_rasaserver + "/status"); - request(process.env.npm_package_config_rasaserver + '/status', function (error, response, body) { + console.log("Rasa NLU Status Request -> " + global.rasaserver + "/status"); + request(global.rasaserver + '/status', function (error, response, body) { try { if (body !== undefined) { sendOutput(200, res, body); @@ -21,8 +21,8 @@ function getRasaNluStatus(req, res, next) { } function getRasaNluConfig(req, res, next) { - console.log("Rasa NLU Config Request -> " + process.env.npm_package_config_rasaserver + "/config"); - request(process.env.npm_package_config_rasaserver + '/config', function (error, response, body) { + console.log("Rasa NLU Config Request -> " + global.rasaserver + "/config"); + request(global.rasaserver + '/config', function (error, response, body) { try { if (body !== undefined) sendOutput(200, res, body); else sendOutput(404, res, '{"error" : "Server Error"}'); @@ -34,8 +34,8 @@ function getRasaNluConfig(req, res, next) { } function getRasaNluVersion(req, res, next) { - console.log("Rasa NLU Version Request -> " + process.env.npm_package_config_rasaserver + "/version"); - request(process.env.npm_package_config_rasaserver + '/version', function (error, response, body) { + console.log("Rasa NLU Version Request -> " + global.rasaserver + "/version"); + request(global.rasaserver + '/version', function (error, response, body) { try { if (body !== undefined) sendOutput(200, res, body); else sendOutput(404, res, '{"error" : "Server Error"}'); @@ -47,12 +47,12 @@ function getRasaNluVersion(req, res, next) { } function trainRasaNlu(req, res, next) { - console.log("Rasa NLU Train Request -> " + process.env.npm_package_config_rasaserver + "/train?project=" + req.query.project); + console.log("Rasa NLU Train Request -> " + global.rasaserver + "/train?project=" + req.query.project); logRequest(req, "train", {project: req.query.project, agent: req.query.name, data: req.body}); request({ method: "POST", - uri: process.env.npm_package_config_rasaserver + "/train?project=" + req.query.project, + uri: global.rasaserver + "/train?project=" + req.query.project, body: JSON.stringify(req.body) }, function (error, response, body) { if(error){ @@ -77,7 +77,7 @@ function trainRasaNlu(req, res, next) { } function parseRasaNlu(req, res, next) { - console.log("Rasa NLU Parse Request -> " + process.env.npm_package_config_rasaserver + "/parse"); + console.log("Rasa NLU Parse Request -> " + global.rasaserver + "/parse"); var modelName = req.body.model; var projectName = req.body.project; if(modelName == ''){ @@ -95,7 +95,7 @@ function parseRasaNlu(req, res, next) { createInitialCacheRequest(req,cache_key); request({ method: "POST", - uri: process.env.npm_package_config_rasaserver + "/parse", + uri: global.rasaserver + "/parse", body: JSON.stringify(req.body) }, function (error, response, body) { if(error){ diff --git a/server/server.js b/server/server.js index c7f40f6..ea6e74a 100644 --- a/server/server.js +++ b/server/server.js @@ -1,3 +1,9 @@ +// Global Variables +global.postgresserver = process.env.postgresserver || process.env.npm_package_config_postgresConnectionString; +global.rasaserver = process.env.rasaserver || process.env.npm_package_config_rasaserver; +global.rasacoreserver = process.env.rasacoreserver || process.env.npm_package_config_rasacoreserver; +global.jwtsecret = process.env.jwtsecret || process.env.npm_package_config_jwtsecret; + var express = require('express'); var proxy = require('http-proxy-middleware'); var bodyParser = require('body-parser'); @@ -38,7 +44,7 @@ app.use(function(req, res, next) { if (req.headers.authorization.split(' ')[0] === 'Bearer'){ var token = req.headers.authorization.split(' ')[1]; // verifies secret and checks exp - jwt.verify(token, process.env.npm_package_config_jwtsecret, function(err, decoded) { + jwt.verify(token, global.jwtsecret, function(err, decoded) { if (err) { return res.json({ success: false, message: 'Failed to authenticate token.' }); } else { @@ -81,38 +87,53 @@ app.use(function(err, req, res, next) { }); }); -app.listen(5001); +var listener = app.listen(5001); +checkRasaUI(); checkDB(); checkRasaNLU(); //checkRasaCore(); +function checkRasaUI() { + console.log(''); + console.log('Rasa UI Server: ' + listener.address().address + ':' + listener.address().port); + console.log(''); +} + function checkDB() { db.one('select current_database(), current_schema(), inet_server_port(), inet_server_addr()') .then(function (data) { + var dbconn = process.env.postgresserver != undefined ? 'process.env.postgresserver' : 'package.json'; console.log(''); - console.log('DB Connected'); + console.log('Postgres DB Connected'); + console.log('Using connection string from: ' + dbconn); console.log('Postgres Server: ' + data["inet_server_addr"] + ':' + data["inet_server_port"]); console.log('Database:' + data["current_database"]); console.log('Schema:' + data["current_schema"]); console.log(''); }) .catch(function (err) { - console.log('DB Connection Error: ' + err) + var dbconn = process.env.postgresserver != undefined ? 'process.env.postgresserver' : 'package.json'; + console.log('Postgres DB Connection Error: ' + err); + console.log('Using connection string from: ' + dbconn); }); } function checkRasaNLU() { - request(process.env.npm_package_config_rasaserver + '/config', function (error, response, body) { + request(global.rasaserver + '/config', function (error, response, body) { try { if (body !== undefined) { + var rasaconn = process.env.rasaserver != undefined ? 'process.env.rasaserver' : 'package.json'; console.log(''); console.log('Rasa NLU Connected'); - console.log('Rasa NLU Server: ' + process.env.npm_package_config_rasaserver); + console.log('Using connection string from: ' + rasaconn); + console.log('Rasa NLU Server: ' + global.rasaserver); } if (error !== null) { + var rasaconn = process.env.rasaserver != undefined ? 'process.env.rasaserver' : 'package.json'; console.log(''); console.log('Rasa NLU Error: ' + error); + console.log('Using connection string from: ' + rasaconn); } console.log(''); } catch (err) { @@ -122,12 +143,12 @@ function checkRasaNLU() { } function checkRasaCore() { - request(process.env.npm_package_config_rasacoreendpoint + '/config', function (error, response, body) { + request(global.rasacoreserver + '/config', function (error, response, body) { try { if (body !== undefined) { console.log(''); console.log('Rasa Core Connected'); - console.log('Rasa Core Server: ' + process.env.npm_package_config_rasacoreendpoint); + console.log('Rasa Core Server: ' + global.rasacoreserver); } if (error !== null) { console.log('');