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étodo | Versión | Ámbito | Cuándo usarlo |
|---|---|---|---|
| Repositorio de NodeSource | La rama LTS que elijas (24.x) | Todo el sistema, actualizaciones con apt | Servidores de producción con una única versión |
| nvm | Cualquier versión | Solo el usuario que lo instala | Desarrollo, CI o proyectos que exigen versiones distintas |
Repositorio de Ubuntu (apt install nodejs) | 18.x | Todo el sistema | No 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.
NotaNo mezcles nvm con la instalación de NodeSource en el mismo usuario si no es necesario: el
nodeque se ejecute dependerá del orden delPATH.
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.
NotaSi usas nvm puedes saltarte este paso: nvm ya instala los paquetes globales en tu directorio personal.
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.
