How to install mongodb
This article revisits essentials on how to install mongodb
, one of leading noSQL databases on development and production servers.
This article has complementary materials to the Testing
nodejs
Applications book. However, the article is designed to help those who bought the book to setup their working environment, as well as the wide audience of software developers who need same information.
In this article we will talk about:
__
- How to install
mongodb
on Linux, macOS and Windows. - How to stop/start automatically prior/after system restarts
We will not talk about:
__
- How to configure
mongodb
for development and production, as that is subject of another article worth visiting. - How to manage
mongodb
in a production environment, either in a containerized or standalone contexts. - How to load
mongodb
on Docker and Kubernetes
Installing mongodb
on Linux
It is always a good idea to update the system before start working. There is no exception, even when a daily task updates automatically binaries. That can be achieved on Ubuntu and Aptitude enabled systems as following:
$ apt-get update # Fetch list of available updates
$ apt-get upgrade # Upgrades current packages
$ apt-get dist-upgrade # Installs only new updates
Example: updating aptitude binaries
At this point most of packages should be installed or upgraded. Except Packages whose PPA have been removed or not available in the registry. Installing software can be done by installing binaries, or using Ubuntu package manager.
Installing a mongodb
on Linux using apt
Updating/Upgrading or first time fresh install of mongodb
can follow next scripts.
sudo
may be skipped if the current user has permission to write and execute programs
# Add public key used by the aptitude for further updates
# gnupg should be available in the system
$ apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-3.6.asc | sudo apt-key add -
# create and add list for mongodb (version 3.6, but variations can differ from version to version, the same applies to architecture)
$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
# Updating libraries and make the actual install
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# To install specific version(3.6.17 in our example) of mongodb, the following command helps
$ sudo apt-get install -y mongodb-org=3.6.17 mongodb-org-server=3.6.17 mongodb-org-shell=3.6.17 mongodb-org-mongos=3.6.17 mongodb-org-tools=3.6.17
Example: adding mongodb
PPA binaries and installing a particular binary version
It is always a good idea to upgrade often. Breaking changes happen on major/minor binary updates, but less likely on patch upgrades. The versions goes by pair numbers, so 3.2, 3.4, 3.6 etc. The transition that skips two version may be catastrophic. For example upgrades from any 3.x to 3.6, for this to work, there should be upgraded to an intermediate update from 3.x to 3.4, after which the update from 3.4 to 3.6 becomes possible.
# Part 1
$ apt-cache policy mongodb-org # Checking installed MongoDB version
$ apt-get install -y mongodb-org=3.4 # Installing 3.4 MongoDB version
# Part 2
# Running mongodb
$ sudo killall mongod && sleep 3 && sudo service mongod start
$ sudo service mongodb start
# Part 3
$ mongo # Accessing to mongo CLI
# Compatible Mode
$ > db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
$ > exit
# Part 3
$ sudo apt-get install -y mongodb-org=3.6 # Upgrading to latest 3.6 version
# Restart Server + As in Part 2.
Example: updating mongodb
binaries and upgrading to a version
Installing mongodb
on macOS
In case homebrew
is not already available on your mac, this is how to get one up and running. On its own, homebrew
depends on ruby runtime to be available.
homebrew
is a package manager and software installation tool that makes most developer tools installation a breeze. We should also highlight thathomebrew
requiresxcode
to be available on the system.
$ /usr/bin/ruby -e \
"$(curl -fsSL https://raw.githubusercontent.com \
/Homebrew/install/master/install)"
Example: installation instruction as provided by brew.sh
Generally speaking, this is how to install and uninstall things with brew
$ brew install wget
$ brew uninstall wget
Example: installing/uninstalling wget
binaries using homebrew
We have to to stress on the fact that Homebrew installs packages to their own directory and then symlinks their files into
/usr/local
.
It is always a good idea to update the system before start working. And that, even when we have a daily task that automatically updates the system for us. macOS can use homebrew
package manager on maintenance matters. To update/upgrade or check outdated packages, following commands would help.
$ brew outdated # lists all outdated packages
$ brew cleanup -n # visualize the list of things are going to be cleaned up.
$ brew upgrade # Upgrades all things on the system
$ brew update # Updates all outdated + brew itself
$ brew update <formula> # Updates one formula
$ brew install <formula@version> # Installs <formula> at a particular version.
$ brew tap <formular@version>/brew # Installs <formular> from third party repository
# untap/re-tap a repo when previous installation failed
$ brew untap <formular> && brew tap <formula>
$ brew services start <formular>@<version>
Example: key commands to work with homebrew
cli
For more informations, visit: Homebrew ~ FAQ.
Installing a mongodb
on a Mac using homebrew
$ brew tap mongodb/brew
$ brew install mongodb-community@3.6
$ brew services start mongodb-community@3.6 # start mongodb as a mac service
Example: Install and running mongodb
as a macOS service
Caveats ~ We have extra steps to make in order to start/stop automatically when the system goes up/down. This step is vital when doing development on macOS , which does not necessarily needs Linux production bound task runners.
# To have launchd start mongodb at login:
$ ln -s /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents/
# Then to load mongodb now:
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
# To unregister and stop the service, use the following command
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
# When not want/need launchctl this command works fine
$ mongod
Example: Stop/Start when the system stops/starts
Installing mongodb
on a Windows machine
Whereas MacOs, and most Linux distributions, come with Python and Ruby already enabled, It takes extra mile for Windows to make those two languages available. We have to stress on the fact that those two languages are somehow required to deploy a mongodb
environment on most platforms, especially when working with nodejs
.
The bright side of this story is that mongodb
provides windows binaries that we can downloaded and installed in a couple of clicks.
Automated upgrades
Before we dive into automatic upgrades, we should consider nuances associated to managing a mongodb
instance. The updates fall into two major, quite interesting, categories: patch updates and version upgrades.
Following the SemVer ~ aka Semantic Versioning standard, it is not recommended to consider minor/major versions for automated upgrades. One of the reasons being that these versions are subject to introducing breaking changes or incompatibility between two versions. On the other hand, patches are less susceptible to introduce breaking changes, whence ideal candidates for automated upgrades. Another among other reasons, being that security fixes are released as patches to a minor version.
We should highlight that it is always better to upgrade at deployment time. The process is even easier in containerized context. We should also automate only patches, to avoid to miss security patches.
In the context of Linux, we will use the unattended-upgrades package to do the work.
$ apt-get install unattended-upgrades apticron
Example: install unattended-upgrades
Two things to fine-tune to make this solution work are: to enable a blacklist of packages we do not to automatically update, and two, to enable particular packages we would love to update on a periodical basis. That is compiled in the following shell scripts.
Unattended-Upgrade::Allowed-Origins {
// "${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security"; # upgrading security patches only
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
Unattended-Upgrade::Package-Blacklist {
"vim";
};
Example: fine-tune the blacklist and whitelist in /etc/apt/apt.conf.d/50unattended-upgrades
The next step is necessary to make sure unattended-upgrades download, install and cleanups tasks have a default period: once, twice a day or a week.
APT::Periodic::Update-Package-Lists "1"; # Updates package list once a day
APT::Periodic::Download-Upgradeable-Packages "1"; # download upgrade candidates once a day
APT::Periodic::AutocleanInterval "7"; # clean week worth of unused packages once a week
APT::Periodic::Unattended-Upgrade "1"; # install downloaded packages once a day
Example: tuning the tasks parameter /etc/apt/apt.conf.d/20auto-upgrades
This approach works on Linux(Ubuntu), especially deployed in production, but not Windows nor macOS. The last issue, is to be able to report problems when an update fails, so that a human can intervene whenever possible. That is where the second tool apticron
in first paragraph intervenes. To make it work, we will specify which email to send messages to, and that will be all.
EMAIL="<email>@<host.tld>"
Example: tuning reporting tasks email parameter /etc/apticron/apticron.conf
Conclusion
In this article we revisited ways to install mongodb
on various platforms. Even though configuration was beyond the scope of this article, we managed to get everyday quick refreshers out in the article. There are areas we wish we added more coverage, probably not on the first version of this article.
Some of other places where people are wondering how to install
mongodb
on various platforms include, but not limited to Quora, StackOverflow and Reddit.
Reading list
- Documentation on how to Install
mongodb
on Ubuntu- An A-Z Index of the Apple macOS command line (macOS bash) and the Apple macOS How-to guides and examples, launchd
- The answer to two questions: 1) How to know package version and 2) How to install a specific Package with aptitude.
- Performing Automated In-place Cluster Updates, on Google Cloud Platform: Auto-upgrading nodes
- More on configuring unattended-upgrades are in these articles: Automatic Updates, How to Enable Unattended Upgrades on Ubuntu/Debian and How to Setup Automatic Security Updates on Ubuntu 16.04
#nodejs #homebrew #UnattendedUpgrades #mongodb #y2020 #Jan2020 #HowTo #ConfiguringNodejsApplications #tdd #TestingNodejsApplications