New home decor from John Doerson

Ullamcorper condimentum erat pretium velit at ut a nunc id a adeu vestibulum nibh urna nam consequat erat molestie lacinia rhoncus. Nisi a diamida himenaeos condimentum laoreet pera neque habitant leo feugiat viverra nisl sagittis a curabitur parturient nisi adipiscing. A parturient dapibus pulvinar arcu a suspendisse sagittis mus mollis at a nec placerat sociosqu himenaeos litora fames habitant suscipit tempus scelerisque ridiculus mi ullamcorper per ridiculus proin condimentum.

Seguir leyendo

Sweet seat: functional seat for IT folks

A sed a risusat luctus esta anibh rhoncus hendrerit blandit nam rutrum sitmiad hac. Cras a vestibulum a varius adipiscing ut dignissim ullamcorper libero fermentum dis aliquet tellus mollis et tristique sodales. Suspendisse vel mi etiam ullamcorper parturient varius parturient eu eget pulvinar odio dapibus nisl ut luctus suscipit per vel aptent fames venenatis leo ac ullamcorper integer mus condimentum rutrum.

Seguir leyendo

Minimalist design furniture 2016

A taciti cras scelerisque scelerisque gravida natoque nulla vestibulum turpis primis adipiscing faucibus scelerisque adipiscing aliquet pretium. Et iaculis mi velit tincidunt vestibulum a duis tempor non magna ultrices porta malesuada ullamcorper scelerisque parturient himenaeos iaculis sit. Scelerisque sociosqu ullamcorper urna nisl mollis vestibulum pretium commodo inceptos.

Seguir leyendo

Cómo configurar una aplicación de Node.js para producción

Paso 3: Instalar PM2

A continuación, instalaremos PM2, un administrador de procesos para aplicaciones de Node.js. PM2 permite implementar demonios en aplicaciones para que puedan funcionar en segundo plano como servicios.

Use npm para instalar la última versión de PM2 en su servidor:

  • sudo npm install pm2@latest -g

La opción -g indica a npm que instale el módulo de forma global, de modo que esté disponible en todo el sistema.

Primero, usaremos el comando pm2 start para ejecutar su aplicación, hello.js, en segundo plano:

  • pm2 start hello.js

Con esto, también se agrega su aplicación a la lista de procesos de PM2, que se emite cada vez que se inicia una aplicación:

Output
[PM2] Spawning PM2 daemon with pm2_home=/home/sammy/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/sammy/hello.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬───────┬──────────┐
│ App name │ id │ mode │ pid  │ status │ restart │ uptime │ cpu │ mem       │ user  │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼───────┼──────────┤
│ hello    │ 0  │ fork │ 1338 │ online │ 0       │ 0s     │ 0%  │ 23.0 MB   │ sammy │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴───────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

Como puede ver, PM2 asigna automáticamente un App name (según el nombre del archivo, sin la extensión .js) y un id de PM2. También conversa otra información, como el PID de los procesos, su estado actual y su uso de memoria.

Las aplicaciones que se ejecutan en PM2 se reiniciarán de forma automática si la aplicación se bloquea o se detiene, pero podemos dar un paso adicional para que se cargue en el inicio del sistema usando el subcomando startup. Este subcomando genera y configura una secuencia de comandos de inicio para iniciar PM2 y sus procesos administrados al iniciarse el servidor:

  • pm2 startup systemd

En la última línea del resultado obtenido se incluirá un comando que se ejecutará con privilegios de superusuario a fin de configurar PM2 para que se cargue en el inicio:

Output
[PM2] Init System found: systemd
[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 systemd -u sammy --hp /home/sammy

Ejecute el comando del resultado, con su nombre de usuario en lugar de sammy:

  • sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy –hp /home/sammy

Como paso adicional, podemos guardar la lista de procesos de PM2 y los entornos correspondientes:

  • pm2 save

De esta manera, habrá creado una unidad de systemd que ejecuta pm2 para su usuario en el inicio. Esta instancia de pm2, a su vez, ejecuta hello.js.

Inicie el servicio con systemctl:

  • sudo systemctl start pm2-sammy

Compruebe el estado de la unidad de systemd:

  • systemctl status pm2-sammy

Para hallar una descripción detallada de systemd, consulte Aspectos básicos de systemd: trabajar con servicios, unidades y el componente de diario.

Además de los subcomandos que ya abarcamos, PM2 proporciona muchos que le permiten administrar o buscar información sobre sus aplicaciones.

Detenga una aplicación con este comando (especifique App name o id de PM2):

  • pm2 stop app_name_or_id

Reinicie una aplicación:

  • pm2 restart app_name_or_id

Liste las aplicaciones actualmente administradas por PM2:

  • pm2 list

Obtenga información sobre una aplicación específica usando su App name:

  • pm2 info app_name

El monitor de procesos de PM2 se puede extraer con el subcomando monit. Con esto, se muestra el estado y el uso de CPU y memoria de la aplicación:

  • pm2 monit

Tenga en cuenta que si se ejecuta pm2 sin argumentos, también se mostrará una página de ayuda con uso de ejemplos.

Ahora que su aplicación de Node.js funciona y PM2 la administra, configuraremos el proxy inverso.

Paso 4: Configurar Nginx como servidor proxy inverso

Su aplicación está en ejecución y escucha en localhost, pero necesita configurar una alternativa para que sus usuarios accedan a ella. Configuraremos el servidor web de Nginx como un proxy inverso para este propósito.

En el tutorial de los requisitos previos, configuró sus ajustes de Nginx en el archivo /etc/nginx/sites-available/example.com. Abra este archivo para editarlo:

  • sudo nano /etc/nginx/sites-available/example.com

En el bloque server, debería disponer de un bloque location /. Sustituya el contenido de dicho bloque por la siguiente configuración. Si su aplicación está configurada para escuchar en un puerto diferente, actualice la parte resaltada con el número de puerto correcto:

/etc/nginx/sites-available/example.com
server {
...
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
...
}

Con esto, se configurará el servidor para que responda las solicitudes en su root. Suponiendo que nuestro servidor esté disponible en example.com, al acceder a https://example.com/ a través de un navegador web se enviaría la solicitud a hello.js y la escucha se realizaría en el puerto 3000 en localhost.

Puede agregar bloques location al mismo bloque de servidor para proporcionar acceso a otras aplicaciones en el mismo servidor. Por ejemplo, si también contaba con otra aplicación Node.js en el puerto 3001, podría agregar este bloque de ubicación para permitir el acceso a él a través de https://example.com/app2:

/etc/nginx/sites-available/example.com — Optional
server {
...
    location /app2 {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
...
}

Una vez que termine de agregar los bloques de ubicación a sus aplicaciones, guarde el archivo y cierre el editor.

Asegúrese de no haber introducido errores de sintaxis escribiendo lo siguiente:

  • sudo nginx -t

Reinicie Nginx:

  • sudo systemctl restart nginx

Suponiendo que su aplicación Node.js está en ejecución, y que su aplicación y las configuraciones de Nginx son correctas, ahora debería poder acceder a su aplicación a través del proxy inverso de Nginx. Pruébelo accediendo a la URL de su servidor (su dirección IP pública o nombre de dominio).

Conclusión

¡Felicitaciones! De esta manera, habrá logrado hacer funcionar su aplicación de Node.js detrás de un proxy inverso de Nginx en un servidor de Ubuntu 18.04. Esta configuración de proxy inverso es suficientemente flexible como para proporcionar a sus usuarios acceso a otras aplicaciones o a contenido web estático que desee compartir.