From 3c328dbab26c861708a1790b3927690a1d903c1e Mon Sep 17 00:00:00 2001 From: Saad Jutt Date: Wed, 17 Nov 2021 07:49:42 +0500 Subject: [PATCH] chore: docker bind mount + sasjs/cli in container --- .env.example | 1 + DockerfileApi | 1 + DockerfileProd | 1 + api/.env.example | 5 +- api/package-lock.json | 146 ++++++++++++++++++++---- api/package.json | 5 +- api/src/app.ts | 3 +- api/src/controllers/internal/Session.ts | 7 +- api/src/routes/api/auth.ts | 27 ----- api/src/routes/api/stp.ts | 4 +- api/src/types/Process.d.ts | 2 +- api/src/utils/connectDB.ts | 41 +++++++ api/src/utils/index.ts | 1 + docker-compose.prod.yml | 6 + docker-compose.yml | 9 +- 15 files changed, 197 insertions(+), 62 deletions(-) create mode 100644 api/src/utils/connectDB.ts diff --git a/.env.example b/.env.example index 82484f2..e6d0d4f 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ +SAS_EXEC= PORT_API= PORT_WEB= ACCESS_TOKEN_SECRET= diff --git a/DockerfileApi b/DockerfileApi index aefb9e2..3386b4b 100644 --- a/DockerfileApi +++ b/DockerfileApi @@ -1,4 +1,5 @@ FROM node:lts-alpine +RUN npm install -g @sasjs/cli WORKDIR /usr/server/api COPY ["package.json","package-lock.json", "./"] RUN npm ci diff --git a/DockerfileProd b/DockerfileProd index 0327c8f..2c8aa8e 100644 --- a/DockerfileProd +++ b/DockerfileProd @@ -1,4 +1,5 @@ FROM node:lts-alpine +RUN npm install -g @sasjs/cli WORKDIR /usr/server/ COPY . . RUN cd web && npm ci --silent diff --git a/api/.env.example b/api/.env.example index ed4950a..8968cda 100644 --- a/api/.env.example +++ b/api/.env.example @@ -1,5 +1,6 @@ -MODE=[server] default value is desktop -CORS=[enable] default value is 5000 +MODE=[desktop|server] default considered as desktop +CORS=[disable|enable] default considered as disable +PORT=[5000] default value is 5000 PORT_WEB=[port for sasjs web component(react)] default value is 3000 ACCESS_TOKEN_SECRET= REFRESH_TOKEN_SECRET= diff --git a/api/package-lock.json b/api/package-lock.json index 9cb7d87..e6dd55e 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -18,6 +18,7 @@ "mongoose-sequence": "^5.3.1", "morgan": "^1.10.0", "multer": "^1.4.3", + "shelljs": "^0.8.4", "swagger-ui-express": "^4.1.6", "tsoa": "^3.14.0" }, @@ -34,6 +35,7 @@ "@types/morgan": "^1.9.3", "@types/multer": "^1.4.7", "@types/node": "^15.12.2", + "@types/shelljs": "^0.8.9", "@types/supertest": "^2.0.11", "@types/swagger-ui-express": "^4.1.3", "dotenv": "^10.0.0", @@ -1578,9 +1580,9 @@ } }, "node_modules/@sasjs/utils/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2242,6 +2244,16 @@ "@types/node": "*" } }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -2419,6 +2431,12 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "node_modules/@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", @@ -2486,9 +2504,9 @@ "dev": true }, "node_modules/@types/prompts": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.0.13.tgz", - "integrity": "sha512-jwMOIGy49VruR/gYehhJYgpVzB+EVpEE7t7j9m1oTo4HMpOe7KmsyqdBuoxAzA5B4caUgx0cKrWr7wUEqMXJ7Q==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.0.14.tgz", + "integrity": "sha512-HZBd99fKxRWpYCErtm2/yxUZv6/PBI9J7N4TNFffl5JbrYMHBwF25DjQGTW3b3jmXq+9P6/8fCIb2ee57BFfYA==", "dependencies": { "@types/node": "*" } @@ -2521,6 +2539,16 @@ "@types/node": "*" } }, + "node_modules/@types/shelljs": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz", + "integrity": "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==", + "dev": true, + "dependencies": { + "@types/glob": "*", + "@types/node": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -5792,6 +5820,14 @@ "node": ">= 0.4" } }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/into-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", @@ -5902,7 +5938,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -12073,8 +12108,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -12791,6 +12825,17 @@ "node": ">=8.10.0" } }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -12859,7 +12904,6 @@ "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -13194,6 +13238,22 @@ "node": ">=8" } }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -16100,9 +16160,9 @@ }, "dependencies": { "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16645,6 +16705,16 @@ "@types/node": "*" } }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -16794,6 +16864,12 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", @@ -16860,9 +16936,9 @@ "dev": true }, "@types/prompts": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.0.13.tgz", - "integrity": "sha512-jwMOIGy49VruR/gYehhJYgpVzB+EVpEE7t7j9m1oTo4HMpOe7KmsyqdBuoxAzA5B4caUgx0cKrWr7wUEqMXJ7Q==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.0.14.tgz", + "integrity": "sha512-HZBd99fKxRWpYCErtm2/yxUZv6/PBI9J7N4TNFffl5JbrYMHBwF25DjQGTW3b3jmXq+9P6/8fCIb2ee57BFfYA==", "requires": { "@types/node": "*" } @@ -16895,6 +16971,16 @@ "@types/node": "*" } }, + "@types/shelljs": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz", + "integrity": "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -19467,6 +19553,11 @@ "side-channel": "^1.0.4" } }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, "into-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", @@ -19541,7 +19632,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -24094,8 +24184,7 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", @@ -24625,6 +24714,14 @@ "picomatch": "^2.2.1" } }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -24681,7 +24778,6 @@ "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -24927,6 +25023,16 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", diff --git a/api/package.json b/api/package.json index bd25b43..4742b51 100644 --- a/api/package.json +++ b/api/package.json @@ -50,6 +50,7 @@ "mongoose-sequence": "^5.3.1", "morgan": "^1.10.0", "multer": "^1.4.3", + "shelljs": "^0.8.4", "swagger-ui-express": "^4.1.6", "tsoa": "^3.14.0" }, @@ -63,6 +64,7 @@ "@types/morgan": "^1.9.3", "@types/multer": "^1.4.7", "@types/node": "^15.12.2", + "@types/shelljs": "^0.8.9", "@types/supertest": "^2.0.11", "@types/swagger-ui-express": "^4.1.3", "dotenv": "^10.0.0", @@ -79,7 +81,6 @@ "typescript": "^4.3.2" }, "configuration": { - "sasPath": "/opt/sas/sas9/SASHome/SASFoundation/9.4/sas", - "sasJsPort": 5000 + "sasPath": "/opt/sas/sas9/SASHome/SASFoundation/9.4" } } diff --git a/api/src/app.ts b/api/src/app.ts index 1b78f2f..6879eff 100644 --- a/api/src/app.ts +++ b/api/src/app.ts @@ -6,8 +6,7 @@ import cors from 'cors' import webRouter from './routes/web' import apiRouter from './routes/api' -import { getWebBuildFolderPath } from './utils' -import { connectDB } from './routes/api/auth' +import { connectDB, getWebBuildFolderPath } from './utils' dotenv.config() diff --git a/api/src/controllers/internal/Session.ts b/api/src/controllers/internal/Session.ts index c25daf5..56a6e58 100644 --- a/api/src/controllers/internal/Session.ts +++ b/api/src/controllers/internal/Session.ts @@ -1,6 +1,5 @@ import path from 'path' import { Session } from '../../types' -import { configuration } from '../../../package.json' import { promisify } from 'util' import { execFile } from 'child_process' import { getTmpSessionsFolderPath, generateUniqueFileName } from '../../utils' @@ -65,8 +64,8 @@ export class SessionController { // update the session array to say that it is currently running // however we also need a promise so that we can update the // session array to say that it has (eventually) finished. - const sasLoc = process.sasLoc ?? configuration.sasPath - execFilePromise(sasLoc, [ + + execFilePromise(process.sasLoc, [ '-SYSIN', codePath, '-LOG', @@ -84,7 +83,7 @@ export class SessionController { .catch((err) => { session.completed = true session.crashed = err.toString() - console.log('session crashed', session.id, err) + console.log('session crashed', session.id) }) // we have a triggered session - add to array diff --git a/api/src/routes/api/auth.ts b/api/src/routes/api/auth.ts index 32929ef..df359bc 100644 --- a/api/src/routes/api/auth.ts +++ b/api/src/routes/api/auth.ts @@ -1,5 +1,4 @@ import express from 'express' -import mongoose from 'mongoose' import { AuthController } from '../../controllers/' import Client from '../../model/Client' @@ -28,32 +27,6 @@ export const populateClients = async () => { }) } -export const connectDB = async () => { - const { MODE } = process.env - if (MODE?.trim() !== 'server') { - console.log('Running in Destop Mode, no DB to connect.') - - const { sasLoc, driveLoc } = await getDesktopFields() - - process.sasLoc = sasLoc - process.driveLoc = driveLoc - - return - } - - // NOTE: when exporting app.js as agent for supertest - // we should exlcude connecting to the real database - if (process.env.NODE_ENV !== 'test') { - mongoose.connect(process.env.DB_CONNECT as string, async (err) => { - if (err) throw err - - console.log('Connected to db!') - - await populateClients() - }) - } -} - authRouter.post('/authorize', async (req, res) => { const { error, value: body } = authorizeValidation(req.body) if (error) return res.status(400).send(error.details[0].message) diff --git a/api/src/routes/api/stp.ts b/api/src/routes/api/stp.ts index e4691ff..2564f11 100644 --- a/api/src/routes/api/stp.ts +++ b/api/src/routes/api/stp.ts @@ -37,8 +37,8 @@ stpRouter.post( try { const response = await controller.executeReturnJson( req, - query, - body?._program + body, + query?._program ) res.send(response) } catch (err: any) { diff --git a/api/src/types/Process.d.ts b/api/src/types/Process.d.ts index f90ae02..dbd7f0f 100644 --- a/api/src/types/Process.d.ts +++ b/api/src/types/Process.d.ts @@ -1,6 +1,6 @@ declare namespace NodeJS { export interface Process { - sasLoc?: string + sasLoc: string driveLoc?: string sessionController?: import('../controllers/internal').SessionController } diff --git a/api/src/utils/connectDB.ts b/api/src/utils/connectDB.ts new file mode 100644 index 0000000..e785735 --- /dev/null +++ b/api/src/utils/connectDB.ts @@ -0,0 +1,41 @@ +import path from 'path' +import mongoose from 'mongoose' +import { configuration } from '../../package.json' +import { getDesktopFields } from '.' +import { populateClients } from '../routes/api/auth' +import shelljs from 'shelljs' + +export const connectDB = async () => { + shelljs.exec(`sasjs v`) + + const { MODE } = process.env + if (MODE?.trim() !== 'server') { + console.log('Running in Destop Mode, no DB to connect.') + + const { sasLoc, driveLoc } = await getDesktopFields() + + process.sasLoc = sasLoc + process.driveLoc = driveLoc + + return + } else { + const { SAS_PATH } = process.env + const sasDir = SAS_PATH ?? configuration.sasPath + + process.sasLoc = path.join(sasDir, 'sas') + } + + console.log('sasLoc: ', process.sasLoc) + + // NOTE: when exporting app.js as agent for supertest + // we should exlcude connecting to the real database + if (process.env.NODE_ENV !== 'test') { + mongoose.connect(process.env.DB_CONNECT as string, async (err) => { + if (err) throw err + + console.log('Connected to db!') + + await populateClients() + }) + } +} diff --git a/api/src/utils/index.ts b/api/src/utils/index.ts index ade03b5..3cf1039 100644 --- a/api/src/utils/index.ts +++ b/api/src/utils/index.ts @@ -1,3 +1,4 @@ +export * from './connectDB' export * from './file' export * from './generateAccessToken' export * from './generateAuthCode' diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index c809b32..0566d1d 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -14,10 +14,16 @@ services: REFRESH_TOKEN_SECRET: ${REFRESH_TOKEN_SECRET} AUTH_CODE_SECRET: ${AUTH_CODE_SECRET} DB_CONNECT: mongodb://mongodb:27017/sasjs + SAS_PATH: /usr/server/sasexe expose: - ${PORT_API} ports: - ${PORT_API}:${PORT_API} + volumes: + - type: bind + source: ${SAS_EXEC} + target: /usr/server/sasexe + read_only: true links: - mongodb diff --git a/docker-compose.yml b/docker-compose.yml index cc80121..8882785 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,20 +7,25 @@ services: context: . dockerfile: DockerfileApi environment: - MODE: server - CORS: enable + MODE: ${MODE} + CORS: ${CORS} PORT: ${PORT_API} PORT_WEB: ${PORT_WEB} ACCESS_TOKEN_SECRET: ${ACCESS_TOKEN_SECRET} REFRESH_TOKEN_SECRET: ${REFRESH_TOKEN_SECRET} AUTH_CODE_SECRET: ${AUTH_CODE_SECRET} DB_CONNECT: mongodb://mongodb:27017/sasjs + SAS_PATH: /usr/server/sasexe expose: - ${PORT_API} ports: - ${PORT_API}:${PORT_API} volumes: - ./api:/usr/server/api + - type: bind + source: ${SAS_EXEC} + target: /usr/server/sasexe + read_only: true links: - mongodb