From 232c69bdde503a5a643c84f8220197595b890c06 Mon Sep 17 00:00:00 2001 From: Samuel ORTION Date: Mon, 29 Aug 2022 08:21:53 +0200 Subject: [PATCH] docker: Add docker support for express and redis services --- .dockerignore | 4 ++++ app.js | 10 ++-------- controllers/cache.js | 10 +++++++--- data/.gitkeep | 0 docker-compose.yml | 28 ++++++++++++++++++++++++++++ docker/express/Dockerfile | 13 +++++++++++++ locales/fr.js | 2 +- 7 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 .dockerignore delete mode 100644 data/.gitkeep create mode 100644 docker-compose.yml create mode 100644 docker/express/Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0dd8caf --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +node_modules +.git +.gitignore +docker \ No newline at end of file diff --git a/app.js b/app.js index 1b5ccb7..a4d4cab 100644 --- a/app.js +++ b/app.js @@ -7,13 +7,6 @@ const path = require('path'); const cookieParser = require('cookie-parser'); const logger = require('morgan'); const i18n = require('i18n-2'); -const redis = require('redis'); - -const [redisHost, redisPort] = [process.env.REDIS_HOST, process.env.REDIS_PORT]; -const redisClient = redis.createClient(redisPort, redisHost); -redisClient.on('error', (error) => { - console.error('Redis error:', error); -}); const indexRouter = require('./routes/index'); const apiRouter = require('./routes/api'); @@ -34,7 +27,8 @@ app.use(express.static(path.join(__dirname, 'public'))); const sess = { secret: 'keyboard cat', resave: true, - saveUninitialized: true + saveUninitialized: true, + cookie: { secure: false } } if (app.get('env') === 'production') { diff --git a/controllers/cache.js b/controllers/cache.js index e9f1357..58f8580 100644 --- a/controllers/cache.js +++ b/controllers/cache.js @@ -1,12 +1,16 @@ require('dotenv').config(); const debug = require('debug')('soundbirder:cache'); const redis = require('redis'); -[redisHost, redisPort] = [process.env.REDIS_HOST, process.env.REDIS_PORT]; -const redisClient = redis.createClient(redisPort, redisHost); +const host = process.env.REDIS_HOST ? process.env.REDIS_HOST : 'localhost'; +const port = process.env.REDIS_PORT ? process.env.REDIS_PORT : 6379; +const url = `redis://${host}:${port}`; +const redisClient = redis.createClient({ + url +}); (async () => { redisClient.connect(); -})(); +})();0 function cacheResponse(request, response) { debug("Caching response", request); diff --git a/data/.gitkeep b/data/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a752226 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3.9' + +services: + express: + container_name: soundbirder_express + build: + context: . + dockerfile: ./docker/express/Dockerfile + environment: + - NODE_ENV=production + - REDIS_HOST=${REDIS_HOST:-soundbirder_redis} + - REDIS_PORT=${REDIS_PORT:-6379} + ports: + - "${EXPRESS_PORT:-3000}:3000" + networks: + - soundbirder_network + depends_on: + - redis + + redis: + container_name: soundbirder_redis + image: redis + networks: + - soundbirder_network + +networks: + soundbirder_network: + driver: bridge \ No newline at end of file diff --git a/docker/express/Dockerfile b/docker/express/Dockerfile new file mode 100644 index 0000000..0246193 --- /dev/null +++ b/docker/express/Dockerfile @@ -0,0 +1,13 @@ +FROM node:16.17.0 + +WORKDIR /usr/src/app + +COPY package*.json . + +RUN npm install +RUN npm ci --only=production + +COPY . . + +EXPOSE 3000 +CMD [ "./bin/www" ] \ No newline at end of file diff --git a/locales/fr.js b/locales/fr.js index 94d518e..16f1ae4 100644 --- a/locales/fr.js +++ b/locales/fr.js @@ -2,7 +2,7 @@ "Game": "Jeu", "About": "À propos", "Contact": "Contact", - "SoundBirder is an open-source web application to learn bird song identification. It is based on bird records from Xeno-Canto and data from eBird": "SoundBirder est une application web open-source qui permet d'apprendre à reconnaitre les chants d'oiseaux. Elle se base sur les enregistrements audio de Xeno-Canto est sur les données de répartitions d'eBird", + "SoundBirder is an open-source web application to learn bird song identification. It is based on bird records from Xeno-Canto and data from eBird": "SoundBirder est une application web open-source qui permet d'apprendre à reconnaitre les chants d'oiseaux. Elle se base sur des enregistrements audios de Xeno-Canto et sur les données de répartitions d'eBird", "Author": "Auteur", "The project is made with ♥ by Samuel ORTION": "Ce projet est fait avec ♥ par Samuel ORTION" } \ No newline at end of file