From 4792f15c408ab725255fe5cec1727539962cb600 Mon Sep 17 00:00:00 2001 From: Saad Jutt Date: Sun, 14 Nov 2021 09:03:38 +0500 Subject: [PATCH] chore: docker configured for development api+web+mongodb --- Dockerfile | 10 ---------- api/.dockerignore | 6 ++++++ api/.env.example | 1 + api/Dockerfile | 9 +++++++++ api/src/app.ts | 10 +++++++--- api/src/routes/web/web.ts | 21 ++++++++++++++------- docker-compose.yml | 20 +++++++++++++------- web/.dockerignore | 3 +++ web/Dockerfile | 9 +++++++++ 9 files changed, 62 insertions(+), 27 deletions(-) delete mode 100644 Dockerfile create mode 100644 api/.dockerignore create mode 100644 api/Dockerfile create mode 100644 web/.dockerignore create mode 100644 web/Dockerfile diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 86721ce..0000000 --- a/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:lts-alpine -ENV NODE_ENV=production -WORKDIR /usr/src/app -COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"] -RUN npm install --silent && mv node_modules ../ -COPY . . -EXPOSE 5000 -RUN chown -R node /usr/src/app -USER node -CMD ["npm", "start"] diff --git a/api/.dockerignore b/api/.dockerignore new file mode 100644 index 0000000..4dd34d0 --- /dev/null +++ b/api/.dockerignore @@ -0,0 +1,6 @@ +build +coverage +node_modules +public +web +Dockerfile diff --git a/api/.env.example b/api/.env.example index 3e14bda..845c2d6 100644 --- a/api/.env.example +++ b/api/.env.example @@ -1,4 +1,5 @@ MODE=[server] +CORS=[enable] ACCESS_TOKEN_SECRET= REFRESH_TOKEN_SECRET= AUTH_CODE_SECRET= diff --git a/api/Dockerfile b/api/Dockerfile new file mode 100644 index 0000000..cb1fe84 --- /dev/null +++ b/api/Dockerfile @@ -0,0 +1,9 @@ +FROM node:lts-alpine +WORKDIR /usr/server/api +COPY ["package.json","package-lock.json", "./"] +RUN npm ci +COPY . . +EXPOSE 5000 +# RUN chown -R node /usr/server/api +# USER node +CMD ["npm","start"] diff --git a/api/src/app.ts b/api/src/app.ts index 59cc320..9fc77da 100644 --- a/api/src/app.ts +++ b/api/src/app.ts @@ -13,8 +13,8 @@ dotenv.config() const app = express() -const { MODE } = process.env -if (MODE?.trim() !== 'server') { +const { MODE, CORS } = process.env +if (MODE?.trim() !== 'server' || CORS?.trim() === 'enable') { console.log('All CORS Requests are enabled') app.use(cors({ credentials: true, origin: 'http://localhost:3000' })) } @@ -27,6 +27,10 @@ app.use('/', webRouter) app.use('/SASjsApi', apiRouter) app.use(express.json({ limit: '50mb' })) -app.use(express.static(getWebBuildFolderPath())) +try { + app.use(express.static(getWebBuildFolderPath())) +} catch (err) { + console.error('Unable to get web build') +} export default connectDB().then(() => app) diff --git a/api/src/routes/web/web.ts b/api/src/routes/web/web.ts index d95f067..59792c2 100644 --- a/api/src/routes/web/web.ts +++ b/api/src/routes/web/web.ts @@ -1,22 +1,29 @@ -import { readFile } from '@sasjs/utils' +import { fileExists, readFile } from '@sasjs/utils' import express from 'express' import path from 'path' import { getWebBuildFolderPath } from '../../utils' const webRouter = express.Router() +const codeToInject = ` +` + webRouter.get('/', async (_, res) => { - const indexHtmlPath = path.join(getWebBuildFolderPath(), 'index.html') + let indexHtmlPath: string + + try { + indexHtmlPath = path.join(getWebBuildFolderPath(), 'index.html') + } catch (err) { + return res.send('Web Build is not present') + } const { MODE } = process.env if (MODE?.trim() !== 'server') { const content = await readFile(indexHtmlPath) - const codeToInject = ` - ` const injectedContent = content.replace('', `${codeToInject}`) res.setHeader('Content-Type', 'text/html') diff --git a/docker-compose.yml b/docker-compose.yml index d56ac75..4d2088c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,20 +1,26 @@ version: '3.4' services: - server: - image: server - build: - context: . - dockerfile: ./Dockerfile + sasjs_server_api: + image: sasjs_server_api + build: ./api environment: - NODE_ENV: production DB_CONNECT: mongodb://mongodb:27017/sasjs ports: - 5000:5000 volumes: - - .:/usr/src/app + - ./api:/usr/server/api links: - mongodb + + sasjs_server_web: + image: sasjs_server_web + build: ./web + ports: + - 3000:3000 + volumes: + - ./web:/usr/server/web + mongodb: image: mongo:latest ports: diff --git a/web/.dockerignore b/web/.dockerignore new file mode 100644 index 0000000..6fcffe6 --- /dev/null +++ b/web/.dockerignore @@ -0,0 +1,3 @@ +build +node_modules +Dockerfile \ No newline at end of file diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 0000000..02df291 --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,9 @@ +FROM node:lts-alpine +WORKDIR /usr/server/web +COPY ["package.json","package-lock.json", "./"] +RUN npm ci +COPY . . +EXPOSE 3000 +# RUN chown -R node /usr/server/api +# USER node +CMD ["npm","start"]