DEV Community

Cover image for Bagaimana cara menggunakan MongoDB tanpa melakukan instalasi?
Mohammad Anang
Mohammad Anang

Posted on • Edited on

Bagaimana cara menggunakan MongoDB tanpa melakukan instalasi?

Pernahkah merasa sulit dan repot saat dipaksa beradaptasi dengan integrasi baru di suatu aplikasi atau projek? Misalnya penerapan database jenis baru yang menggunakan mongodb. Mungkin kebanyakan developer pemula atau junior developer yang sering meresakannya. Penyebabnya tidak lain karena minimnya tingkat pengalaman terkait tools tersebut. Ribetnya adalah instalasi tools di lokal komputer kita, sebagai perangkat yang digunakan untuk berperang dalam proses pengerjaan aplikasi.

Dipercaya kehadiran docker di sini menjadi salah satu solusi untuk memudahkan di bagian instalasinya, baik pada tahap development maupun deployment. Cukup satu perintah saja banyak tools yang dibutuhkan dapat dilakukan instalasinya. Lebih tepatnya memaksimalkan penggunaan docker compose yang menjadi salah satu fitur penting di dalam docker.

Kesempatan kali ini akan dibahas proses melakukan containerize mongodb, dengan bonus database client tools. Sehingga memudahkan kita untuk tidak membuka atau melakukan instalasi aplikasi database client yang kompatibel untuk mongodb. Faktanya pilihan melakukan dockerize terhadap database tidak terlalu urgent. Namun menjadi penting saat aplikasi kita memerlukan banyak sekali integrasi tools. Mungkin saja keperluan dalam proses caching, message broker dan lainnya.

Persiapan awal

Agar lebih dimudahkan terkait pemahaman proses containerize mongodb dan client tools-nya, akan diberikan contoh aplikasi yang melakukan koneksi terhadap database. Dalam kasus ini aplikasi ditulis menggunakan nodejs dengan simpel proses query terhadap mongodb.

Disclaimer:
Aplikasi dan tools lain tidak termasuk ke dalam proses dockerize.

Kebutuhan library:

Berikut potongan code yang akan diimplementasikan menggunakan docker container dari mongodb:

const express = require('express');
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const Todo = require('./todo');

dotenv.config();

const app = express();

const PORT = parseInt(process.env.PORT) || 3000;
const DB_HOST = process.env.DB_HOST;
const DB_PORT = process.env.DB_PORT;
const DB_USER = process.env.DB_USER;
const DB_PASSWORD = process.env.DB_PASSWORD;
const DB_NAME = process.env.DB_NAME;
const DB_URI = `mongodb://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}`;

app.use(express.json());

app.get('/todo', async (_req, res) => {
  const allTodos = await Todo.find();
  return res.status(200).json(allTodos);
});

app.post('/todo', async (req, res) => {
  const newTodo = new Todo({ ...req.body });
  const created = await newTodo.save();
  return res.status(201).json(created);
});

const start = async () => {
  try {
    await mongoose.connect(DB_URI);
    app.listen(PORT, () => console.log('Server started on port 3000'));
  } catch (error) {
    console.error(error);
    process.exit(1);
  }
};

start();
Enter fullscreen mode Exit fullscreen mode

Projek ini membuat aplikasi todo list, menggunakan framework expressjs dan mongoose library. Hanya dibuat 2 endpoints yaitu, list data todo dan tambah data todo. Konfigurasi value yang digunakan pada database dan aplikasi disimpan di dalam file .env. Berikut susunan isi di dalam file .env:

PORT=3000

DB_NAME=domingo_db
DB_USER=domingo_user
DB_PASSWORD=domingo_pass
DB_PORT=27020
DB_HOST=localhost
Enter fullscreen mode Exit fullscreen mode

Selain digunakan di dalam aplikasi, file .env ini digunakan juga saat build & run pada docker. Khusus konfigurasi mongodb membutuhkan file javascript untuk inisialisasi database user, database password & database name. Berikut file javascript yang dibutuhkan sebagai inisialisasi mongodb:

db.createUser({
  user: 'domingo_user',        // disesuaikan dengan value di file .env => DB_USER
  pwd: 'domingo_pass',         // disesuaikan dengan value di file .env => DB_PASSWORD
  roles: [
    {
      role: 'readWrite',
      db: 'domingo_db',        // disesuaikan dengan value di file .env => DB_NAME
    },
  ],
});
Enter fullscreen mode Exit fullscreen mode

Dockerize mongodb & Client Tools

Selanjutnya membuat file docker-compose.yaml pada directory root projek. Untuk aplikasi di sini tidak disertakan proses dockerize-nya, sehingga untuk melakukan running aplikasi menggunakan perintah di nodejs. Berikut potongan code untuk melakukan dockerize:

version: '3.8'

services:
  mongodb:
    image: mongo:6.0
    container_name: mongodb-domingo
    environment:
      MONGO_INITDB_DATABASE: '${DB_NAME}'
      MONGO_INITDB_ROOT_USERNAME: '${DB_USER}'
      MONGO_INITDB_ROOT_PASSWORD: '${DB_PASSWORD}'
    volumes:
      - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
      - mongo_vol:/data/db
    ports:
      - ${DB_PORT:-27017}:27017
    networks:
      - domingo
    healthcheck:
      test: echo 'db.runCommand("ping").ok | mongo localhost:27017/test --quiet'
      interval: 1m
      timeout: 10s
      retries: 3
    restart: always

  mongo-express:
    image: mongo-express
    container_name: mongo-express-domingo
    restart: always
    environment:
      ME_CONFIG_MONGODB_SERVER: mongodb-domingo
      ME_CONFIG_MONGODB_AUTH_DATABASE: '${DB_NAME}'
      ME_CONFIG_MONGODB_AUTH_USERNAME: '${DB_USER}'
      ME_CONFIG_MONGODB_AUTH_PASSWORD: '${DB_PASSWORD}'
    ports:
      - 8081:8081
    networks:
      - domingo
    depends_on:
      - mongodb

networks:
  domingo:
    driver: bridge
volumes:
  mongo_vol:
    driver: local
Enter fullscreen mode Exit fullscreen mode

Image docker mongodb yang digunakan adalah mongo:6.0. Sedangkan Image docker mongodb client tools (mongo-express) menggunakan mongo-express. Di dalam file docker-compose.yaml sudah menggunakan env value secara otomatis, karena default-nya membaca value jika ada file .env pada direktori yang sama.

Perintah yang digunakan untuk menjalankan proses dockerize adalah docker-compose up -d. Otomatis akan melakukan download sekaligus build dan menjalankannya. Untuk mematikan running proses docker adalah docker-compose down. Disarankan untuk mempunyai pengetahuan basic terkait docker, sehingga dapat memahami dan melakukan handle terhadap proses docker.

Melakukan test menggunakan postman

Sebelum melakukan pengetesan, pastikan docker container telah dijalankan dan aplikasi todo-nya. Pastikan mongodb client tools berhasil dijalankan dengan mengaksesnya melalui browser seperti berikut:

mongo_1

mongo_2

Untuk hasil test dari get list todo di postman sebagai berikut:

mongo_3

Untuk hasil test dari tambah data todo di postman seperti berikut:

postman_1

Selanjutnya penggunaan docker bergantung berdasarkan improvisasi masing-masing sesuai kebutuhan. Untuk source code lengkapnya bisa dicek di sini. Sekian.


Credits:
Image cover by Rubaitul Azad on Unsplash.

Support me on:
saweria


my-site

Top comments (0)