Node.js es el entorno de ejecución de JavaScript que se usa para servidores web, APIs y herramientas de compilación de frontend, y npm es su gestor de paquetes. El paquete nodejs de los repositorios de Ubuntu 24.04 es la versión 18, que ya no recibe parches de seguridad, así que en este tutorial instalarás Node.js 24 LTS desde el repositorio oficial de NodeSource, que es la opción recomendada para servidores. También verás cómo usar nvm cuando necesitas varias versiones por usuario y cómo instalar paquetes globales sin sudo.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo.
  • Acceso a Internet saliente por HTTPS para descargar paquetes.

Elegir el método de instalación

MétodoVersiónÁmbitoCuándo usarlo
Repositorio de NodeSourceLa rama LTS que elijas (24.x)Todo el sistema, actualizaciones con aptServidores de producción con una única versión
nvmCualquier versiónSolo el usuario que lo instalaDesarrollo, CI o proyectos que exigen versiones distintas
Repositorio de Ubuntu (apt install nodejs)18.xTodo el sistemaNo recomendado: versión sin soporte

Las versiones LTS (números pares) reciben soporte durante unos 30 meses; las impares son de corta duración y no conviene usarlas en producción. Puedes consultar el calendario en la página de versiones de Node.js.

Los pasos 1 a 3 instalan Node.js con NodeSource. Si prefieres nvm, sigue la sección correspondiente más abajo.

Paso 1: Añadir el repositorio de NodeSource

Instala las herramientas necesarias para descargar y convertir la clave del repositorio:

sudo apt update
sudo apt install ca-certificates curl gnupg

Descarga la clave de firma de NodeSource en /etc/apt/keyrings:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

Añade el repositorio de la rama 24.x. Para usar otra rama LTS en el futuro, cambia node_24.x por la versión correspondiente:

echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_24.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

Actualiza el índice y comprueba que el paquete nodejs viene ahora de NodeSource:

sudo apt update
apt-cache policy nodejs
nodejs:
  Installed: (none)
  Candidate: 24.x.x-1nodesource1
  Version table:
     24.x.x-1nodesource1 500
        500 https://deb.nodesource.com/node_24.x nodistro/main amd64 Packages
     18.19.1+dfsg-6ubuntu5 500
        500 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages

El candidato debe ser la versión 24.x de deb.nodesource.com.

Paso 2: Instalar Node.js y npm

El paquete nodejs de NodeSource incluye npm y npx, así que no instales el paquete npm de Ubuntu por separado:

sudo apt install nodejs

Comprueba las versiones:

node -v
npm -v
v24.x.x
11.x.x

Algunos paquetes de npm incluyen módulos nativos en C/C++ que se compilan durante la instalación (por ejemplo bcrypt o sqlite3 cuando no hay binario precompilado). Instala el compilador y make para que no fallen:

sudo apt install build-essential

Las actualizaciones de la rama 24.x llegarán con el sudo apt upgrade habitual.

Paso 3: Probar Node.js con un servidor HTTP

Crea un directorio de prueba y un servidor mínimo que use solo módulos incluidos en Node.js:

mkdir ~/hola-node && cd ~/hola-node
nano server.js
const http = require('node:http');

const port = process.env.PORT || 3000;

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
  res.end(`Hola desde Node.js ${process.version}\n`);
}).listen(port, '127.0.0.1', () => {
  console.log(`Escuchando en http://127.0.0.1:${port}`);
});

Arráncalo:

node server.js
Escuchando en http://127.0.0.1:3000

Desde otra sesión SSH, haz una petición:

curl http://127.0.0.1:3000
Hola desde Node.js v24.x.x

Detén el servidor con Ctrl+C. Para dejar una aplicación funcionando de forma permanente necesitas un gestor de procesos como PM2 o un servicio de systemd; node server.js en una sesión SSH se detiene al cerrarla.

Alternativa: instalar Node.js con nvm

nvm (Node Version Manager) instala Node.js dentro del directorio personal del usuario y permite cambiar de versión por proyecto. No requiere sudo, pero cada usuario tiene su propia instalación, así que los servicios que se ejecuten con otro usuario no la verán.

Descarga el script de instalación (consulta la última versión en las releases del repositorio nvm-sh/nvm en GitHub) y revísalo antes de ejecutarlo:

curl -fsSL -o install-nvm.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh
less install-nvm.sh
bash install-nvm.sh

El script clona nvm en ~/.nvm y añade las líneas de carga a ~/.bashrc. Cárgalas en la sesión actual:

source ~/.bashrc
nvm --version
0.40.3

Instala la última LTS y déjala como versión por defecto:

nvm install --lts
nvm alias default 'lts/*'
node -v
v24.x.x

Para fijar la versión de un proyecto, crea un archivo .nvmrc en su raíz. Cualquiera que clone el repositorio podrá ejecutar nvm use para cambiar a esa versión (e nvm install si no la tiene):

cd ~/mi-proyecto
node -v > .nvmrc
nvm use
Found '/home/your_user/mi-proyecto/.nvmrc' with version <v24.x.x>
Now using node v24.x.x (npm v11.x.x)

Otros comandos útiles:

nvm ls
nvm install 22
nvm use 22

Paso 4: Instalar paquetes globales sin sudo

Con la instalación de NodeSource, npm install -g escribe en /usr/lib/node_modules, que pertenece a root. Ejecutar npm con sudo hace que los scripts de instalación de los paquetes se ejecuten como root. Es más seguro darle a tu usuario un prefijo propio para los paquetes globales.

Configura el prefijo en tu directorio personal:

mkdir -p ~/.npm-global
npm config set prefix "$HOME/.npm-global"

Añade su directorio bin al PATH:

echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Instala un paquete global de prueba sin sudo:

npm install -g npm-check-updates
which ncu
/home/your_user/.npm-global/bin/ncu

Si prefieres no instalar herramientas globales, npx ejecuta un paquete descargándolo en caché sin instalarlo:

npx npm-check-updates --version

Paso 5: Instalar dependencias de un proyecto en producción

En un proyecto, las dependencias se declaran en package.json y sus versiones exactas quedan fijadas en package-lock.json. Ese archivo debe estar en el control de versiones.

En el servidor de producción usa npm ci en lugar de npm install: instala exactamente lo que dice package-lock.json, borra node_modules antes de empezar y falla si el lock no coincide con package.json. Con --omit=dev omite las dependencias de desarrollo:

cd ~/mi-proyecto
npm ci --omit=dev
added 64 packages, and audited 65 packages in 3s

found 0 vulnerabilities

Revisa periódicamente las vulnerabilidades conocidas en las dependencias:

npm audit --omit=dev

Si hay avisos, npm audit fix aplica las actualizaciones compatibles con los rangos de package.json. Evita npm audit fix --force en producción: puede instalar versiones mayores con cambios incompatibles.

Muchas librerías cambian su comportamiento según la variable NODE_ENV. Defínela en el entorno del servicio que arranque la aplicación (unidad de systemd o archivo ecosystem de PM2), no en tu ~/.bashrc:

Environment=NODE_ENV=production

Solución de problemas

node -v muestra v18 tras instalar desde NodeSource. El paquete se instaló antes de añadir el repositorio. Comprueba apt-cache policy nodejs y reinstala con sudo apt install nodejs. Si tienes nvm, which node te dirá cuál se está usando.

"EACCES: permission denied" al ejecutar npm install -g. npm intenta escribir en /usr/lib/node_modules. Configura el prefijo del paso 4 en lugar de usar sudo o cambiar los permisos de directorios del sistema.

"gyp ERR! build error" al instalar dependencias. Falta el compilador para un módulo nativo. Instala build-essential (paso 2) y vuelve a ejecutar npm ci.

nvm: command not found en una nueva sesión. Las líneas de carga no están en el archivo que lee tu shell. Comprueba que ~/.bashrc contiene export NVM_DIR="$HOME/.nvm" y las dos líneas que lo cargan, y abre una sesión nueva.

Conclusión

Tienes Node.js 24 LTS y npm instalados en Ubuntu 24.04 desde el repositorio de NodeSource, con actualizaciones por apt, o con nvm si necesitas varias versiones. También has configurado los paquetes globales sin sudo y sabes instalar dependencias de forma reproducible con npm ci.

Como siguientes pasos, despliega tu aplicación con PM2 para que arranque con el sistema y se reinicie si falla, colócala detrás de Nginx como proxy inverso y añade HTTPS con Certbot.