DebianDebian Based

How To Install MEAN Stack on Debian 12

Install MEAN Stack on Debian 12

The MEAN Stack stands for MongoDB, Express.js, Angular, and Node.js. It is a popular choice among developers who want to rapidly prototype and build dynamic applications. This open-source combination of technologies covers every layer needed for modern web and mobile development, from the database to the front-end framework. When you have a reliable Linux distribution such as Debian 12, the MEAN Stack runs efficiently, offering the stability and security demanded by production environments.

For those seeking an environment optimized for server-side development, Debian 12 provides updated packages and security enhancements, making it a strong foundation for full-stack JavaScript projects. The end result is a powerful platform where you can write both server-side and client-side code in one programming language: JavaScript. As a result, you maintain a unified development experience and a more streamlined workflow.

This guide walks through each phase of setting up the MEAN Stack on Debian 12. From installing MongoDB and Node.js to setting up Express.js and Angular, every step is methodically explained. Additionally, it provides best practices on how to secure your installation and common troubleshooting tips to ensure your environment runs smoothly. Whether you’re a beginner or an advanced Linux user, the instructions contained here will help you quickly get up and running. By the end of this tutorial, you will have a fully functional MEAN Stack on Debian 12, ready for real-world application development and deployment.

Prerequisites

Before you begin the MEAN Stack installation process on Debian 12, make sure you have the following prerequisites:

  • Sudo Privileges: You need root access or a user account with sudo privileges to install and configure packages.
  • Basic Command Line Skills: Familiarity with common Linux commands helps you navigate and troubleshoot the system.
  • Stable Internet Connection: Ensures package updates and downloads proceed without error.
  • Domain Configuration (Optional): If you want to host your MEAN application on a custom domain, it’s helpful to have your DNS settings pre-configured.

Having these prerequisites in place will help the installation process go smoothly. By ensuring that you have sufficient privileges, you can avoid permission-related errors, and a stable internet connection ensures that software updates do not fail midway. Additionally, being familiar with basic Linux commands like apt update or apt install will save you time and confusion during this setup.

System Preparation

Before installing any components of the MEAN Stack on Debian 12, you should prepare and update your system. System preparation involves ensuring all installed packages are up to date, removing any stale or unnecessary files, and verifying that your environment is stable. This helps mitigate dependency issues that might arise when you install Node.js, MongoDB, or other key packages.

Below are the steps for system preparation:

  1. Update Existing Packages
    Run:

    sudo apt update
    sudo apt upgrade -y
    

    This command updates the package index and proceeds to upgrade your installed packages to their latest versions. The -y flag automatically confirms the upgrades.

  2. Install Essential Build Tools
    Compiler tools like build-essential or developer utilities like curl are often required by Node.js and other languages:

    sudo apt install build-essential curl -y
    

    This ensures you have everything you need for compiling native addons in Node.js, if applicable.

  3. Reboot if Necessary
    If your system had significant updates, especially at the kernel level, it might be prudent to reboot:

    sudo reboot
    

After you’ve completed the above steps, your operating system should be fully updated, and you’ll be ready to begin installing the individual MEAN Stack components. The process ensures a smoother installation since newly updated packages greatly reduce conflicts with older library versions.

Installing MongoDB

MongoDB is a NoSQL database renowned for its flexibility and scalability. Instead of rigidly storing data in rows and columns, MongoDB uses JSON-like documents that allow for dynamic schema definitions. This aspect is particularly handy for rapidly evolving applications, making it an ideal choice for full-stack JavaScript projects. Let’s break down how to install MongoDB on Debian 12.

  1. Import MongoDB Repository Key
    MongoDB provides its own repository for installing the latest stable releases. Begin by importing the official key:

    curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb.gpg
    

    This command downloads the official GPG key and saves it to your system keyring.

  2. Add the MongoDB Repository
    Create and edit a .list file in /etc/apt/sources.list.d/ to include MongoDB’s repository:

    echo "deb [signed-by=/usr/share/keyrings/mongodb.gpg] https://repo.mongodb.org/apt/debian bookworm/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
    

    Here, bookworm refers to Debian 12, also known as “bookworm.”

  3. Update Package List and Install MongoDB
    Refresh the package list and install:

    sudo apt update
    sudo apt install -y mongodb-org
    

    This fetches and installs the MongoDB server, shell, and associated tools.

  4. Enable and Start MongoDB Service
    Next, enable the service to start automatically on boot:

    sudo systemctl enable mongod
    sudo systemctl start mongod
    

    Confirm it’s running:

    sudo systemctl status mongod
    

    You should see “active (running)” if MongoDB has started successfully.

  5. Secure MongoDB Installation
    While MongoDB does not include a built-in interactive security script like some SQL databases, you can set up authentication by creating an administrative user. In the Mongo shell:

    mongosh
    use admin
    db.createUser({
      user: "admin",
      pwd: "StrongPassword123",
      roles: [ { role: "root", db: "admin" } ]
    });
    exit
    

    Finally, edit the /etc/mongod.conf file to enable authentication. Under security section:

    security:
      authorization: enabled
    

    Restart MongoDB for changes to take effect:

    sudo systemctl restart mongod
    

