Cómo instalar MEAN Stack en Ubuntu 22.04

La pila MEAN es un marco de trabajo gratuito y de código abierto basado en JavaScript que se utiliza para desarrollar aplicaciones web. MEAN está formado por cuatro tecnologías clave: MongoDB, Express, Angular y Node. La pila está diseñada para hacer que la construcción de aplicaciones web en JavaScript y el manejo de JSON sean increíblemente fáciles. Puedes utilizar las aplicaciones MEAN de muchas maneras. Sin embargo, es especialmente adecuado para las aplicaciones en tiempo real, en particular las que se ejecutan de forma nativa en la nube y las aplicaciones web de una sola página (dinámicas) construidas en Angular.js.

En este post, te mostraremos cómo instalar la pila MEAN en el servidor Ubuntu 22.04.

Requisitos previos

  • Un servidor con Ubuntu 22.04.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Una contraseña de root configurada en el servidor.

Cómo empezar

Antes de empezar, se recomienda actualizar todos los paquetes del sistema a la última versión. Puedes actualizarlos todos con el siguiente comando:

apt update -y
apt upgrade -y

Una vez actualizados todos los paquetes, instala las dependencias necesarias con el siguiente comando:

apt install python3 dirmngr gnupg apt-transport-https ca-certificates software-properties-common -y

Una vez instaladas todas las dependencias, puedes pasar al siguiente paso.

Instalar MongoDB

Por defecto, el paquete MongoDB no está incluido en el repositorio por defecto de Ubuntu. Así que tendrás que añadir el repositorio de MongoDB a tu servidor.

Primero, descarga y añade la clave de MongoDB con el siguiente comando:

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -

A continuación, añade el repositorio de MongoDB a APT con el siguiente comando:

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

A continuación, descarga e instala la dependencia de libssl con el siguiente comando:

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

A continuación, actualiza el repositorio e instala el paquete MongoDB con el siguiente comando:

apt-get update -y
apt-get install mongodb-org -y

Después de la instalación exitosa, inicia y habilita el servicio MongoDB con el siguiente comando:

systemctl start mongod
systemctl enable mongod

A continuación, comprueba el estado del servicio MongoDB con el siguiente comando:

systemctl status mongod

Obtendrás la siguiente salida:

? mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-10-30 07:30:10 UTC; 5s ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 2995 (mongod)
     Memory: 60.5M
        CPU: 1.050s
     CGroup: /system.slice/mongod.service
             ??2995 /usr/bin/mongod --config /etc/mongod.conf

Oct 30 07:30:10 ubuntu2204 systemd[1]: Started MongoDB Database Server.

Una vez que hayas terminado, puedes proceder a instalar Node.js.

Instalar Node.js

Por defecto, el paquete Node.js no está incluido en el repositorio por defecto de Ubuntu. Así que tendrás que instalarlo desde el repositorio de fuentes de Node.

Primero, añade el repositorio de fuentes de Node utilizando el siguiente comando:

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

A continuación, instala el paquete Node.js utilizando el siguiente comando:

apt-get install nodejs -y

Una vez instalado el paquete Node.js, puedes verificar la versión de Node.js utilizando el siguiente comando:

node -v

Obtendrás la siguiente salida:

v18.12.0

A continuación, instala el paquete Yarn, Gulp y PM2 utilizando el NPM:

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

Una vez que hayas terminado, puedes pasar al siguiente paso.

Descargar e instalar MEAN Stack

En primer lugar, tendrás que descargar la última versión de MEAN Stack desde el repositorio Git. Puedes descargarla utilizando el siguiente comando:

git clone https://github.com/meanjs/mean

Una vez completada la descarga, navega al directorio descargado e instala todas las dependencias necesarias utilizando el siguiente comando:

cd mean
yarn install

Una vez instaladas todas las dependencias, puedes pasar al siguiente paso.

Crear la aplicación MEAN

En esta sección, crearemos una aplicación MEAN sencilla.

Para ello, crea una aplicación MEAN dentro del directorio mean con el siguiente comando

nano server.js

Añade el siguiente código:

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 http://localhost:3000/');

module.exports = app;

Guarda y cierra el archivo y luego inicia la aplicación con el PM2:

pm2 start server.js

Obtendrás la siguiente salida:

                          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:
                http://pm2.io/


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

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/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    ? 5644     ? 0s     ? 0    ? online    ? 0%       ? 45.2mb   ? root     ? disabled ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

A continuación, habilita la aplicación MEAN para que se inicie tras el reinicio del sistema:

pm2 startup

Obtendrás el siguiente resultado:

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

Por defecto, la aplicación MEAN escucha en el puerto 3000. Puedes comprobarlo con el siguiente comando:

ss -antpl | grep 3000

Obtendrás la siguiente salida:

LISTEN 0      511                *:3000             *:*    users:(("node /root/mean",pid=5644,fd=20))

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar y configurar Nginx para la aplicación MEAN

Primero, instala el paquete del servidor web Nginx con el siguiente comando:

apt-get install nginx -y

Una vez instalado Nginx, crea un archivo de configuración del host virtual Nginx con el siguiente comando:

nano /etc/nginx/conf.d/mean.conf

Añade las siguientes configuraciones:

server {
listen 80;

server_name mean.example.com;
access_log /var/log/nginx/mean-access.log;
error_log /var/log/nginx/mean-error.log;

location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:3000/;
}
}

Guarda y cierra el archivo, y a continuación verifica si el Nginx tiene errores de sintaxis con el siguiente comando:

nginx -t

Deberías obtener la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

A continuación, reinicia el servicio Nginx para aplicar los cambios.

systemctl restart nginx

También puedes comprobar el estado de Nginx con el siguiente comando:

systemctl status nginx

Deberías obtener la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-10-30 07:37:24 UTC; 4s ago
       Docs: man:nginx(8)
    Process: 6416 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 6417 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 6418 (nginx)
      Tasks: 3 (limit: 4579)
     Memory: 3.3M
        CPU: 49ms
     CGroup: /system.slice/nginx.service
             ??6418 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ??6419 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ??6420 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Oct 30 07:37:24 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server...
Oct 30 07:37:24 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.

Una vez que hayas terminado, puedes pasar al siguiente paso.

Acceder a la aplicación MEAN

En este punto, Nginx está instalado y configurado como proxy inverso para la aplicación MEAN. Ahora puedes acceder a la aplicación MEAN utilizando la URL http://mean.example.com. Deberías ver la interfaz web de MEAN en la siguiente pantalla:

Página de prueba de MEAN Stack

Enhorabuena! has instalado y configurado con éxito la pila MEAN en Ubuntu 22.04.

Scroll al inicio