├── .gitignore ├── .dockerignore ├── nginxdockerfile ├── README.md ├── nodejsdockerfile ├── default.conf ├── models └── Item.js ├── package.json ├── views └── index.ejs ├── docker-compose.yml └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log -------------------------------------------------------------------------------- /nginxdockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM nginx 3 | COPY ./default.conf /etc/nginx/conf.d/ 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nodeJs-MongoDB-Nginx-Docker-Tutorial 2 | 3 | Nodejs Mongodb App Credit: https://github.com/bradtraversy/docker-node-mongo 4 | -------------------------------------------------------------------------------- /nodejsdockerfile: -------------------------------------------------------------------------------- 1 | FROM node:14 2 | WORKDIR /usr/src/app 3 | COPY ./package*.json /usr/src/app/ 4 | RUN npm install 5 | COPY ./ /usr/src/app/ 6 | EXPOSE 3000 7 | CMD [ "node", "index.js" ] 8 | -------------------------------------------------------------------------------- /default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | location / { 3 | proxy_set_header Host $host; 4 | proxy_set_header X-Real-IP $remote_addr; 5 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 6 | proxy_set_header X-Forwarded-Proto $scheme; 7 | proxy_pass http://nodejsserver:3000; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /models/Item.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | 4 | const ItemSchema = new Schema({ 5 | name: { 6 | type: String, 7 | required: true 8 | }, 9 | date: { 10 | type: Date, 11 | default: Date.now 12 | } 13 | }); 14 | 15 | module.exports = Item = mongoose.model('item', ItemSchema); 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docker-node-mongo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "ejs": "^2.6.1", 14 | "express": "^4.16.3", 15 | "mongoose": "^5.2.7" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | My Node App 9 | 10 | 11 | 12 |

My Node App

13 |
14 | 15 | 16 | 17 |
18 |

Items:

19 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | nodejs-app: 5 | build: 6 | context: ./nodedocker_app 7 | container_name: nodejsserver 8 | hostname: nodejsserver 9 | ports: 10 | - "3000:3000" 11 | networks: 12 | - example-net 13 | 14 | depends_on: 15 | - mongo 16 | mongo: 17 | container_name: mongo 18 | image: mongo 19 | volumes: 20 | - ./data:/data/db 21 | ports: 22 | - "27017:27017" 23 | networks: 24 | - example-net 25 | nginx: 26 | build: 27 | context: ./nginx 28 | container_name: nginx 29 | hostname: nginx 30 | ports: 31 | - "80:80" 32 | depends_on: 33 | - nodejs-app 34 | networks: 35 | - example-net 36 | 37 | networks: 38 | example-net: 39 | external: true 40 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const mongoose = require('mongoose'); 3 | 4 | const app = express(); 5 | 6 | app.set('view engine', 'ejs'); 7 | 8 | app.use(express.urlencoded({ extended: false })); 9 | 10 | // Connect to MongoDB 11 | mongoose 12 | .connect( 13 | 'mongodb://mongo:27017/docker-node-mongo', 14 | { useNewUrlParser: true } 15 | ) 16 | .then(() => console.log('MongoDB Connected')) 17 | .catch(err => console.log(err)); 18 | 19 | const Item = require('./models/Item'); 20 | 21 | app.get('/', (req, res) => { 22 | Item.find() 23 | .then(items => res.render('index', { items })) 24 | .catch(err => res.status(404).json({ msg: 'No items found' })); 25 | }); 26 | 27 | app.post('/item/add', (req, res) => { 28 | const newItem = new Item({ 29 | name: req.body.name 30 | }); 31 | 32 | newItem.save().then(item => res.redirect('/')); 33 | }); 34 | 35 | const port = 3000; 36 | 37 | app.listen(port, () => console.log('Server running...')); 38 | --------------------------------------------------------------------------------