How to install the MEAN Stack on Ubuntu Linux

This article describes the steps to install and use the MEAN stack on Ubuntu Linux.

The MEAN stack is a JavaScript-based framework for developing dynamic JAVA-based websites and applications. The stack consists of MongoDB, Express, Angular, and Node.

Using the MEAN stack, developers can standardize on proven technologies and spend more time working on applications, rather than gluing lots of separate components together.

If you want to build fast, dynamic, and robust web applications, the MEAN stack is one way to go. Below are steps that show you how to install it on Ubuntu Linux.

How to install and use the MEAN stack on Ubuntu Linux

As described above, the MEAN stack is a JavaScript-based framework for developing dynamic JAVA-based websites and applications. The stack consists of MongoDB, Express, Angular, and Node.

Below is how to install it on Ubuntu Linux.

Install MongoDB

MongoDB is represented by M in MEAN. It is a document database. By default, it’s not included in Ubuntu repositories, so you will have to add its repository if you want to install it.

Before, that, run the commands below to add the necessary dependencies to add APT repositories to Ubuntu.

sudo apt update
sudo apt install dirmngr gnupg apt-transport-https ca-certificates software-properties-common

To install MongoDB, add its repository’s GPG key to sign its packages.

Run the commands below to do that.

wget -qO -  | sudo apt-key add -

Next, run the commands below to create a repository file for MongoDB on Ubuntu Linux.

echo "deb [ arch=amd64,arm64 ]  focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

Make sure to replace the highlighted Ubuntu core name in the command with your system’s core number. Ubuntu 20.04 code name is focal.

After adding the repository GPG key and file, run the commands below to update the Ubuntu packages index and install MongoDB.

sudo apt update
sudo apt install mongodb-org

If you run into problems installing MongoDB, run the commands below to install these dependencies.

wget 
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

Additional resources on installing and managing MongoDB database can be found at the link below.

How to install and manage MongoDB database on Ubuntu Linux

Install Node.js

Express(.js), Angular(.js), and Node(.js) are all web frameworks based on JavaScript. Express.js is a fast, minimalist web framework for Node.js

Angular.js is a fully extensible toolset and libraries for building web and app frameworks based on Node.js and JavaScript.

Node.js is the premier JavaScript web server.

Let’s first install Node.js and then get the other packages installed after.

Node.js packages are included in Ubuntu default repositories. However, the version included in Ubuntu might not necessarily be the latest.

To get the latest, you will have to add the Node.js repository.

Run the commands below to download the Node.js version 18 repository script.

sudo apt install curl
curl -sL https://deb.nodesource.com/setup_18.x | sudo bash -

Once downloaded and executed, run the commands below to install Node.js version 18.

sudo apt install nodejs

Additional packages recommended to install with the MEAN stack can also be installed using the commands below

sudo npm install -g yarn
sudo npm install -g gulp
sudo npm install pm2 -g

Additional resources on installing and using Node.js on Ubuntu Linux can be found at the link below.

How to install and use Node.js on Ubuntu Linux

Install MEAN stack

At this point, we are ready to download the MEAN stack from GitHub. The git package includes all the required dependencies that are used with MEAN development.

Run the commands below to clone the package from GitHub.

sudo apt install git
git clone https://github.com/meanjs/mean

Once downloaded, run the command below to install all dependencies.

cd mean
yarn install

Create a Node.js web app

Now we have all the MEAN packages and dependencies installed. Let’s build our first app. First, run the commands below to edit the server.js file in the MEAN directory.

nano ~/mean/server.js

When the file opens, copy and paste the lines below into the file and save.

const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const app = express();

app.use('/', (req, res) => {
MongoClient.connect("mongodb://localhost:27017/test", function(err, db){
db.collection('Example', function(err, collection){
collection.insert({ pageHits: 'pageHits' });
db.collection('Example').count(function(err, count){
if(err) throw err;
res.status(200).send('Page Hits: ' + Math.floor(count/2));
});
});
});
});

app.listen(3000);
console.log('Server running at 

module.exports = app;

After saving the file, run the commands below to start the server.

pm2 start ~/mean/server.js

When the server starts, it should output something similar to the lines below.

                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__
                          Runtime Edition
        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.
                Start and Daemonize any application:
                $ pm2 start app.js
                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4
                Monitor in production:
                $ pm2 monitor
                Make pm2 auto-boot at server restart:
                $ pm2 startup
                To go further checkout:
                
[PM2] Spawning PM2 daemon with pm2_home=/home/richard/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/richard/mean/server.js in fork_mode (1 instance)
[PM2] Done.
┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name      │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ server    │ default     │ 0.6.0   │ fork    │ 7377     │ 0s     │ 0    │ online    │ 0%       │ 38.8mb   │ richard  │ disabled │
└─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

To enable the web app to automatically startup when the system boots, run the commands below.

pm2 startup ~/mean/server.js

The command above will output similar lines as the ones below.

[PM2] Init System found: systemd

-----------------------------------------------------------
 PM2 detected systemd but you precised /home/richard/mean/server.js
 Please verify that your choice is indeed your init system
 If you arent sure, just run : pm2 startup
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup /home/richard/mean/server.js -u richard --hp /home/richard

You will be prompted to run the highlighted commands above to enable the app to automatically startup every time you start the system.

The application is started and is using port 3000.

To access it, open your web browser and browse to the server’s hostname or IP address followed by port number 3000.

http://localhost:3000

Run MEAN app with reverse proxy

To efficiently run your MEAN stack app, it is recommended that you run it behind a reverse proxy. Below are two posts that showed you how to set up a reverse proxy with Nginx and Apache HTTP server.

That should do it!

Conclusion:

This post showed you how to install and use the MEAN stack on Ubuntu Linux. If you find any error above or have something to add, please use the comment form below.