Once this is complete, MongoDB is installed and ready for integration with the rest of the MEAN Stack. Knowing how to manage users, secure the database, and verify the service status will help keep your data safe and accessible.

Setting Up Node.js and NPM

Node.js is the runtime environment that allows developers to run JavaScript on the server side. Paired with npm (Node Package Manager), it provides a robust ecosystem of packages and tools to simplify application development. Debian 12’s default repositories often provide older versions of Node.js, so installing from an official or NodeSource repository is recommended for obtaining the latest stable release.

  1. Add Node.js Repository
    NodeSource maintains repositories for various Node.js versions. Using curl, you can download and run a script that configures the repository for Node.js 20 (LTS):

    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
    

    This script configures the package repository for Node.js 18.x.

  2. Install Node.js
    Once the repository is set up, install Node.js:

    sudo apt install -y nodejs
    

    This usually includes npm automatically. If npm is not installed, run:

    sudo apt install -y npm
    
  3. Verify Installation
    Check the installed version:

    node -v
    npm -v
    

    Ensure both commands return valid version numbers. A successful verification confirms Node.js and npm are installed properly.

  4. Configure NPM Global Settings (Optional)
    Sometimes the default npm global directory can lead to permission issues. You can configure a non-root location for global npm packages:

    mkdir ~/.npm-global
    npm config set prefix '~/.npm-global'
    

    Then, update your PATH to reflect these changes by adding export PATH="$PATH:$HOME/.npm-global/bin" to ~/.bashrc or your shell’s configuration file.

Having Node.js and npm installed on Debian 12 ensures you can run server-side JavaScript and manage dependencies efficiently. This is crucial for the rest of the stack because Express.js and Angular both rely on npm for installation.

Installing Express.js

Express.js is a minimalist web application framework for Node.js, renowned for its flexibility in building web applications and APIs. It handles routing, middleware, and more. As one of the most widely used Node.js frameworks, it is central to the MEAN Stack. Below are the steps to install and set up Express.js.

  1. Global Installation of Express Generator (Optional)
    If you plan to quickly scaffold an Express application, you can install the Express Generator tool:

    sudo npm install -g express-generator
    

    This tool is optional; you can still create an Express project without it.

  2. Create a Project Directory
    Organize your project by creating a dedicated directory:

    mkdir my-mean-app
    cd my-mean-app
    
  3. Initialize npm
    Inside your project folder, initialize npm to create a package.json:

    npm init -y
    

    The -y flag uses the default settings, which you can adjust later in the package.json file if needed.

  4. Install Express.js Locally
    Install Express as a dependency:

    npm install express
    

    This registers Express in your package.json.

  5. Create a Basic Server
    In your project directory, create an index.js file with:

    const express = require('express');
    const app = express();
    const port = 3000;
    
    app.get('/', (req, res) => {
      res.send('Hello from Express!');
    });
    
    app.listen(port, () => {
      console.log(`Server running on port ${port}`);
    });
    

    Now, start the server:

    node index.js
    

    Access http://localhost:3000 in your web browser or by using curl, and you should see the message “Hello from Express!”

With Express.js now installed, you can build routes, add middleware, and shape your backend services. Taken together with MongoDB and Node.js, you are well on your way to a seamless development process.

Installing Angular CLI

Angular is your front-end framework, providing a structured way to build responsive single-page applications. The Angular CLI (Command Line Interface) helps automate many tasks, such as creating new components or services, minimizing the amount of repetitive code you need to write. Here’s how to install Angular CLI on Debian 12.

  1. Install Angular CLI
    To install the CLI globally, execute:

    sudo npm install -g @angular/cli
    

    This allows you to run the ng command from any directory on your system.

  2. Create a Sample Angular Project
    Generate a brand-new Angular application:

    ng new frontend-app
    

    Accept or provide answers to the configuration prompts, and let the CLI finish creating your project structure.

  3. Enter the Project Directory
    Move into your new Angular project folder:

    cd frontend-app
    

    This is where the Angular CLI has placed your initial files, including package.json, angular.json, src folder, and more.

  4. Serve the Application
    To test your setup, run:

    ng serve --open
    

    The --open flag automatically opens your default web browser to http://localhost:4200. If everything is configured correctly, you will see the default Angular welcome page.

At this point, your front-end framework is up and running in Debian 12. Angular’s CLI streamlines tasks such as building optimized production bundles and generating new components for your evolving application.

Configuring MEAN Stack Components

