Logotipo de Bitdoze

Termix autoalojado: gestor SSH con Docker y Dokploy

Guía de Termix autoalojado: instala el gestor SSH y hub de servidores de código abierto con Docker Compose o Dokploy, añade escritorio remoto y protege tu despliegue.

Dragos

Actualizado Publicado 80 min de lectura

Interfaz web del gestor SSH autoalojado Termix con sesiones de terminal y estadísticas del servidor

Termix autoalojado pone en tu propio servidor un gestor SSH en el navegador, un gestor de archivos, un panel de estadísticas y una pasarela de escritorio remoto. Es un proyecto con licencia Apache-2.0 y una alternativa gratuita a Termius: sin cuentas externas y sin plan de pago. Desde finales de 2025 ha pasado de unas 8.500 a más de 15.000 estrellas en GitHub, y las versiones 2.x lo convirtieron de una app de terminal en un hub de servidores completo. Esta guía cubre toda la configuración: desplegar con Dokploy o Docker Compose, activar el escritorio remoto RDP/VNC y blindar el despliegue.

¿Qué es Termix?

Termix es una plataforma autoalojada de gestión de SSH y escritorios remotos. Una única interfaz web cubre sesiones de terminal, túneles SSH, gestión de archivos, estadísticas de servidor, contenedores Docker y RDP/VNC/Telnet en el navegador. El proyecto tiene licencia Apache 2.0, se mantiene con donaciones y el README lo dice claramente: es una alternativa autoalojada a Termius que seguirá siendo gratuita para siempre.

El vídeo muestra la interfaz 1.x. Termix rediseñó la UI (barra lateral, gestor de hosts, navegación) en la 2.3.0, así que los menús se verán distintos en las versiones actuales.

Novedades desde finales de 2025

Si la última vez que miraste Termix era una app de terminal 1.x, han salido muchas cosas desde entonces:

  • Escritorio remoto (2.0.0): RDP, VNC y Telnet en el navegador, gracias a guacd de Guacamole
  • App de escritorio para Windows, macOS y Linux, además de apps para Android e iOS
  • Gestión real de Docker (1.10.0) con soporte de Podman (2.5.0), no solo una lista de contenedores
  • Roles RBAC, sesiones compartidas y claves de API
  • Soporte de PostgreSQL y MySQL (2.7.0) junto al SQLite predeterminado
  • Automatizaciones, comandos para toda la flota y alertas (ntfy, Discord, webhook)
  • Termix AI (2.7.0), opcional y desactivada por defecto
  • La telemetría ahora viene activada por defecto (2.6.0). Cómo desactivarla se explica en la sección de seguridad

¿Desplegaste Termix antes de mediados de 2026?

Revisa la sección de seguridad antes que nada. La versión mínima segura ahora es la 2.5.1 o superior; varios CVE críticos se corrigieron en los parches 2.3.2 y 2.5.1.

Funciones principales de Termix

La lista de funciones que importan en el día a día:

  • Terminal SSH con hasta 6 paneles divididos, diseños persistentes y espacios de trabajo
  • Túneles SSH con modos cliente, remoto y puente, reconexión automática y comprobaciones de estado
  • Escritorio remoto: RDP, VNC y Telnet en el navegador vía guacd
  • Soporte de jump host (bastión) para servidores detrás de redes privadas
  • Grabación de sesiones de terminal, RDP y VNC, con registros descargables en texto plano
  • Gestor y editor de archivos remoto con resaltado de sintaxis y un portapapeles entre hosts
  • Gestión de Docker y Podman: iniciar/detener/pausar/eliminar, estadísticas y acceso a shell
  • Automatizaciones, comandos y distribución de archivos para toda la flota, y alertas de métricas
  • Estadísticas de CPU, memoria y disco en tiempo real con gráficos de historial
  • SSO con OIDC, LDAP, GitHub y Google, además de passkeys WebAuthn y 2FA TOTP
  • Claves de API, roles RBAC y sesiones en vivo compartibles
  • Conexiones serie y descubrimiento/importación de Proxmox
  • App web más apps de escritorio (Windows/macOS/Linux) y móviles (Android/iOS), en unos 30 idiomas

Sin cuentas ni suscripciones

Termix no requiere ninguna cuenta externa y no tiene plan de pago. Una salvedad para quienes cuidan su privacidad: desde la 2.6.0 envía telemetría por defecto (con opción de desactivarla). Cómo apagarla está en la sección de seguridad.

Terminal SSH, túneles y pantalla dividida

La terminal es el núcleo de la app. Pestañas, hasta seis paneles divididos, sesiones que sobreviven a una recarga de página o a un reinicio del contenedor, y keepalive por host. Desde la 2.6.0 puedes guardar diseños divididos, y la 2.7.0 añadió espacios de trabajo para restaurar un conjunto completo de sesiones de una vez. El registro de sesiones de terminal viene integrado por si necesitas una pista de auditoría de lo que se escribió.

