---
title: "Instalar Nexterm con Docker: gestión autoalojada de SSH, VNC y RDP"
description: "Instala Nexterm con Docker Compose para gestionar SSH, VNC y RDP autoalojados. Guía paso a paso con proxy inverso Traefik, configuración del cifrado y consejos de seguridad."
date: 2024-09-05
categories: ["self-hosting"]
tags: ["nexterm","ssh","docker"]
---

import Button from "@components/widgets/Button.astro";
import { Picture } from "astro:assets";
import imag1 from "@assets/images/24/09/nexterm-interface.png";
import imag2 from "@assets/images/24/09/nexterm-add-server.png";
import Notice from "@components/widgets/Notice.astro";
import ListCheck from "@components/widgets/ListCheck.astro";
import Tabs from "@components/widgets/Tabs.astro";
import Tab from "@components/widgets/Tab.astro";
import Accordion from "@components/widgets/Accordion.astro";

import YouTubeEmbed from "@components/widgets/YouTubeEmbed.astro";

[Nexterm](https://nexterm.dev/) es una plataforma de gestión de servidores autoalojada y de código abierto para conexiones SSH, VNC, RDP, Telnet, SFTP y FTP. En la v1.2.2-BETA, con casi 5.000 estrellas en GitHub y licencia MIT, ya ha superado la fase experimental. Es apta para producción, siempre que hagas copias de seguridad de tus datos y fijes las versiones. Esta guía cubre una instalación completa de Nexterm con Docker usando Docker Compose con proxy inverso Traefik, la configuración obligatoria de la clave de cifrado y el endurecimiento de seguridad que necesitas antes de abrirla a la red.

## ¿Qué es Nexterm?

Nexterm es un panel de gestión de servidores basado en web que consolida SSH, VNC, RDP, Telnet, SFTP y FTP en una sola interfaz. Lo despliegas como un contenedor Docker, apuntas el navegador hacia él y gestionas todas tus conexiones remotas desde un solo lugar. Soporta OIDC SSO, LDAP, passkeys, 2FA, registro de auditoría, grabaciones de sesión y permisos basados en roles (añadidos en v1.2.2). Hay clientes de escritorio para Windows, macOS y Linux, una app móvil para Android y iOS, y un cliente CLI (`nt`) para los puristas del terminal.



<YouTubeEmbed
  url="https://www.youtube.com/embed/O4NmTxLXfrE"
  label="Instalar Nexterm con Docker"
/>
Si estás comparando [paneles de gestión de servidores autoalojados](https://www.bitdoze.com/best-self-hosted-panels/), Nexterm cubre más protocolos que la mayoría de las alternativas con una huella de recursos menor. También vale la pena mirar [herramientas alternativas de gestión SSH como Termix](/es/termix-autoalojado/) si quieres algo con una arquitectura diferente.

## Características de Nexterm

<ListCheck>
<ul>
<li>**Multiprotocolo:** SSH, VNC, RDP, Telnet, SFTP, FTP, todo desde un panel</li>
<li>**Seguridad:** 2FA (TOTP), passkeys, OIDC SSO, LDAP, cifrado en reposo del lado del servidor, registro de auditoría, permisos basados en roles, claves API</li>
<li>**Gestión de sesiones:** vista dividida, grabaciones de sesión, sesión en ventana emergente/compartida en vivo, túneles de puertos, jump hosts</li>
<li>**Snippets y scripts dinámicos:** comandos rápidos, scripts, importación de config SSH (implementada por completo desde v1.0.3)</li>
<li>**Apps de escritorio y móviles:** conector de escritorio (Win/Mac/Linux), app móvil (Android/iOS) para VNC/RDP/SFTP, cliente CLI (`nt`)</li>
<li>**Monitorización del servidor e IA:** monitorización de servidores integrada (v1.0.4+), integración de IA para asistencia en el terminal</li>
<li>**Infraestructura:** organizaciones, etiquetas, búsqueda difusa, internacionalización, temas personalizables, Nerd Fonts, gestión de Proxmox LXC/QEMU</li>
</ul>
</ListCheck>

Si estás montando un home lab, consulta [otros contenedores Docker autoalojados para tu servidor casero](/es/contenedores-docker-servidor-casa/) para más ideas.

## Cómo instalar Nexterm con Docker Compose

Esto usa la imagen oficial `nexterm/aio` (todo en uno: servidor + cliente web + motor). La antigua imagen `germannewsmaker/nexterm` está obsoleta. Si migras desde ella, consulta la sección de resolución de problemas más abajo.

### Requisitos previos

<ListCheck>
<ul>
<li>**VPS o servidor casero:** Linux (Ubuntu 22.04+ / Debian 12+). Mínimo 1 vCPU, 512 MB de RAM, 2 GB de disco. Usa [Hetzner](https://go.bitdoze.com/hetzner), [Hostinger](https://go.bitdoze.com/hostinger-vps) o [Vultr](https://go.bitdoze.com/vultr) para un VPS barato, o un [mini PC como servidor casero](/es/mejor-mini-pc-servidor-casa/)</li>
<li>**Docker y Docker Compose** instalados. Usa [Dockge para gestionar tus stacks de Docker Compose](/es/instalar-dockge/) si quieres una interfaz web para tus archivos compose</li>
<li>**Traefik (opcional pero recomendado):** para proxy inverso HTTPS con certificados Let's Encrypt automáticos. [Configura Traefik como proxy inverso en Docker](/es/traefik-proxy-docker/) o configura [Traefik con un certificado wildcard gratuito de Let's Encrypt](/es/traefik-certificado-wildcard/)</li>
<li>**openssl:** necesario para generar la clave de cifrado. Preinstalado en la mayoría de las distros Linux</li>
</ul>
</ListCheck>

_Los precios de los VPS subieron en todos los proveedores en 2026 — si estás reconsiderando una máquina alquilada, mira [qué cambió y cuándo gana un mini PC](/es/subidas-precios-vps/)._

<Notice type="info" title="Consumo ligero de recursos">
Nexterm es ligero. Un VPS de 1 vCPU / 512 MB es suficiente para gestionar docenas de conexiones. La imagen AIO ocupa ~95 MB comprimida. No necesitas 8 CPU y 16 GB de RAM. Eso era para otra cosa completamente distinta.
</Notice>

### Paso 1: Genera tu clave de cifrado

Desde la v1.0.3, Nexterm requiere cifrado del lado del servidor para las contraseñas almacenadas y las claves privadas SSH. La variable de entorno `ENCRYPTION_KEY` es **obligatoria**. El contenedor no arrancará sin ella.

```bash
openssl rand -hex 32
```

Salida de ejemplo:

```
a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2
```

Copia esta clave. La pegarás en el archivo docker-compose.

<Notice type="warning" title="Guarda esta clave en un lugar seguro">
Si pierdes la ENCRYPTION_KEY, todas las credenciales almacenadas serán **irrecuperables**. Guárdala en un gestor de contraseñas. Nunca la subas a git. Los secrets de Docker también son compatibles a través de `/run/secrets/encryption_key`. Mira cómo [gestionar secrets de forma segura con Docker Compose](/es/secretos-docker-compose/).
</Notice>

### Paso 2: Configuración de Docker Compose

Crea un archivo `docker-compose.yml`:

```yaml
services:
  nexterm:
    image: nexterm/aio:latest
    environment:
      ENCRYPTION_KEY: "your-generated-key-here"
    volumes:
      - ./nexterm:/app/data
    networks:
      - traefik-net
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nexterm.rule=Host(`nexterm.domain.com`)"
      - "traefik.http.routers.nexterm.entrypoints=websecure"
      - "traefik.http.routers.nexterm.tls.certresolver=letsencrypt"
      - "traefik.http.services.nexterm.loadbalancer.server.port=6989"

networks:
  traefik-net:
    external: true
```

Sustituye `nexterm.domain.com` por tu dominio real. La red `traefik-net` debe existir previamente (créala con `docker network create traefik-net` si es necesario).

La imagen es `nexterm/aio:latest`, el paquete todo en uno (servidor + cliente web + motor en C) que reemplaza al obsoleto `germannewsmaker/nexterm`. Pega la clave del Paso 1 en la variable `ENCRYPTION_KEY`. El volumen `./nexterm:/app/data` persiste toda la configuración, las conexiones y las credenciales. Las etiquetas de Traefik enrutan el tráfico de `nexterm.domain.com` a través de Traefik con TLS automático de Let's Encrypt en el puerto 6989.

<Notice type="info" title="Imágenes Docker">
Nexterm distribuye tres imágenes: `nexterm/aio` (todo en uno, recomendada para la mayoría de usuarios), `nexterm/server` (solo servidor + cliente web, necesita un motor externo) y `nexterm/engine` (solo el motor, el servicio de conexiones en C). Para el 95 % de las instalaciones, `aio` es la opción correcta. Consulta la [documentación oficial de instalación](https://docs.nexterm.dev/installation).
</Notice>

### Paso 3: Arranca el contenedor

```bash
docker compose up -d
```

Verifica que está en ejecución:

```bash
docker compose ps
docker compose logs nexterm
```

<Notice type="success" title="Verifica el arranque">
Ejecuta `docker compose logs nexterm` y busca el mensaje de arranque que confirma que el servidor escucha en el puerto 6989. Si usas Traefik, revisa el panel de Traefik. La ruta `nexterm` debería aparecer bajo tus entrypoints. `docker compose ps` debería mostrar el estado "Up".
</Notice>

Si el contenedor se cierra inmediatamente, la causa más común es una `ENCRYPTION_KEY` ausente o mal formada. Consulta la sección de resolución de problemas más abajo.

### Paso 4: Accede a Nexterm y añade tus primeras conexiones

Abre `https://nexterm.domain.com` en tu navegador (o `http://ip-de-tu-servidor:6989` si omitiste el proxy inverso). El primer usuario que crees será el administrador. Tras iniciar sesión, añade conexiones:

1. Haz clic en **Servers** en la barra lateral
2. Crea una carpeta (p. ej., "Producción" o "Home Lab")
3. Haz clic en el botón **+** para añadir una nueva conexión
4. Selecciona el protocolo (SSH, RDP, VNC, etc.), introduce el host, el puerto y las credenciales
5. Guarda y haz doble clic para conectar

<Picture formats={["webp"]} fallbackFormat="webp" src={imag1} alt="Panel de la interfaz web de Nexterm mostrando las conexiones de servidores" />
<Picture formats={["webp"]} fallbackFormat="webp" src={imag2} alt="Nexterm añadiendo una nueva conexión de servidor SSH" />

## Red host vs red bridge: ¿cuál deberías usar?

La documentación oficial de Nexterm recomienda `network_mode: host` porque habilita Wake-on-LAN y la conectividad localhost con el host Docker. Pero la red host implica que las etiquetas del proveedor Docker de Traefik **no funcionarán**. Necesitarías un proveedor de archivos o un proxy inverso diferente.

Para la mayoría de los lectores de bitdoze con un stack Traefik existente, **la red bridge (la configuración anterior) es la opción práctica**. Usa la red host solo si necesitas Wake-on-LAN o acceso a servidores en localhost y no usas el proveedor Docker de Traefik.

<Tabs>
<Tab name="Red bridge + Traefik">
**Lo que obtienes:** funciona con tu proveedor Docker de Traefik existente. TLS automático mediante etiquetas de Let's Encrypt. Integración limpia con `traefik-net`.

**Lo que pierdes:** sin soporte de Wake-on-LAN. Sin conectividad directa a `localhost` del host Docker desde dentro del contenedor. Los servidores de destino deben ser accesibles desde la red bridge de Docker.

Esta es la configuración del Paso 2 anterior.
</Tab>
<Tab name="Red host">
**Lo que obtienes:** acceso completo a la pila de red del host. Wake-on-LAN funciona. Conecta directamente a servicios `localhost` del host.

**Lo que pierdes:** las etiquetas Docker de Traefik no funcionan. Tendrás que configurar el proxy inverso mediante un proveedor de archivos, o usar Nginx/Caddy con configuración estática. El puerto 6989 queda expuesto en todas las interfaces del host por defecto.

```yaml
services:
  nexterm:
    image: nexterm/aio:latest
    environment:
      ENCRYPTION_KEY: "your-generated-key-here"
    network_mode: host
    restart: always
    volumes:
      - ./nexterm:/app/data
```

Si usas la red host en un VPS público, restringe el puerto 6989 con UFW/iptables o ponlo detrás de una VPN.
</Tab>
</Tabs>

<Notice type="warning" title="Usuarios de Cloudflare Tunnel">
Si ejecutas Nexterm detrás de un Cloudflare Tunnel, asegúrate de que el proxy de WebSocket esté habilitado. Nexterm usa WebSocket para las sesiones de terminal. Sin él, obtendrás una conexión que se cae inmediatamente. Consulta la [documentación oficial del proxy inverso](https://docs.nexterm.dev/reverse-proxy).
</Notice>

## Endurecimiento y notas de producción

<Notice type="warning" title="Software en beta">
Nexterm todavía está en beta (v1.2.x). Haz siempre una copia de seguridad de tu directorio de datos antes de actualizar. Pueden producirse cambios que rompan la compatibilidad entre versiones.
</Notice>

**Haz copias de seguridad antes de actualizar.** Nexterm está en beta. Puede haber pérdida de datos entre saltos de versión importantes. Haz siempre una copia de seguridad del directorio de datos `./nexterm` antes de descargar una nueva imagen:

```bash
docker compose down
cp -r ./nexterm ./nexterm-backup-$(date +%Y%m%d)
docker compose pull
docker compose up -d
```

**Gestión de ENCRYPTION_KEY.** Guarda la clave en un gestor de contraseñas. Nunca la subas a git ni la pegues en foros públicos. Si la pierdes, todas las credenciales almacenadas serán irrecuperables. Los secrets de Docker son compatibles. Monta en `/run/secrets/encryption_key` en lugar de usar la variable de entorno. Aprende más sobre cómo [gestionar secrets de forma segura con Docker Compose](/es/secretos-docker-compose/).

**Cortafuegos.** Si usas el modo de red host en un VPS público, el puerto 6989 queda expuesto directamente en todas las interfaces. Usa UFW o iptables para restringir el acceso, o pon Nexterm detrás de un proxy inverso. Si usas Hetzner, lee cómo [securizar tu servidor Docker](/es/informe-seguridad-bsi-docker-ufw/). Para un endurecimiento más amplio del VPS, [securiza tu VPS con CrowdSec](/es/crowdsec-servidor-seguro/).

**Consumo de recursos.** Nexterm suele funcionar con menos de 200 MB de RAM. La imagen AIO ocupa ~95 MB comprimida. No necesita mucho. Un VPS pequeño maneja docenas de conexiones.

**Actualizaciones periódicas.** Revisa los [lanzamientos de GitHub](https://github.com/gnmyt/Nexterm/releases) periódicamente. Usa `nexterm/aio:latest` para actualizar automáticamente al hacer pull, o fija una versión específica como `nexterm/aio:1.2.2-BETA` para mayor estabilidad.

## Resolución de problemas comunes

<Accordion label="El contenedor no arranca (falta ENCRYPTION_KEY)" group="troubleshooting" expanded="true">
**Síntoma:** el contenedor se cierra inmediatamente después de `docker compose up -d`.

**Solución:** asegúrate de que `ENCRYPTION_KEY` esté definida en la sección `environment` de tu archivo docker-compose. Revisa los logs:

```bash
docker compose logs nexterm
```

Si ves errores relacionados con el cifrado, regenera la clave con `openssl rand -hex 32` y reinicia.

**Verificación:** `docker compose ps` debería mostrar el estado "Up" tras la corrección.
</Accordion>

<Accordion label="No se puede conectar por SSH desde Nexterm" group="troubleshooting">
**Síntoma:** tiempo de espera agotado o conexión rechazada al intentar SSH a un servidor de destino.

**Solución:** si usas la red bridge, verifica que el destino sea accesible desde el contenedor:

```bash
docker compose exec nexterm ping target-ip
```

Revisa las reglas del cortafuegos en el servidor de destino. Si el destino está en una red diferente, la red bridge de Docker podría no tener ruta hacia él.

**Verificación:** revisa los logs de Nexterm en busca de errores de conexión del motor.
</Accordion>

<Accordion label="RDP/VNC muestra una pantalla negra" group="troubleshooting">
**Síntoma:** conecta al servidor remoto pero muestra una pantalla negra.

**Solución:** para RDP, intenta ajustar el método de seguridad. Desde la v1.2.2, Nexterm soporta configuración de NLA y Kerberos. Para VNC, verifica que el servidor VNC esté en ejecución y aceptando conexiones en el destino. Algunos servidores VNC solo aceptan conexiones desde localhost por defecto.
</Accordion>

<Accordion label="Errores de WebSocket del proxy inverso" group="troubleshooting">
**Síntoma:** el terminal conecta pero se desconecta inmediatamente.

**Solución:** Nexterm requiere soporte de WebSocket. Si usas Nginx como proxy inverso, añade estas cabeceras:

```nginx
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
```

Para Cloudflare, habilita el proxy de WebSocket en el panel. Consulta la [documentación oficial del proxy inverso](https://docs.nexterm.dev/reverse-proxy).
</Accordion>

<Accordion label="Migración desde la antigua imagen germannewsmaker/nexterm" group="troubleshooting">
**Síntoma:** cambiar a `nexterm/aio:latest` falla o los datos parecen incompatibles.

**Solución:** primero haz una copia de seguridad de tu directorio de datos `./nexterm`. Cambia la imagen en docker-compose:

```yaml
# old (deprecated)
image: germannewsmaker/nexterm:1.0.1-OPEN-PREVIEW
# new
image: nexterm/aio:latest
```

Si el contenedor no arranca tras el cambio (problemas de migración del cifrado con datos anteriores a la 1.0.3), empieza de cero: borra el directorio `./nexterm` y vuelve a añadir tus conexiones manualmente. Las notas de la versión v1.2.1-BETA advierten que la migración desde versiones muy antiguas puede ser inestable.
</Accordion>

## Conclusión

Nexterm en la v1.2.2-BETA es una plataforma de gestión de servidores autoalojada capaz y ligera. La instalación de Nexterm con Docker mediante Docker Compose te da SSH, VNC, RDP, Telnet y SFTP desde un único panel web, con cifrado en reposo adecuado, soporte de 2FA/passkeys y grabación de sesiones. Funciona cómodamente en un VPS pequeño y se integra bien con Traefik para acceso HTTPS.

Si estás explorando el tema, consulta los [paneles de gestión de servidores autoalojados](https://www.bitdoze.com/best-self-hosted-panels/) para una comparación más amplia, o mira [herramientas alternativas de gestión SSH como Termix](/es/termix-autoalojado/) para otras ventajas e inconvenientes.

<Button text="Visita la documentación de Nexterm" link="https://docs.nexterm.dev" variant="solid" color="blue" size="md" icon="arrow-right" />