Configurar Node.js con Apache en Ubuntu 24.04
Node.js es un entorno de ejecución de JavaScript que permite crear aplicaciones del lado del servidor de forma sencilla y flexible. Con el gestor de procesos PM2 puedes configurar tu aplicación Node.js para que se ejecute como un servicio en Ubuntu 24.04, asegurando que permanezca activa y se reinicie automáticamente en caso de errores.
La ejecución de scripts Node.js como servicio
Aunque los scripts del entorno de ejecución de JavaScript Open-Source Node.js pueden ejecutarse directamente desde la línea de comandos, hacerlo a través del gestor de procesos PM2 ofrece un funcionamiento más estable y fiable. Cuando los scripts se ejecutan como servicio, se reinician automáticamente si el servidor se reinicia o si la aplicación falla, lo que garantiza una mayor disponibilidad.
PM2 es un gestor de procesos para Node.js con múltiples funciones que facilitan el control, la supervisión y la gestión de tus aplicaciones. Puedes visitar la página web de PM2 para obtener más información sobre sus posibilidades y configuración.
Requisitos
Antes de comenzar con la instalación y configuración de Node.js con Apache y PM2, asegúrate de cumplir los siguientes requisitos:
- Un servidor Linux, preferiblemente Ubuntu 24.04
- Un nombre de dominio funcional que apunte correctamente al servidor
- Un servidor web Apache instalado y operativo
Instalar Node.js
Para instalar Node.js necesitas la herramienta de línea de comandos curl. Primero actualiza los paquetes de tu servidor e instala curl con los siguientes comandos:
sudo apt update
sudo apt install curl -ybashA continuación, descarga el repositorio PPA de Node.js y añádelo a la caché de paquetes de tu servidor. Este PPA incluye una versión de Node.js más reciente que la que ofrecen los repositorios oficiales de Ubuntu:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -bashDespués, instala Node.js:
sudo apt install -y nodejsbashEsto también instalará automáticamente npm.
Por último, instala el paquete build-essential. Este paquete incluye herramientas de desarrollo esenciales como compiladores y Make, necesarias para que Node.js pueda compilar y ejecutar correctamente módulos de npm con extensiones nativas.
sudo apt install -y build-essentialbashCreación de una aplicación Node.js de ejemplo
Para este ejemplo, primero crearemos un directorio independiente dentro del directorio raíz de documentos de tu página web para alojar aplicaciones Node.js:
sudo mkdir /var/www/html/nodejsbashA continuación, crea el archivo hello.js dentro de este directorio:
sudo nano /var/www/html/nodejs/hello.jsbashDespués, añade el siguiente contenido de ejemplo al archivo:
#!/usr/bin/env node
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World! Node.js is working correctly.\n');
}).listen(8080, '0.0.0.0');
console.log('Server running at http://127.0.0.1:8080/');javascriptGuarda el archivo, cierra el editor y hazlo ejecutable con el siguiente comando:
sudo chmod 755 hello.jsbashComprobar el cortafuegos
Ubuntu 24.04 puede activar el cortafuegos UFW de forma predeterminada. Para poder probar tu aplicación Node.js directamente, debes asegurarte de que el puerto 8080 esté abierto:
sudo ufw allow 8080/tcpbashEste paso es especialmente importante si quieres acceder a tu servidor directamente a través de la dirección IP o desde un navegador externo. Si Node.js se va a ejecutar únicamente a través de Apache utilizando el proxy, este paso es opcional, ya que el proxy se encargará de redirigir el tráfico.
Instalar PM2
Utiliza npm para instalar PM2 con el siguiente comando:
sudo npm install -g pm2bashA continuación, inicia el script de ejemplo hello.js con este comando:
sudo pm2 start hello.jsbashComo usuario root, añade PM2 a los scripts de arranque para que se reinicie automáticamente cuando el servidor se reinicie y guarda los procesos que están activos:
sudo pm2 startup systemd
sudo pm2 savebash- Copias de seguridad automáticas y fácil recuperación
- Gestión y planificación intuitiva
- Protección contra las amenazas basadas en IA
- Incluye crédito inicial de 250 € el primer mes
Configurar Apache
Para acceder al script de Node.js desde la web, instala los módulos proxy y proxy_http de Apache con los siguientes comandos:
sudo a2enmod proxy
sudo a2enmod proxy_httpbashUna vez completada la instalación, reinicia Apache para aplicar los cambios:
sudo systemctl restart apache2bashA continuación, debes ajustar la configuración del proxy en Apache. Las siguientes instrucciones deben añadirse dentro del bloque VirtualHost del archivo de configuración principal del servidor Apache.
En Ubuntu, este archivo suele encontrarse en la ruta:
/etc/apache2/sites-available/example.com.conf
La ubicación y el nombre del archivo de configuración de Apache pueden variar según la configuración del servidor.
Edita este archivo con el editor que prefieras, por ejemplo:
sudo nano /etc/apache2/sites-available/example.com.confbashDentro del archivo, desplázate hasta encontrar el bloque VirtualHost, que tendrá un aspecto similar a este:
<VirtualHost *:80>
ServerName example.com
<Directory "/var/www/example.com/html">
AllowOverride All
</Directory>
</VirtualHost>Añade las siguientes directivas dentro del bloque VirtualHost:
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /nodejs>
ProxyPass http://127.0.0.1:8080
ProxyPassReverse http://127.0.0.1:8080
</Location>Asegúrate de que estas líneas se encuentren fuera de los bloques de directorio (<Directory>), por ejemplo:
<VirtualHost *:80>
ServerName example.com
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /nodejs>
ProxyPass http://127.0.0.1:8080
ProxyPassReverse http://127.0.0.1:8080
</Location>
<Directory "/var/www/example.com/html">
AllowOverride All
</Directory>
</VirtualHost>Guarda y cierra el archivo, y luego reinicia Apache para aplicar todos los cambios:
sudo systemctl restart apache2bashDespués del reinicio, podrás probar la aplicación accediendo a la URL desde un navegador. Deberías ver el mensaje generado por el script de prueba:
Hello World! Node.js is working correctly.