Los túneles también maduraron. Además de los túneles locales de siempre con reconexión automática y comprobaciones de estado, la 2.2.0 añadió túneles remotos y en modo puente con presets, y la app de escritorio tiene una pestaña dedicada de port forwarding desde la 2.8.0. Esto cubre la mayoría de los casos en los que antes recurrirías a un archivo de configuración SSH lleno de flags -L y -R.

Escritorio remoto: RDP, VNC y Telnet en el navegador

Esta es la función estrella de la 2.0.0. Termix usa el demonio guacd de Apache Guacamole para traer sesiones RDP de Windows, pantallas VNC de macOS/Linux e incluso equipos Telnet a la misma interfaz web que tus terminales SSH. Se activa por host y necesita el contenedor sidecar guacd (o un guacd existente al que apuntes con GUACD_URL). La configuración completa está en la sección de escritorio remoto, más abajo.

Gestión de Docker y Podman

Desde la 1.10.0, la vista de Docker es gestión real de contenedores: iniciar, detener, pausar, eliminar, estadísticas en vivo y una shell dentro del contenedor. La 2.2.0 añadió un modo de solo lectura para usuarios restringidos, y la 2.5.0 añadió soporte de Podman. El README es honesto sobre el alcance: «no pretende sustituir a Portainer ni a Dockge». Para cualquier cosa más allá de operaciones rápidas, yo sigo usando Dockge, un gestor autoalojado de stacks Compose. La vista Docker de Termix sirve para «qué está corriendo y por qué falla», no para editar stacks.

Automatizaciones, flotas y alertas

Aquí es donde el discurso de «hub de servidores» se hizo realidad. Las automatizaciones (2.7.0) encadenan disparadores y pasos: umbrales de métricas, eventos de host arriba/abajo, programaciones o webhooks pueden ejecutar comandos y enviar notificaciones por ntfy, Discord o webhooks genéricos. Las flotas ejecutan un comando, un envío de archivos, una actualización de paquetes o una consulta de inventario en muchos hosts a la vez. Las alertas llegaron en la 2.5.0. Para un operador en solitario con una docena de servidores, esto sustituye a un montón de bucles for en bash.

Un párrafo sobre Termix AI, porque los autoalojadores lo preguntarán: está desactivada por defecto tanto a nivel de administrador como de usuario, es de solo propuesta (sugiere comandos y solo los ejecuta tras tu aprobación, usando los permisos de tu cuenta), no tiene acceso a credenciales, claves ni ajustes, y elimina los secretos antes de enviar nada al proveedor. Traes tu propia clave de API, y Ollama funciona para una configuración totalmente local.

Recorrido por la app

Un repaso rápido de las zonas principales que usarás a diario. Las capturas muestran la interfaz 1.x, rediseñada en Termix 2.3.0; el flujo de trabajo es el mismo, la disposición no.

Espacio de trabajo de la terminal

Terminal de Termix en el navegador con sesiones SSH divididas en pestañas

La captura muestra la interfaz 1.x, rediseñada en Termix 2.3.0.

La terminal del navegador admite pestañas y hasta seis paneles divididos. Haz clic en el icono <|> de una pestaña (junto al botón de cerrar) para abrir una pantalla dividida y la barra lateral de herramientas SSH de esa sesión.

Herramientas, snippets e historial de comandos

Barra lateral de herramientas de Termix con utilidades SSH, snippets e historial de comandos

La captura muestra la interfaz 1.x, rediseñada en Termix 2.3.0.

Haz clic en el icono del martillo arriba a la derecha para abrir la barra lateral de herramientas. Aquí encontrarás las herramientas SSH, el historial de comandos, los snippets y las ayudas de pantalla dividida.

Añadir y gestionar hosts

Gestor de hosts de Termix para añadir hosts SSH, etiquetas y jump hosts

La captura muestra la interfaz 1.x, rediseñada en Termix 2.3.0.

Abre Host Manager para añadir hosts SSH, definir etiquetas y carpetas, y activar funciones por host: terminal, gestor de archivos, estadísticas del servidor, túneles, escritorio remoto. También puedes configurar un Jump Host aquí para llegar a servidores detrás de una red privada.

Para desplegar credenciales, añade una clave en Add Credential, vuelve a Credential Viewer y haz clic en la flecha verde de la credencial para seguir los pasos de despliegue. Si el destino rechaza la clave con «Too many authentication failures», normalmente es porque el servidor está ahogado en claves ofrecidas; aquí tienes cómo solucionar el error SSH “Too many authentication failures”.

Si piensas usar OIDC y el primer inicio de sesión se rechaza, crea primero la cuenta de administrador local y después conecta tu proveedor de identidad en los ajustes de administración. La versión 2.3.0 añadió aprovisionamiento automático de OIDC, pero el camino de menor resistencia es local primero.

