root
)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.
systemd
init system which is enabled by default on Ubuntu 16.04. Running MongoDB using those packages on a clean Ubuntu 16.04 server involves following an additional step to configure MongoDB as a systemd
service that will automatically start on boot.To follow this tutorial, you will need:
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.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
After successfully importing the key, you will see:
Output
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
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 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.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. This command will install several packages containing latest stable version of MongoDB along with helpful management tools for the MongoDB server.
sudo apt-get install -y mongodb-org
systemd
how to manage a resource. The most common unit type is a service, which determines how to start or stop the service, when should it be automatically started at boot, and whether it is dependent on other software to run.We’ll create a unit file to manage the MongoDB service.
Create a configuration file named mongodb.service
in the /etc/systemd/system
directory using nano or your favorite text editor.
sudo nano /etc/systemd/system/mongodb.service
Paste in the following contents, then save and close the file.
/etc/systemd/system/mongodb.service
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
systemd
when the service should be automatically started. The multi-user.target is a standard system startup sequence, which means the server will be automatically started during boot.Next, start the newly created service with systemctl
.
sudo systemctl start mongodb
While there is no output to this command, you can also use systemctl
to check that the service has started properly.
sudo systemctl status mongodb
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.
sudo systemctl enable mongodb
systemctl
command (e.g. sudo systemctl mongodb stop
, sudo systemctl mongodb start
).ufw
.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.
Output
Status: active
To Action From
-- ------ ----
27017 ALLOW Anywhere
OpenSSH ALLOW Anywhere
27017 (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
These step-by-step instructions are taken from various tutorials on digitalocean.com, phusionpassenger.com, and other sites. Some sources have been linked. Most step descriptions have been shortened and simplified. Some step sequences are from one source while other may come from various sources.
These instructions and commands are placed on GitHub so I can conveniently find them. I am a novice with Ubuntu, Nginx, Passenger, command line, etc., so I probably can’t answer any questions. However, I’ll be glad to incorporate any corrections that are needed.
Use instructions and commands at your own risk.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.