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:
Enhorabuena! has instalado y configurado con éxito la pila MEAN en Ubuntu 22.04.