Detalles del servidor y túneles

Detalles del servidor en Termix con estadísticas de CPU, memoria, disco y estado de túneles

La captura muestra la interfaz 1.x, rediseñada en Termix 2.3.0.

Tras conectar a un host desde la barra lateral, abre Server Details para ver CPU, memoria, disco, lista de procesos, servicios, cron jobs y estado de túneles. Las estadísticas y los túneles solo aparecen si están activados para ese host en Host Manager. Son instantáneas a nivel de host, no un stack de monitorización: para historial, alertas y paneles multiservidor, combina Termix con Beszel y Uptime Kuma para monitorización dedicada de servidores.

Gestor de archivos y editor

Gestor de archivos de Termix editando archivos remotos de Linux en el navegador

La captura muestra la interfaz 1.x, rediseñada en Termix 2.3.0.

El gestor de archivos navega y edita archivos en hosts Linux directamente desde la interfaz: subir, descargar, comprimir, reproducir multimedia y, desde la 2.7.0, una papelera. Un portapapeles de archivos entre hosts (2.5.0) y las transferencias servidor a servidor (2.8.0) te ahorran viajes de ida y vuelta con scp. Activa File Manager en el host y ábrelo desde la barra lateral tras conectar.

Ajustes de administración e identidad

Los administradores abren Admin Settings desde su nombre de usuario abajo a la izquierda. Aquí es donde configuras:

  • SSO (OIDC, LDAP, GitHub, Google) y reglas de registro
  • Exportación/Importación en la pestaña Database
  • Generación de certificados SSL, si quieres que Termix sirva su propio TLS
  • El registro de auditoría (2.4.0+) y el interruptor de telemetría (2.6.0+)

Acceso a túneles SSH

Si un host tiene Terminal activado, haz clic en el icono >_ de la barra lateral para abrir una sesión. Los túneles configurados muestran su estado en vivo en Server Details.

Paleta de comandos

Pulsa dos veces Shift izquierdo para abrir la paleta de comandos y navegar rápido. Ese atajo sigue documentado en el README, pero conviene comprobarlo en tu versión, ya que el rediseño de la UI en la 2.3.0 movió las cosas de sitio.

Termix frente a un stack de herramientas

El planteamiento honesto: Termix sustituye a la colección de herramientas pequeñas del día a día, no a las especializadas.

Tarea Stack típico Termix
Acceso SSH App de terminal Terminal web integrada, hasta 6 paneles
Edición de archivos SFTP + editor Gestor de archivos y editor integrados
Estadísticas del servidor Monitor aparte Estadísticas integradas con gráficos de historial
Túneles Herramienta CLI o GUI Túneles integrados con reconexión
Control de Docker Portainer o CLI Gestión real de contenedores + Podman (no sustituye a Portainer/Dockge)
Escritorio remoto Apache Guacamole o jump box + cliente VNC RDP/VNC/Telnet integrado en el navegador
Comandos para la flota Ansible o bucles for en bash Flotas y automatizaciones integradas

Dónde encaja entre los mejores paneles de servidor autoalojados: paneles como CasaOS o Cosmos gestionan el servidor en sí; Termix gestiona los servidores a los que te conectas. Usar ambos es normal, no redundante.

Acceso a redes privadas: jump hosts, Tailscale y Cloudflare Tunnel

Topología de red privada de Termix: rutas de jump host, malla Tailscale y Cloudflare Tunnel hacia un home lab

Si Termix corre en un VPS público pero las máquinas interesantes están en un home lab, tienes tres caminos sólidos:

  1. Jump host: configura un bastión en Host Manager y deja que Termix salte a través de él. El bastión es el único host que expones deliberadamente.
  2. VPN de malla: pon Termix y tus nodos de casa en la misma red overlay. Ahora es nativo: la autenticación Tailscale SSH llegó en la 2.4.0, la integración de hosts Tailscale/WireGuard en la 2.5.0, y la 2.7.0 añadió un endpoint Headscale personalizado, así que puedes autoalojar tu propio servidor de control de Tailscale con Headscale y apuntar Termix hacia él.
  3. Cloudflare Tunnel: la 2.3.0 añadió SSH sobre Cloudflare Tunnel. cloudflared solo hace conexiones salientes, así que el firewall de casa sigue cerrado.

Una regla operativa que vale la pena robar de la documentación del propio proyecto: ejecuta Termix fuera de la red que gestiona. Si tu plano de gestión vive dentro del lab y el lab se cae, pierdes las herramientas que necesitas para arreglarlo.

Para un nodo casero siempre encendido, una máquina de bajo consumo es la herramienta adecuada; un mini PC N150 consume en reposo 5-8 W en el enchufe, una miseria frente a un sobremesa viejo. Comparé las opciones actuales en la guía de mini PC para servidor casero.

Qué necesitas antes de desplegar