With MongoDB, Express.js, Angular, and Node.js installed, you need to tie them together. This step ensures that your front-end can communicate with the backend, which then interacts with the MongoDB database. Proper configuration guarantees a seamless flow of data and a maintainable code structure.

  1. Project Structure Overview
    Often, you will have a backend folder for Express and a frontend folder for Angular. Some developers prefer a monorepo with separate folders at the root level. Be mindful of how you organize your code to avoid confusion.
  2. Database Connection for Express
    In your backend directory, install the MongoDB driver or Mongoose (a popular ODM):

    npm install mongoose
    

    Then, in your main server file (for example, index.js or server.js):

    const mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost:27017/meanDB', {
      useNewUrlParser: true,
      useUnifiedTopology: true
    })
    .then(() => console.log('Connected to MongoDB!'))
    .catch((err) => console.error('Error connecting to MongoDB:', err));
    

    Replace meanDB with your actual database name if you prefer. The console messages confirm whether the connection is successful.

  3. Express Routes
    Create a route to handle data from your Angular front-end. For instance:

    app.post('/api/data', async (req, res) => {
      try {
        // Process incoming data or save to database
        const payload = req.body;
        // Example: const newDoc = await MyModel.create(payload);
        res.status(200).json({ message: 'Data received successfully', data: payload });
      } catch (error) {
        res.status(500).json({ error: 'An error occurred' });
      }
    });
    

    Configure your app to parse JSON by adding app.use(express.json()) near the beginning of your Express configuration.

  4. Angular Frontend Communication
    In your Angular app, you can create services to perform HTTP requests to your API endpoint. For instance, using Angular’s HttpClient:

    import { HttpClient } from '@angular/common/http';
    import { Injectable } from '@angular/core';
    
    @Injectable({
      providedIn: 'root'
    })
    export class DataService {
      private apiUrl = 'http://localhost:3000/api/data';
      
      constructor(private http: HttpClient) {}
    
      sendData(data: any) {
        return this.http.post<any>(this.apiUrl, data);
      }
    }
    

    Use this service in a component to submit form data to your Express backend, which in turn stores or processes the information through MongoDB.

By configuring all components correctly, you have the foundation for a fully functional MEAN application. Your Angular front-end can communicate with Express routes, and the application can store and retrieve data from MongoDB, all powered by Node.js.

Testing the Installation

Verifying each aspect of your MEAN Stack ensures all components function as intended. Testing early and often helps spot any configuration missteps before you progress further in development.

  1. Confirm MongoDB Service
    Run:

    sudo systemctl status mongod
    

    If the status shows “active (running),” MongoDB is operational.

  2. Start Your Express App
    Ensure your Express server is listening on the correct port. In your backend folder:

    node index.js
    

    or use nodemon if installed for auto restarts during development.

  3. Test Angular Frontend
    Navigate to your Angular project directory:

    ng serve --open
    

    Confirm you can view the Angular starter page and that any call to the Express API endpoint returns the expected response.

  4. Check the Network Requests
    Open your browser’s developer tools while your Angular app is running. Ensure that the network requests to http://localhost:3000/api or your chosen endpoint respond with success codes (200).

If each component responds correctly, you have a functional MEAN Stack environment. Incorporating further tests will give you confidence in the stability and interactiveness of your application.

Security Considerations

Securing your MEAN Stack application goes beyond turning on a firewall. Each layer, from the database to the front-end, should adopt best practices for maximum protection.

  • MongoDB Security: If your database is accessible over a network, utilize MongoDB’s authentication features by enabling user access control and possibly TLS encryption to protect data in transit.
  • Input Validation in Express: Validate and sanitize all incoming data to avoid injection attacks. Libraries like express-validator are helpful for this.
  • Angular Security Best Practices: Watch for cross-site scripting (XSS). Use Angular’s built-in protections, such as sanitation, and keep dependencies up to date.
  • Transport Layer Security: Use HTTPS for all external communications. Consider using solutions like Let’s Encrypt for free TLS certificates.

While no system is invulnerable, implementing these steps drastically reduces risk. Regularly review logs, audit user access, and keep your software updated to maintain a robust security stance.

Troubleshooting Common Issues

Even the most meticulous setup can encounter unforeseen problems. Here are some frequent issues and how to address them.

  • MongoDB Connection Errors: Make sure the MongoDB service is running and that the connection string in your application is correct. Misconfigured mongod.conf or missing authorization statements can also cause problems.
  • Node.js and NPM Conflicts: If you installed multiple versions of Node.js or npm, you might experience conflicts. Uninstall older versions or use a version manager like nvm to streamline your environment.
  • Angular Compilation Failures: Outdated dependencies or Node version mismatches can cause compilation errors. Always keep your Angular CLI in sync with the project version, and run npm install after pulling updates.
  • Express.js Configuration Issues: Missing middleware for parsing JSON or incorrectly set environment variables can lead to data not being received. Double-check your routes and confirm that your JSON parser is enabled.

Congratulations! You have successfully installed MEAN Stack. Thanks for using this tutorial for installing MEAN Stack on Ubuntu 24.04 LTS system. For additional help or useful information, we recommend you check the Debian website.

VPS Manage Service Offer
If you don’t have time to do all of this stuff, or if this is not your area of expertise, we offer a service to do “VPS Manage Service Offer”, starting from $10 (Paypal payment). Please contact us to get the best deal!

r00t

r00t is an experienced Linux enthusiast and technical writer with a passion for open-source software. With years of hands-on experience in various Linux distributions, r00t has developed a deep understanding of the Linux ecosystem and its powerful tools. He holds certifications in SCE and has contributed to several open-source projects. r00t is dedicated to sharing her knowledge and expertise through well-researched and informative articles, helping others navigate the world of Linux with confidence.
Back to top button