# 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](https://www.ionos.mx/digitalguide/servidores/know-how/que-es-el-open-source-o-codigo-abierto/) [Node.js](https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/introduccion-a-nodejs/) 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](https://pm2.keymetrics.io/ "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](https://www.ionos.mx/digitalguide/servidores/know-how/ubuntu-un-sistema-para-todos-basado-en-linux/)
- Un **nombre de dominio** funcional que apunte correctamente al servidor
- Un [servidor web Apache](https://www.ionos.mx/digitalguide/servidores/configuracion/instala-apache-en-tu-pc/) 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:

```bash
sudo apt update
sudo apt install curl -y
```

A 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:

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

Después, instala Node.js:

```bash
sudo apt install -y nodejs
```

Esto 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.

```bash
sudo apt install -y build-essential
```

## Creació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:

```bash
sudo mkdir /var/www/html/nodejs
```

A continuación, crea el archivo *hello.js* dentro de este directorio:

```bash
sudo nano /var/www/html/nodejs/hello.js
```

Después, añade el siguiente contenido de ejemplo al archivo:

```javascript
#!/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/');
```

Guarda el archivo, cierra el editor y hazlo ejecutable con el siguiente comando:

```bash
sudo chmod 755 hello.js
```

## Comprobar 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:

```bash
sudo ufw allow 8080/tcp
```

Este paso es especialmente importante si quieres acceder a tu servidor directamente a través de la [dirección IP](https://www.ionos.mx/digitalguide/servidores/know-how/direccion-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](https://www.ionos.mx/digitalguide/servidores/know-how/que-es-un-servidor-proxy/) se encargará de redirigir el tráfico.

## Instalar PM2

Utiliza `npm` para instalar PM2 con el siguiente comando:

```bash
sudo npm install -g pm2
```

A continuación, inicia el script de ejemplo `hello.js` con este comando:

```bash
sudo pm2 start hello.js
```

Como 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:

```bash
sudo pm2 startup systemd
sudo pm2 save
```

## 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:

```bash
sudo a2enmod proxy
sudo a2enmod proxy_http
```

Una vez completada la instalación, reinicia Apache para aplicar los cambios:

```bash
sudo systemctl restart apache2
```

A 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`

Nota 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:

```bash
sudo nano /etc/apache2/sites-available/example.com.conf
```

Dentro del archivo, desplázate hasta encontrar el bloque VirtualHost, que tendrá un aspecto similar a este:

```none
<VirtualHost *:80>
ServerName example.com
<Directory "/var/www/example.com/html">
AllowOverride All
</Directory>
</VirtualHost>
```

Añade las siguientes directivas dentro del bloque VirtualHost:

```none
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:

```none
<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](https://www.ionos.mx/digitalguide/servidores/configuracion/reiniciar-apache/) para aplicar todos los cambios:

```bash
sudo systemctl restart apache2
```

Después del reinicio, podrás probar la aplicación accediendo a la URL desde un [navegador](https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/que-es-un-navegador/). Deberías ver el mensaje generado por el script de prueba:

```none
Hello World! Node.js is working correctly.
```


This is a markdown version of: [https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/nodejs-para-una-pagina-web-con-apache-en-ubuntu/](https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/nodejs-para-una-pagina-web-con-apache-en-ubuntu/) for AI/LLM consumption.