La checklist de «lo pongo en marcha esta noche»:

  • Un VPS Linux x86_64 o servidor casero con Docker y Compose v2 (o una instancia de Dokploy ya montada)
  • Un dominio con un registro DNS apuntando a tu servidor, si quieres HTTPS mediante un reverse proxy o Dokploy
  • Puertos 8080 (interno) y 443 (público) accesibles en tu ruta de red
  • Acceso por clave SSH a los hosts que piensas gestionar
  • Una decisión sobre el escritorio remoto: añade un contenedor guacd y aproximadamente 1 núcleo + 1 GB de RAM

Requisitos y dimensionamiento de Termix

Los benchmarks oficiales (documentación de Termix, probados en la v2.7.0) hacen de este uno de los servicios autoalojados más baratos de justificar:

Recurso Cifras oficiales
RAM en reposo ~118 MB
Flotas pequeñas 1 núcleo / 1 GB de RAM cubre hasta 100 hosts
Escritorio remoto Añade ~1 núcleo / 1 GB para el sidecar guacd
Disco ~1 KB por host
Por host monitorizado ~55 KB de RAM; historial de métricas ~216 KB/host/día a intervalo de 30 s
Retención de métricas 7 días por defecto, ~150 MB con 100 hosts
Techo práctico ~20.000 hosts monitorizados (ajústalo con METRICS_POLL_CONCURRENCY)

Traducción: el nivel de VPS más pequeño de cualquier proveedor serio es suficiente, lo que sitúa esto en el rango de pocos euros/dólares al mes. Los benchmarks no incluyen carga de escritorio remoto, así que si planeas sesiones RDP largas, usa la fila de dimensionamiento de guacd. Si estás comparando, los planes más baratos de Hetzner Cloud son una buena referencia para latencia en la UE, o Vultr si necesitas presencia global.

Los precios de los VPS subieron en 2026 en todos los proveedores — si estás replanteándote un servidor alquilado, mira qué cambió y cuándo gana un mini PC.

Prueba Hetzner Cloud ahora Prueba el VPS de Hostinger

Esta es la arquitectura objetivo antes de desplegar:

Arquitectura de despliegue de Termix: del navegador al reverse proxy y a los contenedores Termix y guacd con destinos SSH y RDP/VNC

Desplegar Termix con Dokploy

Si ya usas Dokploy, este es el camino más rápido: HTTPS automático, la red dokploy-network ya cableada y redespliegue con un clic. Si aún no tienes Dokploy, empieza por la guía de instalación de Dokploy.

Paso 1: Crear el servicio

  1. Abre tu proyecto de Dokploy
  2. Haz clic en Add Service y elige Compose
  3. Llámalo termix

Paso 2: Pegar el archivo compose

El recorrido completo por los tipos de servicio está en cómo desplegar una app de Docker Compose en Dokploy. Usa este compose, que fija la versión y añade el sidecar guacd:

yaml
services:
  termix:
    image: ghcr.io/lukegus/termix:2.8.0
    networks:
      - dokploy-network
    restart: unless-stopped
    environment:
      - PORT=8080
      - ENABLE_TELEMETRY=false   # optional, locks telemetry off
    volumes:
      - termix-data:/app/data
    depends_on:
      - guacd

  guacd:
    image: guacamole/guacd:1.6.0
    restart: unless-stopped
    networks:
      - dokploy-network
    # no ports: keep 4822 internal

networks:
  dokploy-network:
    external: true

volumes:
  termix-data:

Notas sobre el compose

  • termix-data guarda la base de datos, las claves de cifrado, los certificados SSL y las grabaciones de sesiones. Manténlo en disco local por rendimiento y hazle copias de seguridad.
  • La etiqueta fijada 2.8.0 es mejor que :latest para una bóveda de credenciales expuesta a internet. Los parches (2.6.1, 2.7.1) llegan como etiquetas separadas.
  • Dokploy mapea tu dominio al puerto 8080 y termina el HTTPS por ti, así que ningún contenedor publica un puerto directamente.

Paso 3: Dominio y puerto

Crea un dominio en Dokploy y mapéalo al puerto 8080. Despliega, abre https://your-domain.com y completa la configuración inicial (crea la cuenta de administrador; el flujo de onboarding se rehizo en la 2.7.0, así que puede diferir de capturas antiguas).

Paso 4: Verificar

  • En Dokploy, ambos servicios aparecen como Running: termix y guacd
  • Abre el dominio, inicia sesión y confirma la versión en Admin Settings
  • Si el escritorio remoto falla luego con “guacd unreachable”, la solución suele ser la resolución de nombres en la red compartida: define GUACD_URL=tcp://guacd:4822 explícitamente en el servicio termix

Desplegar Termix con Docker Compose (en solitario)

¿Sin Dokploy? El Compose de toda la vida funciona igual. Este reproduce el compose de la documentación oficial, con la versión fijada y guacd mantenido interno:

yaml
services:
  termix:
    image: ghcr.io/lukegus/termix:2.8.0
    container_name: termix
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      PORT: "8080"
      # ENABLE_TELEMETRY: "false"
    volumes:
      - termix-data:/app/data
    depends_on:
      - guacd
    networks:
      - termix-net

  guacd:
    image: guacamole/guacd:1.6.0
    container_name: guacd
    restart: unless-stopped
    networks:
      - termix-net
    # no ports: keep 4822 internal

volumes:
  termix-data:
    driver: local

networks:
  termix-net:
    driver: bridge

Arranca y verifica:

bash
docker compose up -d
docker compose ps                       # both containers Up
docker compose logs termix --tail 50    # watch startup/migrations
curl -fsS -o /dev/null -w '%{http_code}\n' http://localhost:8080   # expect 200

Luego abre http://your-server-ip:8080 y termina la configuración inicial. Tras iniciar sesión, revisa en Admin Settings la versión y el interruptor de telemetría.

Si piensas dejar el 8080 expuesto en una máquina solo de LAN, perfecto. En un servidor público, no: pon un reverse proxy delante (siguiente sección) y cierra el puerto directo con el firewall.

Variables de entorno útiles más allá de PORT (lista completa en la documentación de Termix):

Variable Ejemplo Propósito
PORT "8080" Puerto HTTP. El valor por defecto de la app es 4090; evita 30001-30005 (reservados)
ENABLE_TELEMETRY "false" Bloquea la telemetría desactivada para la instancia
DATABASE_DIALECT / DATABASE_URL postgres://... PostgreSQL/MySQL/MariaDB externo (2.7.0+)
DATABASE_SSL "require" TLS para una BD externa en redes no confiables
GUACD_URL tcp://guacd:4822 Apunta a un guacd existente en lugar del sidecar (host:puerto también vale)
VITE_BASE_PATH /termix/ Despliegues en subruta (1.11.1+)

Haz copia de seguridad del volumen de datos

Todo vive en /app/data: la base de datos, las credenciales y claves cifradas por usuario, los certificados SSL y las grabaciones de sesiones. Mantén el volumen termix-data con copias de seguridad como cualquier otro servicio crítico, y prueba la restauración. Una copia sin las claves de cifrado es un pisapapeles.

Dos modos de fallo esperables en instalaciones nuevas: el puerto 8080 ya ocupado por otro stack (cambia el lado del host en el mapeo), y un volumen termix-data obsoleto de una instalación anterior a la 2.x (revisa los logs en busca de errores de migración antes de asumir que la imagen está rota).

Checklist post-despliegue

Los primeros diez minutos tras cualquiera de las dos vías de despliegue:

  • Crea la cuenta de administrador, luego activa 2FA o registra una passkey
  • Desactiva el registro abierto
  • Confirma que la versión en ejecución es al menos la 2.5.1, idealmente fijada en 2.8.0
  • Define la preferencia de telemetría (Admin Settings, o la variable de entorno de arriba)
  • Añade hosts SSH con etiquetas y carpetas; prueba la terminal y el gestor de archivos
  • Configura los túneles que necesites para servicios internos
  • Confirma la visibilidad de Docker y que las acciones sobre contenedores funcionan

Después, endurecerlo. La sección de seguridad de abajo no es lectura opcional para esta app en concreto.

Activar el escritorio remoto de Termix con guacd

El escritorio remoto llegó en la 2.0.0 y es la función que convierte a Termix de una herramienta SSH en un auténtico todo en uno. Los dos archivos compose de arriba ya incluyen el sidecar; esta sección explica los ajustes.

Activación por host. En Host Manager, activa la función de escritorio remoto en el host y luego define el protocolo y los datos de conexión. Protocolos y cuándo usarlos:

Protocolo Destinos típicos
RDP Máquinas Windows con Escritorio remoto activado
VNC Compartir pantalla de macOS, escritorios Linux, consolas de VM
Telnet Equipos de red antiguos (úsalo solo en redes de confianza)

Capacidad. Los benchmarks oficiales añaden aproximadamente 1 núcleo y 1 GB de RAM cuando guacd entra en juego. Las sesiones RDP largas están limitadas por CPU en el contenedor guacd, no en el propio Termix.

Mantén guacd privado. Algunos ejemplos de la documentación publican 4822:4822. Ese es un patrón de LAN. En un VPS no publiques el 4822; mantén ambos contenedores en la misma red de compose o de Dokploy y deja que hablen internamente. guacd no tiene autenticación propia, así que cualquier cosa que llegue al 4822 puede manejar tus sesiones de escritorio.

Apuntar a un guacd existente. ¿Ya tienes Guacamole corriendo? Omite el sidecar y define GUACD_URL=tcp://your-guacd-host:4822 en el servicio termix.

