How to install mongodb on RHEL 8 / CentOS 8

MongoDB is a document database, storing data in JSON-like form, which is revolutionary approach in the contrast of traditional relational databases. This does not mean that SQL databases will die out anytime soon; they will be here for a long time when you need to store structured data.

That being said, MongoDB gets more and more use cases; the ability to store data in a form that can change on the fly are things that must be counted with.

In this tutorial we will install the latest community release of this NoSQL database to a RHEL 8 / CentOS 8, using the tarball package. For this to work smoothly we’ll set up the minimal environment, and test our configuration and running service.

In this tutorial you will learn:

  • How to download & extract MongoDB tarball
  • How to set up environment for the service
  • How to manage mongod service
  • How to login to mongo shell, insert and query sample data

Example query in mongodb.

Example query in mongodb.

Software Requirements and Conventions Used

Software Requirements and Linux Command Line Conventions
Category Requirements, Conventions or Software Version Used
System RHEL 8 / CentOS 8
Software MongoDB 4
Other Privileged access to your Linux system as root or via the sudo command.
Conventions # – requires given linux commands to be executed with root privileges either directly as a root user or by use of sudo command
$ – requires given linux commands to be executed as a regular non-privileged user

How to install mongodb on RHEL 8 / CentOS 8 step by step instructions

We need to gather an URL before the installation. For this, we need to visit the MongoDB Download Centre Community site, select the Operating system and version (Linux 64bit legacy in this case, we need the tarball). While we are provided with a download button, we also get a direct URL below, which we can use from the target machine directly.

This saves us from downloading the package trough the browser and then transfer it to the target machine, provided we do have Internet access from the target. So take note of the URL, we’ll use it shortly.



  1. We’ll store the binaries under /opt. On the target machine, we enter the directory:
    # cd /opt

    And download the tarball by providing the URL acquired earlier to wget:

    # wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.5.tgz
    --2019-01-03 16:49:59--  https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.5.tgz
    Resolving fastdl.mongodb.org (fastdl.mongodb.org)... 52.222.150.27, 52.222.150.229, 52.222.150.45, ...
    Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|52.222.150.27|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 73214518 (70M) [application/x-gzip]
    Saving to: 'mongodb-linux-x86_64-4.0.5.tgz'
    
    mongodb-linux-x86_64-4.0.5.tgz                     100%[================================================================================================================>]  69.82M  3.12MB/s    in 23s     
    
    2019-01-03 16:50:22 (3.06 MB/s) - 'mongodb-linux-x86_64-4.0.5.tgz' saved [73214518/73214518]
  2. We extract the tarball:
    # tar -zxvf mongodb-linux-x86_64-4.0.5.tgz

    And create an easier-to-remember symlink called mongodb that points to the extracted directory (the version number may differ):

    # ln -s mongodb-linux-x86_64-4.0.5 mongodb
  3. We create the user that will run the service called mongod:
    # useradd mongod
  4. We create the directory where mongodb will store it’s data:
    # mkdir -p /var/lib/mongo
  5. We set the mongod user as the owner of both the binaries and the data directory:
    # chown -R mongod:mongod /opt/mongodb*
    # chown -R mongod: /var/lib/mongo


  6. We create a basic configuration file for mongodb. We specify the data directory created, and set the database to listen only on localhost, on the default port 27017. We create the text file /etc/mongod.conf with the following content:
    storage:
      dbPath: "/var/lib/mongo"
      journal:
        enabled: true
    
    net:
      port: 27017
      bindIp: "127.0.0.1"

    Notice the dbPath parameter, that we set to the directory we created for data storage in an earlier step.

  7. For systemd to be able to manage the service, we create the text file /etc/systemd/system/mongod.service with minimal configuration:
    [Unit]
    Description=MongoDB
    After=syslog.target network.target
    
    [Service]
    Type=simple
    
    User=mongod
    Group=mongod
    
    ExecStart=/opt/mongodb/bin/mongod --config /etc/mongod.conf
    
    [Install]
    WantedBy=multi-user.target

    Note that we used the mongod user and group, used our custom path for the mongod binary, and included the configuration file we created by hand.

  8. We set selinux to permissive for now, as it would block the service accessing resources. Setting the selinux policies is out of the scope of this tutorial.
    # setenforce 0
  9. We’ll ask systemd to reload:
    systemctl daemon-reload
  10. And check if the service is recognized:
    # systemctl status mongod
      mongod.service - MongoDB
       Loaded: loaded (/etc/systemd/system/mongod.service; disabled; vendor preset: disabled)
       Active: inactive (dead)
  11. We are ready to start the service:
    # systemctl start mongod


  12. And check it’s status. If all goes well, we should see something like the following:
    # systemctl status mongod
      mongod.service - MongoDB
       Loaded: loaded (/etc/systemd/system/mongod.service; disabled; vendor preset: disabled)
       Active: active (running) since Thu 2019-01-03 17:01:48 CET; 4s ago
     Main PID: 2993 (mongod)
        Tasks: 23 (limit: 12544)
       Memory: 45.3M
       CGroup: /system.slice/mongod.service
                 2993 /opt/mongodb/bin/mongod --config /etc/mongod.conf
  13. We can test our service with mongo shell, a command line interface shipped with MongoDB. To be able to access it, we need to include the binaries we extracted in the $PATH. As lazy admins, we only do this once, the permanent way. We add the following line to /root/.bash_profile, before the last “export PATH” line:
    ## mongodb
    PATH=$PATH:/opt/mongodb/bin

    And run the script:

    # . ~/.bash_profile
  14. We start the mongo shell:
    # mongo
    MongoDB shell version v4.0.5
    connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("8999342b-e313-48e6-92c4-bf6b07cee0e4") }
    MongoDB server version: 4.0.5
    Welcome to the MongoDB shell.
    For interactive help, type "help".
    [...]
    >

    There may be some startup warnings, like huge pages settings, but we’ll ignore these in this tutorial.

  15. On the mongo shell, we’ll ask for any databases present:
    > db
    test
  16. And switch to the shipped test database:
    > use test
    switched to db test
  17. We insert some test data (key “x” with the value of “1”) into a collection created on the fly:
    > db.exampleCollection.insertOne( { x: 1 } );
    {
            "acknowledged" : true,
            "insertedId" : ObjectId("5c2e33040854f2d89326ae9c")
    }
    >
  18. And finally we query for any data in the new collection, verifying that our key-value pair is stored successfully:
    > db.getCollection("exampleCollection").find().pretty();
    { "_id" : ObjectId("5c2e4c2fd129ceef6a6c6112"), "x" : 1 }
    >