TMG EWD / Node.js configuration

Below will be a description of the EWD setup used at the TMG Site (Kevin Toppenberg's office)

EWD Reference guide: EWDjs.pdf

Here are some notes made during installation and in this thread:

Below is the resulting directory structure /opt/ewdlite/ ├── node_modules │  ├── ewdgateway2 │  │   ├── ewd-classic │  │   │   ├── ewdapps │  │   │   │   └── ewdGateway2 │  │   │   │       ├── js │   │   │   │       └── node │  │   │   │           └── ewdGateway2 │  │   │   │               └── examples │  │   │   └── startupExamples │  │   ├── ewdLite │  │   │   ├── mongoDB │  │   │   │   └── node-0.10 │  │   │   │       ├── linux32 │  │   │   │       ├── linux64 │  │   │   │       ├── raspberryPi │  │   │   │       └── winx64 │  │   │   ├── node_modules │  │   │   ├── OSEHRA │  │   │   ├── ssl │  │   │   ├── startupExamples │  │   │   └── www │  │   │       ├── ewd │  │   │       │   ├── bootstrap3 │  │   │       │   ├── ewdEncrypter │  │   │       │   ├── ewdGDSync │  │   │       │   ├── ewdMonitor │  │   │       │   ├── VistADemo │  │   │       │   └── webSvcMgr │  │   │       ├── ewdLite │  │   │       └── respond │  │   ├── examples │  │   ├── lib │  │   └── node_modules │  │       └── socket.io │   │           ├── benchmarks │  │           ├── lib │  │           │   ├── stores │  │           │   └── transports │  │           │       └── websocket │  │           └── node_modules │  │               ├── base64id │  │               │   └── lib │  │               ├── policyfile │  │               │   ├── doc │  │               │   ├── examples │  │               │   ├── lib │  │               │   └── tests │  │               │       └── ssl │  │               ├── redis │  │               │   ├── benches │  │               │   │   └── stress │  │               │   │       ├── pubsub │  │               │   │       ├── rpushblpop │  │               │   │       └── speed │  │               │   ├── examples │  │               │   └── lib │  │               │       └── parser │  │               └── socket.io-client │  │                   ├── bin │  │                   ├── components │  │                   │   ├── component-bind │  │                   │   ├── component-emitter │  │                   │   ├── component-json │  │                   │   ├── component-json-fallback │  │                   │   ├── learnboost-engine.io-client │  │                   │   │   └── lib │  │                   │   │       └── transports │  │                   │   ├── learnboost-socket.io-protocol │  │                   │   ├── timoxley-to-array │  │                   │   └── visionmedia-debug │  │                   ├── dist │  │                   ├── lib │  │                   │   ├── transports │  │                   │   └── vendor │  │                   │       └── web-socket-js │  │                   │           └── flash-src │  │                   │               └── com │  │                   │                   ├── adobe │  │                   │                   │   └── net │  │                   │                   │       └── proxies │  │                   │                   ├── gsolo │  │                   │                   │   └── encryption │  │                   │                   └── hurlant │  │                   │                       ├── crypto │  │                   │                       │   ├── cert │  │                   │                       │   ├── hash │  │                   │                       │   ├── prng │  │                   │                       │   ├── rsa │  │                   │                       │   ├── symmetric │  │                   │                       │   ├── tests │  │                   │                       │   └── tls │  │                   │                       ├── math │  │                   │                       └── util │  │                   │                           └── der │  │                   ├── node_modules │  │                   │   ├── active-x-obfuscator │  │                   │   │   └── node_modules │  │                   │   │       └── zeparser │  │                   │   ├── uglify-js │  │                   │   │   ├── bin │  │                   │   │   ├── lib │  │                   │   │   ├── test │  │                   │   │   │   └── unit │  │                   │   │   │       └── compress │  │                   │   │   │           ├── expected │  │                   │   │   │           └── test │  │                   │   │   └── tmp │  │                   │   ├── ws │   │                   │   │   ├── bench │  │                   │   │   ├── bin │  │                   │   │   ├── build │  │                   │   │   │   └── Release │  │                   │   │   │       └── obj.target │  │                   │   │   │           ├── bufferutil │  │                   │   │   │           │   └── src │  │                   │   │   │           └── validation │  │                   │   │   │               └── src │  │                   │   │   ├── doc │  │                   │   │   ├── examples │  │                   │   │   │   ├── fileapi │  │                   │   │   │   │   └── public │  │                   │   │   │   ├── serverstats │  │                   │   │   │   │   └── public │  │                   │   │   │   └── serverstats-express_3 │  │                   │   │   │       └── public │  │                   │   │   ├── lib │  │                   │   │   ├── node_modules │  │                   │   │   │   ├── commander │  │                   │   │   │   │   └── lib │  │                   │   │   │   ├── nan │  │                   │   │   │   ├── options │  │                   │   │   │   │   ├── lib │  │                   │   │   │   │   └── test │  │                   │   │   │   │       └── fixtures │  │                   │   │   │   └── tinycolor │  │                   │   │   ├── src │  │                   │   │   └── test │  │                   │   │       └── fixtures │  │                   │   └── xmlhttprequest │  │                   │       ├── example │  │                   │       ├── lib │  │                   │       └── tests │  │                   └── test │  │                       └── node │  ├── ewdliteclient │  │   └── lib │  └── nodem │      ├── examples │      ├── lib │      ├── resources │      └── src ├── ssl └── www ├── ewd │  ├── bootstrap3 │  ├── ewdEncrypter │  ├── ewdGDSync │  ├── ewdMonitor │  ├── VistADemo │  └── webSvcMgr ├── ewdLite └── respond

And below is /opt/ewdlite/ewdStart-globals-http.js  (And for FYI, that port 8080 is not exposed to the internet.)

var ewd = require('ewdgateway2'); var params = { lite: true, poolSize: 2, httpPort: 8080, https: { enabled: false },  database: { type: 'gtm', nodePath: "/opt/ewdlite/node_modules/nodem/lib/mumps.node", },  lite: true, modulePath: '/opt/ewdlite/node_modules', traceLevel: 3, webServerRootPath: '/opt/ewdlite/www', logFile: 'ewdLog.txt', management: { password: 'xxxxxxxx'  # } }; ewd.start(params);

Below is /etc/init/ewdlite.conf This causes EWD to automatically come up with each server reboot. Notice the modifications made, marked by #//kt. Notice that setup_env is sourced into this script.

description "ewdlite server" author     "Mike Clayton on behalf of http://mgateway.com" start on started mountall stop on shutdown respawn respawn limit 10 5 script # Not sure why $HOME is needed, but we found that it is: export HOME="/opt/ewdlite" #//kt --- start mod . /opt/worldvista/EHR/bin/setup_env echo "Starting ewdlist server at" $(date) >> /tmp/ewdlite_service.log echo "gtm_dist: " $gtm_dist >> /tmp/ewdlite_service.log #//kt --- end mod --- exec /usr/local/bin/node /opt/ewdlite/ewdStart-globals.js >> /var/log/ewdlite.log 2>&1 end script post-start script # Optionally put a script here that will notifiy you node has (re)started end script
 * 1) Automatically Respawn:

Below is /opt/worldvista/EHR/bin/setup_env used to established environmental variables. The parts we had to add to this startup script, when setting up EWD, are the lines for exporting node_home, and GTMCI, and we modified the line exporting gtmroutines to include the source files for Node.

## echo "Starting Setup_env script" export GTM_REPLICATION=off export vista_home="/opt/worldvista/EHR" $vista_home/bin/env echo "vista_home="$vista_home export VH=${vista_home} # a short name for paths, etc - temp echo "VH="$VH export gtm_dist="${VH}/m" echo "gtm_dist="$gtm_dist export gtm_prompt="ASTRON>" export node_home="/opt/ewdlite/node_modules/nodem" export GTMCI="${node_home}/resources/calltab.ci" export gtm_log="${VH}/log" export gtmgbldir="${VH}/g/mumps.gld" export gtmroutines="${VH}/o(${VH}/p ${VH}/r ${node_home}/src)" export gtmroutines="${gtmroutines} ${gtm_dist}" export gtm_zinterrupt='I $$JOBEXAM^ZU($ZPOSITION)' ## export PATH="${VH}/m:${PATH}" unset VH ### alias GTM="${gtm_dist}/mumps -direct" alias gtm="${gtm_dist}/mumps -direct" alias mupip="${gtm_dist}/mupip" alias gde="${gtm_dist}/mumps -run ^GDE" alias GDE="${gtm_dist}/mumps -run ^GDE" alias lke="${gtm_dist}/lke" alias dse="${gtm_dist}/dse" alias LKE="${gtm_dist}/lke" alias DSE="${gtm_dist}/dse" alias rundown="${gtm_dist}/mupip rundown -r \"*\""
 * 1) !/bin/sh
 * 1) export gtm_sysid="xxxx"
 * 1) MD5 Library external-call table
 * 2) export GTMXC_md5="${VH}/w/xc/gtm_md5.xc"
 * 1) Define command aliases

So that's it. We had a successful test with the above files.

Kevin Toppenberg