From 1b24d610911db6fd7f00465ee0affcaf4af4285a Mon Sep 17 00:00:00 2001 From: AlecM33 Date: Mon, 4 Mar 2024 20:39:11 -0500 Subject: [PATCH] add second web server, work around docker compose bug --- .env | 3 +++ Dockerfile.dev | 4 ++-- README.md | 8 ++++++++ compose.yaml | 7 ++++++- package.json | 12 ++++++------ server/modules/ServerBootstrapper.js | 2 +- server/modules/singletons/EventManager.js | 4 +--- 7 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..d6e1c73 --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +CONTAINER_PORT_1=5000 +CONTAINER_PORT_2=5001 +WEB_PORT=5000 diff --git a/Dockerfile.dev b/Dockerfile.dev index 2a1b29e..cecb074 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -9,7 +9,7 @@ RUN npm install COPY . ./ ENV NODE_ENV development -ENV REDIS_HOST redis -ENV REDIS_PORT 6379 +ENV REDIS_URL_DEV "redis://redis:6379" +ENV WEB_PORT 5000 CMD [ "npm", "run", "start:dev:docker" ] diff --git a/README.md b/README.md index 1c23d44..74a8297 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,14 @@ Instances of this app are part of a stateless architecture that scales up and do ### Running Locally +#### Using Docker + +If you have Docker Desktop installed, running `docker compose up` will spin up, by default, two +web servers and one redis server for them to connect to. The app can then be accessed at `localhost:5000` +or `localhost:5001`. Otherwise, read below for setup that does not use Docker. + +#### Without Docker + The entrypoint for the application is `index.js` at the root. Before starting the Node.js server, you'll need a Redis server running locally on the default port. This is what's used diff --git a/compose.yaml b/compose.yaml index e29e72c..c42da51 100644 --- a/compose.yaml +++ b/compose.yaml @@ -7,4 +7,9 @@ services: build: dockerfile: Dockerfile.dev ports: - - "5000:5000" + - "${CONTAINER_PORT_1}:${WEB_PORT}" + web-2: + build: + dockerfile: Dockerfile.dev + ports: + - "${CONTAINER_PORT_2}:${WEB_PORT}" diff --git a/package.json b/package.json index f913515..72f0fa5 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,12 @@ "bundle": "webpack --config client/webpack/webpack-prod.config.js", "gcp-build": "webpack --config client/webpack/webpack-prod.config.js", "build:dev": "webpack --watch --config client/webpack/webpack-dev.config.js --mode=development", - "start:dev:docker": "webpack --config client/webpack/webpack-dev.config.js --mode=development && node index.js", - "start:dev": "REDIS_HOST=localhost REDIS_PORT=6379 NODE_ENV=development && webpack --config client/webpack/webpack-dev.config.js --mode=development && nodemon index.js", - "start:dev:no-hot-reload": "REDIS_HOST=localhost REDIS_PORT=6379 NODE_ENV=development && webpack --config client/webpack/webpack-dev.config.js --mode=development && node index.js", - "start:dev:windows": "SET NODE_ENV=development REDIS_HOST=localhost REDIS_PORT=6379 && webpack --config client/webpack/webpack-dev.config.js --mode=development && nodemon index.js -- loglevel=debug", - "start:dev:windows:no-hot-reload:debug": "SET NODE_ENV=development REDIS_HOST=localhost REDIS_PORT=6379 && webpack --config client/webpack/webpack-dev.config.js --mode=development && node --inspect index.js", - "start:dev:windows:no-hot-reload": "SET NODE_ENV=development REDIS_HOST=localhost REDIS_PORT=6379 && webpack --config client/webpack/webpack-dev.config.js --mode=development && node index.js", + "start:dev:docker": "webpack --config client/webpack/webpack-dev.config.js --mode=development && node index.js -- loglevel=debug", + "start:dev": "NODE_ENV=development REDIS_URL_DEV=redis://127.0.0.1:6379 && webpack --config client/webpack/webpack-dev.config.js --mode=development && nodemon index.js", + "start:dev:no-hot-reload": "NODE_ENV=development REDIS_URL_DEV=redis://127.0.0.1:6379 && webpack --config client/webpack/webpack-dev.config.js --mode=development && node index.js", + "start:dev:windows": "SET NODE_ENV=development & SET REDIS_URL_DEV=redis://127.0.0.1:6379 && webpack --config client/webpack/webpack-dev.config.js --mode=development && nodemon index.js -- loglevel=debug", + "start:dev:windows:no-hot-reload:debug": "SET NODE_ENV=development & SET REDIS_URL_DEV=redis://127.0.0.1:6379 && webpack --config client/webpack/webpack-dev.config.js --mode=development && node --inspect index.js", + "start:dev:windows:no-hot-reload": "SET NODE_ENV=development & SET REDIS_URL_DEV=redis://127.0.0.1:6379 && webpack --config client/webpack/webpack-dev.config.js --mode=development && node index.js", "start": "NODE_ENV=production node index.js -- loglevel=debug", "start:windows": "SET NODE_ENV=production && node index.js -- loglevel=debug port=8080", "test": "jasmine && karma start --single-run --browsers ChromeHeadless karma.conf.js", diff --git a/server/modules/ServerBootstrapper.js b/server/modules/ServerBootstrapper.js index 1f7fe21..ecf6874 100644 --- a/server/modules/ServerBootstrapper.js +++ b/server/modules/ServerBootstrapper.js @@ -35,7 +35,7 @@ const ServerBootstrapper = { try { const args = Array.from(process.argv.map((arg) => arg.trim().toLowerCase())); const useHttps = args.includes('protocol=https'); - const port = process.env.PORT || args + const port = process.env.WEB_PORT || args .filter((arg) => { return /port=\d+/.test(arg); }) diff --git a/server/modules/singletons/EventManager.js b/server/modules/singletons/EventManager.js index 9a25258..933d69e 100644 --- a/server/modules/singletons/EventManager.js +++ b/server/modules/singletons/EventManager.js @@ -26,9 +26,7 @@ class EventManager { createRedisPublisher = async () => { this.publisher = process.env.NODE_ENV.trim() === 'development' ? redis.createClient({ - socket: { - host: process.env.REDIS_HOST, port: process.env.REDIS_PORT - } + url: process.env.REDIS_URL_DEV }) : redis.createClient({ url: process.env.REDIS_URL