// Tutorial //

How to Install MongoDB on Ubuntu 16.04

Published on May 5, 2016 · Updated on October 13, 2020
Default avatar
By Mateusz Papiernik
Developer and author at DigitalOcean.
How to Install MongoDB on Ubuntu 16.04
Not using Ubuntu 16.04?Choose a different version or distribution.

Introduction

MongoDB is a free and open-source NoSQL document database used commonly in modern web applications. This tutorial will help you set up MongoDB on your server for a production application environment.

Prerequisites

To follow this tutorial, you will need:

Step 1 — Adding the MongoDB Repository

MongoDB is already included in Ubuntu package repositories, but the official MongoDB repository provides most up-to-date version and is the recommended way of installing the software. In this step, we will add this official repository to our server.

Ubuntu ensures the authenticity of software packages by verifying that they are signed with GPG keys, so we first have to import they key for the official MongoDB repository.

  1. wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

After successfully importing the key, you will see:

Output
OK

Next, we have to add the MongoDB repository details so apt will know where to download the packages from.

Issue the following command to create a list file for MongoDB.

  1. echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

After adding the repository details, we need to update the packages list.

  1. sudo apt-get update

Step 2 — Installing and Verifying MongoDB

Now we can install the MongoDB package itself.

  1. sudo apt-get install -y mongodb-org

This command will install several packages containing latest stable version of MongoDB along with helpful management tools for the MongoDB server.

Next, start MongoDB with systemctl.

  1. sudo systemctl start mongod

You can also use systemctl to check that the service has started properly.

  1. sudo systemctl status mongod
