DEV Community

Zobaidul Kazi for Kazi Byte

Posted on • Edited on

To create and set up a YAML file for MongoDB and Mongoose connection on localhost, follow these steps:

To create a docker-compose.yaml file that sets up MongoDB and an email service, we can use Docker containers for MongoDB and a Node.js application that connects to MongoDB and sends emails. For the email service, we can use Nodemailer with a transport service like SendGrid or Mailgun.

Here’s how you can create the docker-compose.yaml and necessary files:

Step 1: Create the docker-compose.yaml File

Create a file named docker-compose.yaml with the following content:

version: '3.8'

services:
  mongo:
    image: mongo:latest
    container_name: mongo
    ports:
      - '27017:27017'
    volumes:
      - mongo-data:/data/db

  node-app:
    build: .
    container_name: node-app
    ports:
      - '3000:3000'
    depends_on:
      - mongo
    environment:
      - MONGO_URI=mongodb://mongo:27017/your_database_name
      - NODE_ENV=development
      - SMTP_HOST=smtp.your-email-provider.com
      - SMTP_PORT=587
      - SMTP_USER=your-email@example.com
      - SMTP_PASS=your-email-password

volumes:
  mongo-data:
Enter fullscreen mode Exit fullscreen mode

Step 2: Create the Dockerfile

Create a file named Dockerfile in the same directory with the following content to set up the Node.js application:

# Use the official Node.js image.
FROM node:14

# Create and change to the app directory.
WORKDIR /usr/src/app

# Copy application dependency manifests to the container image.
COPY package*.json ./

# Install dependencies.
RUN npm install

# Copy the local code to the container image.
COPY . .

# Run the web service on container startup.
CMD [ "node", "index.js" ]
Enter fullscreen mode Exit fullscreen mode

Step 3: Create the Node.js Application

Create a file named index.js with the following content to connect to MongoDB and send emails:

const mongoose = require('mongoose');
const nodemailer = require('nodemailer');
const express = require('express');
const bodyParser = require('body-parser');
require('dotenv').config();

// Express setup
const app = express();
app.use(bodyParser.json());

// MongoDB connection
const mongoURI = process.env.MONGO_URI;

mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log('Successfully connected to MongoDB'))
  .catch(err => console.error('Error connecting to MongoDB:', err));

// Nodemailer setup
const transporter = nodemailer.createTransport({
  host: process.env.SMTP_HOST,
  port: process.env.SMTP_PORT,
  secure: false, // true for 465, false for other ports
  auth: {
    user: process.env.SMTP_USER,
    pass: process.env.SMTP_PASS,
  },
});

// Endpoint to send email
app.post('/send-email', (req, res) => {
  const { to, subject, text } = req.body;

  const mailOptions = {
    from: process.env.SMTP_USER,
    to,
    subject,
    text,
  };

  transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
      return res.status(500).send(error.toString());
    }
    res.status(200).send('Email sent: ' + info.response);
  });
});

// Start the server
const port = 3000;
app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});
Enter fullscreen mode Exit fullscreen mode

Step 4: Create the .env File

Create a file named .env to store environment variables for your application:

MONGO_URI=mongodb://mongo:27017/your_database_name
SMTP_HOST=smtp.your-email-provider.com
SMTP_PORT=587
SMTP_USER=your-email@example.com
SMTP_PASS=your-email-password
Enter fullscreen mode Exit fullscreen mode

Step 5: Create the package.json File

Create a file named package.json to define your Node.js project and its dependencies:

{
  "name": "node-docker-app",
  "version": "1.0.0",
  "description": "Node.js app with MongoDB and Nodemailer",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "body-parser": "^1.19.0",
    "dotenv": "^16.0.0",
    "express": "^4.17.1",
    "mongoose": "^5.12.3",
    "nodemailer": "^6.6.3"
  }
}
Enter fullscreen mode Exit fullscreen mode

Step 6: Build and Run the Docker Containers

In your terminal, navigate to the directory containing the docker-compose.yaml file and run:

docker-compose up --build
Enter fullscreen mode Exit fullscreen mode

This command will build the Node.js application container, start MongoDB and the Node.js application, and set up the necessary environment variables.

Your Node.js application should now be able to connect to MongoDB and send emails using Nodemailer.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (1)

Collapse
 
kalkwst profile image
Kostas Kalafatis
Comment hidden by post author

Some comments have been hidden by the post's author - find out more