diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..bac6d50 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +node_modules +npm-debug.log +Dockerfile +.dockerignore diff --git a/.gitignore b/.gitignore index 798071f..7d9c922 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ dump.tar.gz dump/ coverage *.orig +.idea +.idea/* +*.iml diff --git a/001_users.js b/001_users.js new file mode 100644 index 0000000..42d1dc8 --- /dev/null +++ b/001_users.js @@ -0,0 +1,8 @@ +db.createUser({ + "user": "smack_chat", + "pwd": "smack123", + "roles": [{ + "role": "readWrite", + "db": "smack_chat" + }] +}) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..20c2497 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM node:10-alpine +WORKDIR /usr/app +COPY package.json ./ +RUN npm install +COPY --chown=node:node . . +EXPOSE 3030 +CMD [ "npm", "start" ] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..49283b4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3.8' + +services: + mongodb: + image: mongo + command: --serviceExecutor adaptive + ports: + - "27017:27017" + environment: + MONGO_INITDB_ROOT_USERNAME: admin + MONGO_INITDB_ROOT_PASSWORD: admin123 + MONGO_INITDB_DATABASE: smack_chat + volumes: + - ./001_users.js:/docker-entrypoint-initdb.d/001_users.js:ro + mac-chat-api: + build: . + depends_on: + - mongodb + ports: + - "3005:3005" + environment: + PORT: 3005 + MONGODB_URI: "mongodb://smack_chat:smack123@mongodb:27017/smack_chat" diff --git a/src/db.js b/src/db.js index 3207a80..83b1c4d 100644 --- a/src/db.js +++ b/src/db.js @@ -1,19 +1,34 @@ import mongoose from 'mongoose'; -import mongodb from 'mongodb'; import config from './config'; export default callback => { let db; + let retryCount = 0; + + let connectWithRetry = function() { + return mongoose.connect(config.mongoUrl, function (err, database) { + console.log("Trying to connect to mongodb...") + if (err) { + console.log("Waiting for 5 seconds to retry...") + if (retryCount < 4) { + setTimeout(connectWithRetry, 5000) + retryCount++ + return + } + + console.log(err); + console.log("Giving up after 5 attempts...") + proccess.exit(-1) + } + + console.log(config.mongoUrl); + // Save database object from the callback for reuse. + db = database; + console.log("Database connection ready"); + callback(db); + }); + } // Connect to the database before starting the application server. - mongoose.connect(config.mongoUrl, function (err, database) { - if (err) { - console.log(err); - process.exit(1); - } - console.log(config.mongoUrl); - // Save database object from the callback for reuse. - db = database; - console.log("Database connection ready"); - callback(db); - }); + + connectWithRetry() }