How To Install MongoDB 6 on Debian 11 / Debian 10

Posted on 152 views

NoSQL database is a database type where information is stored in JSON documents as opposed to rows and columns used in Relational databases. This technology was implemented in the 1970s when data storage was extremely expensive. In SQL databases, data is organized in rows and columns which make them extremely inflexible and difficult to modify. In NoSQL databases, developers are not tied to the rigid tabular approach and therefore are able to enjoy flexible schemas and scale easily with large amounts of data and high user loads.

The most popular NoSQL databases are Apache Cassandra, ElasticSearch, Amazon DynamoDB, HBase, Couchbase, Redis, MongoDB e.t.c

MongoDB is a cross-platform, object-oriented NoSQL database developed by MongoDB Inc. licensed under the Server Side Public License. It is implemented in C++ language and supports both 32 and 64-bit systems. MongoDB is highly used in applications that require enormous scalability and flexibility.

MongoDB provides high availability through a replica set. This is typically a group of mongod services that have the same data set. They provide high availability which is basic for all production deployments. In MongoDB replication, there are data-bearing nodes and optionally one arbiter node. In the data-bearing nodes group, only one is considered the Primary node and the others the secondary nodes. The primary node mainly receives all the write operations from the application. The secondary nodes replicate the primary node’s operation logs. The secondary nodes replicate data sets from the primary node.

The image below can be used to understand the architecture:

MongoDB-6-on-Debian-11

MongoDB is highly used in the following areas:

  • Inventory and catalog management – NoSQL databases provide high availability and predictable, cost-effective, horizontal scalability. This makes MongoDB effective in e-commerce companies that have massive and rowing online catalogs.
  • E-commerce product catalog – organizations are able to build applications with improved customer satisfaction by providing a single view of the customer by aggregating customer and product information
  • Mobile and social networking sites – MongoDB is able to handle;e large volumes of data extremely fast.
  • Real-time analytics and high-speed logging – It is used in customer analytics, real-time data integration that requires large volumes of high-speed data logging and aggregation
  • Fraud detection and identity authentication – MongoDB is used to provide real-time analysis of a large volume to identify any abnormality
  • Financial services and payments
  • Content management systems

Features of MongoDB 6.0

The latest release MongoDB 6.0 offers a lot of features that include:

  • Improved support for event-driven architectures – MongoDB 6.0 enriches change streams, adding abilities that take change streams to the next level.
  • More operators, less work – The operators allow enable you to push more work to the database while spending less time writing code.
  • Deeper insights from enriched queries – users are able to process multiple documents and return computed results. This can help build complex data processing pipelines to extract the insights you need.
  • Data security and operational efficiency – It allows users to compress and encrypt audit events before being written to the disk, leveraging their own KMIP-compliant key management system. The log encryption protects event integrity and confidentiality.
  • Seamless data sync – The Cluster-to-Cluster Sync provides an easy way to migrate data to the cloud, with continuous, unidirectional data synchronization between two MongoDB clusters
  • More resilient operations – MongoDB’s replica set design allows users to withstand and overcome outages. MongoDB 6.0 introduces improvements to sharding, the mechanism that enables horizontal scalability.

This guide provides the required steps on how to install MongoDB 6 on Debian 11 / Debian 10

System Requirements

To enable to install and run MongoDB, you need the following CPU architectures:

  • For x86_64 microarchitecture:
    • Intel x86_64 of a Sandy Bridge or later Core processor or a Tiger Lake or later Celeron or Pentium processor
    • AMD x86_64 of a Bulldozer or later processor.
  • ARM64 microarchitecture
    • ARMv8.2-A or later microarchitecture

Check the architecture using the command:

$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 94
model name	: Intel(R) Xeon(R) CPU E3-1275 v5 @ 3.60GHz
stepping	: 3
microcode	: 0xf0
cpu MHz		: 3600.056
cache size	: 16384 KB
.....

#1. Add MongoDB 6.0 Repository

MongoDB offers two major editions:

  • Community edition: a free edition
  • Enterprise edition: provided as part of the Mongo Enterprise Advanced subscription. It offers advanced features such as on-disk encryption, Kerberos and LDAP support, auditing e.t.c.

In this guide, we will install the Community Edition, but since it is not provided in the default repositories, we need to add the repositories to the system.

Install the required tools:

sudo apt install wget curl gnupg software-properties-common apt-transport-https ca-certificates lsb-release

First, import the GPG key

curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mongodb-6.gpg

Now add the MongoDB 6.0 repository to the system.

##On Debian 11
echo "deb http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

##On Debian 10
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Once added, update the APT package index:

sudo apt update

#2. Install MongoDB 6.0 on Debian 11 / Debian 10

Once the repository has been added, MongoDB 6.0 can be installed with the command:

sudo apt install mongodb-org

Dependency Tree:

The following additional packages will be installed:
  mongodb-database-tools mongodb-mongosh mongodb-org-database
  mongodb-org-database-tools-extra mongodb-org-mongos
  mongodb-org-server mongodb-org-shell mongodb-org-tools
The following NEW packages will be installed:
  mongodb-database-tools mongodb-mongosh mongodb-org
  mongodb-org-database mongodb-org-database-tools-extra
  mongodb-org-mongos mongodb-org-server mongodb-org-shell
  mongodb-org-tools
0 upgraded, 9 newly installed, 0 to remove and 39 not upgraded.
Need to get 134 MB of archives.
After this operation, 458 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

You can also install a specific version for each component:

sudo apt-get install -y mongodb-org= mongodb-org-database=  mongodb-org-server=  mongodb-org-shell=  mongodb-org-mongos=  mongodb-org-tools=

Once the installation is complete, start and enable the service:

sudo systemctl enable --now mongod

Verify that the service is running:

$ systemctl status mongod
 mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-07-28 16:04:35 EDT; 50s ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 537 (mongod)
     Memory: 140.8M
        CPU: 822ms
     CGroup: /system.slice/mongod.service
             └─537 /usr/bin/mongod --config /etc/mongod.conf

Check the available version of MongoDB:

$ mongod --version
db version v6.0.0
Build Info: 
    "version": "6.0.0",
    "gitVersion": "e61bf27c2f6a83fed36e5a13c008a32d563babe2",
    "openSSLVersion": "OpenSSL 1.1.1n  15 Mar 2022",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": 
        "distmod": "debian11",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    

#3. Configure MongoDB 6.0 on Debian 11 / Debian 10

MongoDB stores its config file at /etc/mongod.conf. There are many configurations you can make in the file such as database path, logs path, listening port, address e.t.c. In this guide, we will make the below configs:

Enable Password Authentication

When installed, MongoDB does not offer password protection to the database. This can pose a security threat since anyone can access and use the database. To secure the instance, you need to create a user and set a password:

Access the shell:

mongosh

Create the admin user:

use admin
db.createUser(

user: "mongouser",
pwd: passwordPrompt(), // or cleartext password
roles: [  role: "userAdminAnyDatabase", db: "admin" , "readWriteAnyDatabase" ]

)

You will be required to provide a password for the user. Once set, exit the shell and enable authentication in the config file:

sudo vim /etc/mongod.conf

Find and uncomment the security part and add the line as shown.

security:
    authorization: "enabled"

Enable Remote Access

MongoDB listens on localhost by default, to change this and enable it to listen on the IP address, edit the config as shown:

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

Once the desired changes have been made, save the file and restart the service:

sudo systemctl restart mongod

If you have a firewall enabled, allow the port through it:

sudo ufw allow 27017

#4. Using MongoDB 6.0 on Debian 11 / Debian 10

Now access the MongoDB shell using the admin user and password created earlier.

$ mongosh -u mongouser
Enter password: *********
Connecting to:		mongodb://@127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.5.3
Using MongoDB:		6.0.0
Using Mongosh:		1.5.3

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

test>

Create a Database MongoDB

First, list the available databases:

> show dbs
admin   132.00 KiB
config   12.00 KiB
local    72.00 KiB

To create a database in MongoDB, just switch to a non-existing database. For example:

> use sampledb
switched to db sampledb

Create a collection in MongoDB

Collections are equivalent to tables in SQL databases. To create a table in MongoDB, use a command with the below syntax:

db.userdetails.insertOne(
   F_Name: "Computing",
    L_NAME: "ForGeeks",
    ID_NO: "124345",
     AGE: "49",
     TEL: "25465467187"
   
)

Once created, list the available collections:

> show collections
userdetails

Create an overall admin

An overall admin has the ability to access and use any database. For example, the user created earlier was an overall admin. To create another admin user, use the command:

use admin
db.createUser(
  
    user: 'admin',
    pwd: 'AdminPassW0rd',
    roles: [  role: 'userAdminAnyDatabase', db: 'admin'  ]
  
);

Create an admin for a specific database

You can create an admin user for a specific database. For example:

use testdatabase
db.createUser(
  
    user: 'testadmin',
    pwd: 'TestPassW0rd',
    roles: [  role: 'userAdmin', db: 'testdatabase'  ]
  
);

Create a User with Read and Write privileges

It is also possible to create a user with read and write permissions to a specific database. For example:

use testdatabase
db.createUser(
   
     user: 'testuser',
     pwd: 'TestPassW0rd',
     roles: [  role: 'readWrite', db: 'testdatabase'  ]
   
 );

List Users on MongoDB

To list the available users, query the system.users collection.

use admin
db.system.users.find()

Sample Output:

MongoDB-6-on-Debian

Exit the shell using the command:

> exit

#5. Using a Custom Data Path in MongoDB

Normally, MongoDB stores its data in /var/lib/mongodb. However, this can be changed to another preferred data path. To achieve this, begin by stopping the service:

sudo systemctl stop mongod.service

Create the custom data path with the correct permissions:

sudo mkdir -p /data/mongo
sudo chown -R mongodb:mongodb /data/mongo

Proceed and copy the contents of the old directory to this new path:

sudo cp -r /var/lib/mongodb/* /data/mongo

You can move the old directory to a backup file:

sudo mv /var/lib/mongodb /var/lib/mongodb.bak

Now edit the config file to accommodate the new path:

sudo vim /etc/mongod.conf

Make the below changes:

# Where and how to store data.
storage:
  dbPath: /data/mongo
.......

Save the file, reload the daemon and start the service:

sudo systemctl daemon-reload
sudo systemctl start mongod

Verify if the service is running:

$ systemctl status mongod
● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-07-28 16:36:02 EDT; 3s ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 2020 (mongod)
     Memory: 164.3M
        CPU: 737ms
     CGroup: /system.slice/mongod.service
             └─2020 /usr/bin/mongod --config /etc/mongod.conf

Voila!

Conclusion

In this guide, we have installed MongoDB 6 on Debian 11 / Debian 10. In addition to that, we have learned how to configure MongoDB, and create users, databases, and collections.

coffee

Gravatar Image
A systems engineer with excellent skills in systems administration, cloud computing, systems deployment, virtualization, containers, and a certified ethical hacker.