Puntos conflictivos conocidos de las versiones de 2026, ya corregidos: RDP a través de un jump host funciona desde la 2.6.0, y VNC hacia Compartir pantalla de macOS dejó de mostrar pantallas negras con los arreglos de la 2.7.0/2.8.0. Si ves alguno de estos síntomas, estás en una etiqueta antigua.

Reverse proxy y HTTPS (Nginx, Traefik, Caddy)

La regla de oro: nunca expongas el puerto 8080 directo a internet. Termix guarda credenciales SSH, así que va detrás de HTTPS e idealmente de una capa de acceso adicional.

Termix hace un uso intensivo de WebSockets (terminales, RDP, estadísticas en vivo), así que el único error de reverse proxy a evitar es que falten las cabeceras de upgrade. Síntomas: la interfaz carga y luego las terminales se desconectan o nunca conectan.

Nginx

nginx
server {
    listen 443 ssl;
    server_name termix.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 3600s;
    }
}

El par Upgrade/Connection y proxy_http_version 1.1 son las líneas que hacen funcionar las terminales; proxy_read_timeout evita que las sesiones largas mueran al límite de 60 segundos por defecto.

Traefik

yaml
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.termix.rule=Host(`termix.example.com`)"
  - "traefik.http.routers.termix.entrypoints=websecure"
  - "traefik.http.routers.termix.tls.certresolver=myresolver"
  - "traefik.http.services.termix.loadbalancer.server.port=8080"

Traefik maneja WebSockets sin configuración extra; solo asegúrate de que el puerto del servicio es 8080.

Caddy

text
termix.example.com {
    reverse_proxy 127.0.0.1:8080
}

Caddy funciona nada más instalarlo, WebSockets incluidos. Es mi opción por defecto cuando no estoy ya en el Traefik de Dokploy.

Dos extras para configuraciones especiales: los despliegues en subruta funcionan con VITE_BASE_PATH=/termix/ (1.11.1+), y la 2.7.0 añadió autenticación por proxy de confianza (variables TRUSTED_PROXY_AUTH_*) si tu proxy controla el flujo de inicio de sesión, por ejemplo detrás de Authelia o similar.

Opciones de base de datos: SQLite, PostgreSQL o MySQL

La opción por defecto es SQLite en el volumen termix-data, y para un operador en solitario es la respuesta correcta: menos piezas móviles, un solo archivo del que hacer copia.

PostgreSQL, MySQL y MariaDB están soportados desde la 2.7.0 para copias centralizadas o configuraciones multiinstancia:

yaml
environment:
  DATABASE_DIALECT: "postgres"        # or mysql (MariaDB uses mysql + a mariadb:// URL)
  DATABASE_URL: "postgres://termix:password@db:5432/termix"
  # DATABASE_SSL: "require"           # for untrusted networks

No hay migración automática de SQLite a Postgres

Cambiar de dialecto no traslada tus datos. Obtienes un Termix vacío. Usa primero la Exportación/Importación de Admin Settings (hosts, credenciales, snippets), o pgloader si quieres la base de datos completa.

Conserva el volumen termix-data aunque uses una base de datos externa. Sigue guardando las claves de cifrado, los certificados SSL y las grabaciones de sesiones, así que el impulso de «borro el volumen y listo» tras pasar a Postgres te costará tus credenciales guardadas.

Nota de coste/operaciones: una BD externa es un servicio más del que hacer copias, parchear y limitar conexiones. Salvo que tengas una razón concreta (clúster compartido, copias centralizadas), SQLite más copias del volumen es la opción aburrida y correcta.

Seguridad de Termix: actualizaciones, exposición y telemetría

Esta sección sustituye al gesto de «es autoalojado, así que es seguro», porque 2026 puso a prueba esa suposición. Termix ha publicado más de 30 avisos de seguridad, varios críticos. Una app que guarda credenciales SSH de todos tus servidores merece la misma disciplina que tu VPN.

¿Qué versión deberías ejecutar?

Versión mínima segura: 2.5.1

La ola de avisos de 2026 incluyó varios críticos: RCE por inyección de comandos en el gestor de archivos y los túneles, más un IDOR que exponía contraseñas SSH de otros usuarios (corregidos en la 2.3.2), y errores críticos de inyección en el manejador de túneles/ACME (corregidos en la 2.5.1). Esa misma versión 2.5.1 también corrigió una clave de cifrado por defecto incrustada en el código, CVE-2026-79762, que permitía descifrar completamente offline las credenciales SSH almacenadas de usuarios OIDC/WebAuthn si el directorio de datos se filtraba. Ejecuta la 2.5.1 o superior; fija la 2.8.0 hoy.