Output
● mongodb.service - High-performance, schema-free document-oriented database
   Loaded: loaded (/etc/systemd/system/mongodb.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2016-04-25 14:57:20 EDT; 1min 30s ago
 Main PID: 4093 (mongod)
    Tasks: 16 (limit: 512)
   Memory: 47.1M
      CPU: 1.224s
   CGroup: /system.slice/mongodb.service
           └─4093 /usr/bin/mongod --quiet --config /etc/mongod.conf

The last step is to enable automatically starting MongoDB when the system starts.

  1. sudo systemctl enable mongod

The MongoDB server is now configured and running, and you can manage the MongoDB service using the systemctl command (e.g. sudo systemctl stop mongod, sudo systemctl start mongod).

Step 3 — Adjusting the Firewall (Optional)

Assuming you have followed the initial server setup tutorial instructions to enable the firewall on your server, MongoDB server will be inaccessible from the internet.

If you intend to use the MongoDB server only locally with applications running on the same server, it is a recommended and secure setting. However, if you would like to be able to connect to your MongoDB server from the internet, we have to allow the incoming connections in ufw.

To allow access to MongoDB on its default port 27017 from everywhere, you could use sudo ufw allow 27017. However, enabling internet access to MongoDB server on a default installation gives unrestricted access to the whole database server.

in most cases, MongoDB should be accessed only from certain trusted locations, such as another server hosting an application. To accomplish this task, you can allow access on MongoDB’s default port while specifying the IP address of another server that will be explicitly allowed to connect.

  1. sudo ufw allow from your_other_server_ip/32 to any port 27017

You can verify the change in firewall settings with ufw.

  1. sudo ufw status

You should see traffic to 27017 port allowed in the output.If you have decided to allow only a certain IP address to connect to MongoDB server, the IP address of the allowed location will be listed instead of Anywhere in the output.

Output
Status: active

To                         Action      From
--                         ------      ----
27017                      ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
27017 (v6)                 ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

More advanced firewall settings for restricting access to services are described in UFW Essentials: Common Firewall Rules and Commands.

Conclusion

You can find more in-depth instructions regarding MongoDB installation and configuration in these DigitalOcean community articles.


Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.

Sign up
About the authors
Default avatar
Developer and author at DigitalOcean.

Default avatar
senior technical writer

hi! i write do.co/docs now, but i used to be the senior tech editor publishing tutorials here in the community.


Still looking for an answer?

Was this helpful?
10 Comments

Perhaps i missed it, but if you want to be able to connect to this mongo instance externally, you’ll need to add your ip address (the same one you added in the ufw settings) to the mongodb configuration file (/etc/mongod.conf) like so:

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,YOUR_EXTERAL_IP

Perhaps i missed it, but if you want to be able to connect to this mongo instance externally, you’ll need to add your ip address (the same one you added in the ufw settings) to the mongodb configuration file (/etc/mongod.conf) like so:

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,YOUR_EXTERAL_IP

@mati @hazelnut The official tutorial says to create the service file at /lib/systemd/system/mongod.service (which already exists for me) whereas this tutorial says to create it at /etc/systemd/system/mongodb.service (which doesn’t exist for me). Note that besides the lib/etc difference, there’s also mongod vs mongodb. Perhaps things have changed since this tutorial was written? Just thought I’d let you know. Cheers

Edit: I just read this forum post which might be relevant:

service operates on the files in /etc/init.d and was used in conjunction with the old init system. systemctl operates on the files in /lib/systemd . If there is a file for your service in /lib/systemd it will use that first and if not it will fall back to the file in /etc/init.d

Just a minor error in the otherwise great tutorial:

“The MongoDB server now configured and running, and you can manage the MongoDB service using the systemctl command (e.g. sudo systemctl mongodb stop, sudo systemctl mongodb start).”

The mongodb stop and mongodb start should be another way around, like:

“The MongoDB server now configured and running, and you can manage the MongoDB service using the systemctl command (e.g. sudo systemctl stop mongodb, sudo systemctl start mongodb).”

Otherwise the following error is produced:

$ sudo systemctl mongodb stop
Unknown operation mongodb.

Just a minor error in the otherwise great tutorial:

“The MongoDB server now configured and running, and you can manage the MongoDB service using the systemctl command (e.g. sudo systemctl mongodb stop, sudo systemctl mongodb start).”

The mongodb stop and mongodb start should be another way around, like:

“The MongoDB server now configured and running, and you can manage the MongoDB service using the systemctl command (e.g. sudo systemctl stop mongodb, sudo systemctl start mongodb).”

Otherwise the following error is produced:

$ sudo systemctl mongodb stop
Unknown operation mongodb.

After startin mongodb I get:

Active: failed (Result: exit-code) since Die 2016-09-06 21:38:05 CEST; 22s ago Process: 20153 ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf (code=exited, status=14) Main PID: 20153 (code=exited, status=14)

Sep 06 21:38:05 machina8 systemd[1]: Started High-performance, schema-free document-oriented database. Sep 06 21:38:05 machina8 systemd[1]: mongodb.service: Main process exited, code=exited, status=14/n/a Sep 06 21:38:05 machina8 systemd[1]: mongodb.service: Unit entered failed state. Sep 06 21:38:05 machina8 systemd[1]: mongodb.service: Failed with result ‘exit-code’.

After startin mongodb I get:

Active: failed (Result: exit-code) since Die 2016-09-06 21:38:05 CEST; 22s ago Process: 20153 ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf (code=exited, status=14) Main PID: 20153 (code=exited, status=14)

Sep 06 21:38:05 machina8 systemd[1]: Started High-performance, schema-free document-oriented database. Sep 06 21:38:05 machina8 systemd[1]: mongodb.service: Main process exited, code=exited, status=14/n/a Sep 06 21:38:05 machina8 systemd[1]: mongodb.service: Unit entered failed state. Sep 06 21:38:05 machina8 systemd[1]: mongodb.service: Failed with result ‘exit-code’.

After startin mongodb I get:

Active: failed (Result: exit-code) since Die 2016-09-06 21:38:05 CEST; 22s ago Process: 20153 ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf (code=exited, status=14) Main PID: 20153 (code=exited, status=14)

Sep 06 21:38:05 machina8 systemd[1]: Started High-performance, schema-free document-oriented database. Sep 06 21:38:05 machina8 systemd[1]: mongodb.service: Main process exited, code=exited, status=14/n/a Sep 06 21:38:05 machina8 systemd[1]: mongodb.service: Unit entered failed state. Sep 06 21:38:05 machina8 systemd[1]: mongodb.service: Failed with result ‘exit-code’.

There is an error above;

ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf

should be

ExecStart=/usr/bin/mongod --quiet --config /etc/mongodb.conf

In my case I get this error.

sudo systemctl status mongodb
● mongodb.service - High-performance, schema-free document-oriented database
   Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2016-05-27 12:38:13 EDT; 4s ago
  Process: 6729 ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf (code=exited, status=100)
 Main PID: 6729 (code=exited, status=100)

May 27 12:38:13 ubuntu systemd[1]: Started High-performance, schema-free document-oriented database.
May 27 12:38:13 ubuntu systemd[1]: mongodb.service: Main process exited, code=exited, status=100/n/a
May 27 12:38:13 ubuntu systemd[1]: mongodb.service: Unit entered failed state.
May 27 12:38:13 ubuntu systemd[1]: mongodb.service: Failed with result 'exit-code'.