How to Install MongoDB 4 on Ubuntu 18.04
Installing MongoDB on Ubuntu 18.04.
sudo apt update
Install MongoDB package
Output:
root@vps:~# sudo apt install mongodb
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libboost-filesystem1.65.1 libboost-iostreams1.65.1
libboost-program-options1.65.1 libboost-system1.65.1 libgoogle-perftools4
libpcrecpp0v5 libsnappy1v5 libstemmer0d libtcmalloc-minimal4
libyaml-cpp0.5v5 mongo-tools mongodb-clients mongodb-server
mongodb-server-core
The following NEW packages will be installed:
libboost-filesystem1.65.1 libboost-iostreams1.65.1
Managing the MongoDB Service.
To start a MongoDB service.
sudo systemctl start mongodb
To enable MongoDB service.
sudo systemctl enable mongodb
You can verify its status using the systemctl command.
sudo systemctl status mongodb
Output:
root@vps:~# sudo systemctl status mongodb
● mongodb.service - An object/document-oriented database
Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset:
Active: active (running) since Thu 2020-03-19 14:28:08 CET; 2min 45s ago
Docs: man:mongod(1)
Main PID: 12970 (mongod)
Tasks: 23 (limit: 1113)
CGroup: /system.slice/mongodb.service
└─12970 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc
Enable Remote MongoDB Access on Firewall
By default MongoDB runs on port 27017, to allow access from everywhere you can use.
sudo ufw allow 27017
Output:
root@vps:~# sudo ufw allow 27017
Rules updated
Rules updated (v6)
But enabling access to MongoDB from everywhere gives unrestricted access to the database data. So, it’s better to give access to specific IP address location to default MongoDB’s port using following command.
sudo ufw allow from your_server_IP/32 to any port 27017
Output:
root@vps:~# sudo ufw allow from 104.200.67.187/32 to any port 27017
Rules updated
To allow remote MongoDB connections, you need to add your server IP address to /etc/mongodb.conf configuration file as shown.
vim /etc/mongodb.conf
Output:
bind_ip = 127.0.0.1,your_server_ip
#port = 27017
To restart a MongoDB service.
sudo systemctl restart mongodb.service
Access MongoDB Shell.
You can now access MongoDB’s shell by using following command.
mongo
Output:
root@vps:~# mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2020-03-19T14:59:11.066+0100 I CONTROL [initandlisten]
2020-03-19T14:59:11.066+0100 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-03-19T14:59:11.066+0100 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2020-03-19T14:59:11.066+0100 I CONTROL [initandlisten]
>
Once you have connected to the mongo shell, you can list all available databases with the following command.
show dbs
Output: show dbs admin 0.000GB config 0.000GB local 0.000GB
Creating MongoDBan Admin User.
use admin
db.createUser({user:"root", pwd:"=@!#@%$admin1", roles:[{role:"root", db:"admin"}]})
Output:
> db.createUser({user:"root", pwd:"=@!#@%$admin1", roles:[{role:"root", db:"admin"}]})
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
To list MongoDB users created.
show users
Output:
show users
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
Configuring Authentication for MongoDB.
The mongodb instance was started without the --auth command line option. You need to enable authentication of users by editing /lib/systemd/system/mongod.service file
sudo vim /lib/systemd/system/mongodb.service
Under the [Service] config section, find the parameter ExecStart.
ExecStart=/usr/bin/mongod --unixSocketPrefix=${SOCKETPATH} --config ${CONF} $DAEMON_OPTS
Change it to the following.
EnvironmentFile=-/etc/default/mongodb
Environment=CONF=/etc/mongodb.conf
Environment=SOCKETPATH=/run/mongodb
ExecStart=/usr/bin/mongod --auth --unixSocketPrefix=${SOCKETPATH} --config ${CONF} $DAEMON_OPTS
For the changes to come into effect, reload the system and restart MongoDB.
systemctl daemon-reload
sudo systemctl restart mongodb
sudo systemctl status mongodb
Output:
root@vps:~# sudo systemctl status mongodb.service
● mongodb.service - An object/document-oriented database
Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset:
Active: active (running) since Thu 2020-03-19 15:18:53 CET; 7s ago
Docs: man:mongod(1)
Main PID: 13570 (mongod)
Tasks: 23 (limit: 1113)
CGroup: /system.slice/mongodb.service
└─13570 /usr/bin/mongod --auth
Now when you try to connect to mongodb, you must authenticate yourself as a MongoDB user.
mongo -u "root" -p --authenticationDatabase "admin"
Output:
root@vps:~# mongo -u "root" -p --authenticationDatabase "admin"
MongoDB shell version v3.6.3
Enter password:
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3