Tres reglas prácticas:

  • Fija la etiqueta de la imagen (ghcr.io/lukegus/termix:2.8.0), nunca :latest en una bóveda de credenciales expuesta a internet. Las actualizaciones pasan a ser un docker compose pull && docker compose up -d deliberado, y en Dokploy eso está cubierto en cómo actualizar stacks de Docker Compose en Dokploy.
  • Actualiza más rápido si usas multiusuario. Buena parte de la ola de 2026 fue entre usuarios (IDOR, robo de credenciales). Una máquina con un solo administrador tiene un radio de explosión menor; una instalación de equipo, no.
  • Vigila los avisos de seguridad, no solo las releases: la pestaña de seguridad de GitHub es donde aparecen primero los críticos.

Verifica tras actualizar: docker compose ps muestra la etiqueta fijada (o comprueba el servicio en Dokploy), y la versión en Admin Settings coincide.

Restringe el acceso

  • Desactiva el registro abierto. Nadie que encuentre tu URL debería poder crear una cuenta.
  • Si usas SSO, aplícale lista blanca. OIDC_ALLOWED_USERS (y el ajuste de lista blanca del lado admin) restringe qué identidades pueden entrar. La 2.7.0 añadió PKCE y autenticación por proxy de confianza para configuraciones más estrictas.
  • Activa el registro de auditoría (Admin Settings, 2.4.0+). Tras tu próximo inicio de sesión, comprueba que aparecen entradas; un registro de auditoría que nunca miras es decoración.
  • HTTPS siempre, con la configuración de reverse proxy de arriba. Para una bóveda de credenciales SSH en una IP pública, añade lista blanca de IPs en el proxy o una puerta de entrada VPN.
  • Firewall en el host. Mi referencia para un servidor Docker público está en cómo protegí mi servidor Docker con UFW, y CrowdSec añade protección contra fuerza bruta que conviene tener delante de cualquier página de login.
  • Ojo con los enlaces de sesión compartida. La 2.6.0 añadió compartir sesiones en vivo de terminal/RDP mediante enlace, sin cuenta. Cómodo para trabajar en pareja, arriesgado por defecto. Si no lo necesitas, desactívalo globalmente o por host.

Telemetría y privacidad

Desde la 2.6.0, Termix envía un ping diario a PostHog por defecto. Según el README contiene un ID de instancia aleatorio, recuentos de usuarios y hosts, versión y uso de funciones. Sin nombres de usuario, hostnames ni IPs. Es lo más benigno que puede ser una telemetría. Sigue siendo tu servidor haciendo una llamada diaria que no pediste, así que decide explícitamente.

Desactívala por cualquiera de las dos vías: Admin Settings → General, o define ENABLE_TELEMETRY=false en el entorno, que bloquea el interruptor para toda la instancia. Mi opinión: en una máquina personal, la variable de entorno es la respuesta de «configurar y olvidar».

Copias de seguridad y recuperación

Qué hay en termix-data (el volumen /app/data): la base de datos SQLite, las claves de cifrado por usuario, los certificados SSL generados y las grabaciones de sesiones. Hazle copia como harías con una base de datos, no como con un sitio estático:

bash
# find the exact volume name (compose prefixes it with the project name)
docker volume ls | grep termix

# tar it up
docker run --rm -v termix_termix-data:/data -v $(pwd):/backup alpine \
  tar czf /backup/termix-data-$(date +%F).tar.gz -C /data .

Envía el archivo fuera de la máquina (almacenamiento compatible con S3, restic, lo que ya uses). La Exportación/Importación de Admin Settings es un buen complemento para hosts y credenciales, pero no sustituye a la copia del volumen.

Prueba la restauración

Las credenciales en /app/data están cifradas por usuario (en versiones parcheadas; ver la nota de versión de arriba). Restaura en un contenedor limpio con la misma versión fijada, inicia sesión y abre las credenciales de un host antes de confiar en la copia. Hazlo una vez ahora, no durante una caída.

Solución de problemas habituales de Termix

Síntoma Causa probable Solución
docker compose up falla con “port is already allocated” Otro stack ocupa el 8080 Cambia el lado del host en el mapeo de puertos, o detén el otro servicio
Las terminales (y RDP) se desconectan tras ~60 s detrás de un proxy Faltan cabeceras de upgrade de WebSocket Añade las cabeceras Upgrade/Connection y sube proxy_read_timeout (pestaña Nginx de arriba)
Errores de escritorio remoto: guacd unreachable guacd no está en la misma red, o falla la resolución de nombres Pon ambos contenedores en una misma red de compose; define GUACD_URL=tcp://guacd:4822 explícitamente
Bucle de login o registro tras una restauración termix-data obsoleto de una versión antigua frente a imagen nueva Revisa los logs en busca de errores de migración; restaura en la versión correspondiente y luego actualiza
Sin estadísticas de CPU/memoria en un host Estadísticas de servidor no activadas por host Activa Server Stats para ese host en Host Manager
Contenedor matado por OOM en un VPS pequeño Sondeo de métricas + guacd en una máquina de 512 MB Dimensiona según los benchmarks: 1 GB de base más 1 GB con guacd
“Too many authentication failures” al conectar El cliente SSH ofrece demasiadas claves Corrige la oferta de claves en el lado cliente; ver la guía enlazada en la sección del gestor de hosts

