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.
To follow this tutorial, you will need:
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.
- wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
After successfully importing the key, you will see:
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.
- 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.
- sudo apt-get update
Now we can install the MongoDB package itself.
- 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
.
- sudo systemctl start mongod
You can also use systemctl
to check that the service has started properly.
- sudo systemctl status mongod
● 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.
- 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
).
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.
- sudo ufw allow from your_other_server_ip/32 to any port 27017
You can verify the change in firewall settings with ufw
.
- 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.
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.
You can find more in-depth instructions regarding MongoDB installation and configuration in these DigitalOcean community articles.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
I get an error message that says:
when I run:
If I just run:
it works
When I try to enable for system start with
I get
Help is much appreciated. Ben
when i try add content to /etc/systemd/system/mongodb.service, it said “/etc/systemd/system/mongodb.service” is not a normal file ", and i cannot add content. Help me :(
In my case I get this error.
Hi, How to set different path to dbdata and log file? I try set path to /home/user/folder and my server return fail.
Paul
they already have repo for xenial here
We encountered a lot of issues related to the systemd configuration on a busy mongod - and improved a bit on it which can be found here: https://gist.github.com/hofmeister/a4706604c3b899eb0288f0442be5f6c4
Most important part is the TasksAccounting=false since that’ll default to true and limit the mongod service to 512 threads / sub processes
The errors we were seeing was :
NETWORK [initandlisten] pthread_create failed: errno:11 Resource temporarily unavailable
What was messing me up is that some docs refer to
mongod.service
and this one usesmongodb.service
. Is the name up to the user? Can we call it anything we want, as long as it’s unique?I tried this tutorial, getting ACTIVE as failed
mongodb.service - High-performance, schema-free document-oriented database Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset: Active: failed (running) since Fri 2016-05-13 10:33:52 IST; 1min 48s ago Main PID: 7078 (mongod) Tasks: 16 (limit: 512) CGroup: /system.slice/mongodb.service └─7078 /usr/bin/mongod --quiet --config /etc/mongod.conf
May 13 10:33:52 linux systemd[1]: Started High-performance, schema-free document lines 1-9/9 (END)
If using a volume to store data, what or where do I specify the storage path?