FAQ

¿Termix sustituye a las claves SSH?

No. Termix usa autenticación SSH estándar por debajo. Sigues gestionando claves y credenciales igual que hoy; Termix solo las almacena y despliega por ti, cifradas por usuario en versiones parcheadas (2.5.1+).

¿Dónde guarda Termix sus datos?

Todos los datos viven en /app/data dentro del contenedor, que se mapea al volumen termix-data en los dos archivos compose de arriba. Ese volumen guarda la base de datos, las claves de cifrado, los certificados SSL y las grabaciones de sesiones, aunque cambies a una base de datos externa.

¿Puedo exponer Termix con HTTPS?

Sí, y deberías. Ponlo detrás de Nginx, Traefik o Caddy con soporte de WebSocket, o usa el mapeo de dominios de Dokploy. Nunca expongas el puerto 8080 directo en un servidor público; para una app que guarda tus credenciales SSH, añade encima lista blanca de IPs o una puerta de entrada VPN.

¿Es Termix una buena alternativa gratuita a Termius?

Para autoalojadores, sí, y ese es el posicionamiento del propio proyecto. Obtienes la biblioteca de hosts sincronizada, los snippets y la gestión de archivos estilo SFTP que venden los planes de pago de Termius, pero el servidor de sincronización es tuyo y no hay suscripción. Lo que pierdes es el pulido en móvil y que otra persona opere la infraestructura.

¿Termix soporta escritorio remoto (RDP/VNC)?

Sí, desde la 2.0.0. Usa guacd de Apache Guacamole para renderizar sesiones RDP, VNC y Telnet en el navegador. Necesitas el contenedor sidecar guacd (o un guacd existente vía GUACD_URL), y se activa por host en el Host Manager.

¿Termix «llama a casa»?

Envía telemetría por defecto desde la 2.6.0: un ping diario a PostHog con un ID de instancia aleatorio, recuentos de usuarios/hosts, versión y uso de funciones. Sin nombres de usuario, hostnames ni IPs. Desactívala en Admin Settings, o define ENABLE_TELEMETRY=false para bloquearla en la instancia.

¿Puedo usar PostgreSQL con Termix?

Sí, desde la 2.7.0, mediante DATABASE_DIALECT y DATABASE_URL (MySQL y MariaDB también). Dos trampas: no hay migración automática de SQLite a Postgres, así que exporta/importa primero, y conserva el volumen termix-data igualmente porque guarda las claves de cifrado y los certificados.

¿Cuánta RAM necesita Termix?

Muy poca. Los benchmarks oficiales muestran unos 118 MB en reposo, y 1 GB total cubre hasta 100 hosts. Añade aproximadamente 1 GB si usas el sidecar guacd de escritorio remoto. El nivel de VPS más pequeño que puedas comprar es suficiente.

¿Necesito guacd?

Solo para el escritorio remoto. Si solo quieres terminales SSH, túneles, archivos, estadísticas y Docker, omite el servicio guacd y el cableado de red. Termix lo detecta y simplemente oculta las funciones de escritorio remoto.

¿Hay app de escritorio o móvil?

Sí, ya están todas publicadas. La app de escritorio (Connector) funciona en Windows, macOS y Linux, pensada primero para uso independiente con sincronización opcional al servidor. Las apps móviles están en Android 7.0+ (Play Store y APK) e iOS 15.1+ (App Store como «Termix SSH Companion»).

¿Qué versión debería ejecutar?

Al menos la 2.5.1, que corrigió una ola de CVE críticos incluida una clave de cifrado incrustada. Hoy eso significa fijar ghcr.io/lukegus/termix:2.8.0. Si usas multiusuario con RBAC, trata las actualizaciones como urgentes y no rutinarias; buena parte de la ola de avisos de 2026 fue entre usuarios.

Conclusión

Termix autoalojado ha superado la etiqueta de «bonito cliente SSH web». Con escritorio remoto, comandos para la flota y gestión real de contenedores en un solo paquete Apache-2.0, cubre la mayor parte de lo que un operador en solitario abre en cinco pestañas, y el ritmo de releases a lo largo de 2026 muestra un proyecto muy vivo. El precio es la disciplina de actualización: ejecuta la 2.5.1 o superior, fija la etiqueta y trátalo con el respeto que le darías a cualquier bóveda de credenciales.

Si partes de un servidor pelado, la guía de instalación de Dokploy te da primero la capa de despliegue, y la configuración de Tailscale autoalojado con Headscale combina perfectamente con el soporte nativo de Headscale de Termix 2.7.0 para llegar a home labs.

Ver Termix en GitHub