Docs/ Infraestructura/ Multi-servidor

Multi-servidor

Administra y despliega en múltiples servidores desde un solo panel de control de sh0 usando túneles SSH seguros.

Descripción general

sh0 admite un modelo Trae Tu Propio Servidor (BYOS) donde puedes conectar múltiples servidores remotos (nodos) a tu instancia principal de sh0. El servidor primario actúa como el plano de control, administrando despliegues y enrutamiento en todos los nodos conectados.

Esta arquitectura te permite:

  • Distribuir cargas de trabajo en múltiples servidores para mejor rendimiento
  • Colocar aplicaciones más cerca de los usuarios en diferentes regiones geográficas
  • Aislar cargas de trabajo (por ejemplo, bases de datos en hardware dedicado)
  • Escalar más allá de los recursos de un solo servidor
Multi-server architecture diagram showing primary node and remote nodes
Note
Los nodos remotos solo necesitan Docker instalado y acceso SSH. sh0 se encarga de todo lo demás -- no necesitas instalar el binario de sh0 en los nodos remotos.

Agregar nodos remotos

Para agregar un servidor remoto como nodo:

  1. Navega a Configuración → Nodos en el panel de control.
  2. Haz clic en Agregar nodo.
  3. Ingresa los detalles del nodo: nombre de host o IP, puerto SSH y usuario SSH.
  4. Proporciona la clave privada SSH o selecciona una clave existente de tu administrador de claves.
  5. Haz clic en Conectar. sh0 verificará la conexión y registrará el nodo.
Add node form with hostname, SSH port, and authentication fields

Vía la API:

Terminal
curl -X POST https://your-server:9000/api/nodes \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "eu-node-1",
    "hostname": "10.0.1.50",
    "ssh_port": 22,
    "ssh_user": "deploy",
    "ssh_key_id": "key_abc123"
  }'
Warning
El usuario SSH debe tener permiso para ejecutar comandos Docker en el nodo remoto. Agrega el usuario al grupo docker o configura sudo sin contraseña para Docker.

Configuración de túnel SSH

sh0 se comunica con los nodos remotos vía túneles SSH. El túnel reenvía las solicitudes de la API de Docker desde el servidor primario al socket Docker del nodo remoto, manteniendo todo el tráfico cifrado.

El túnel se establece automáticamente cuando agregas un nodo. sh0 usa SSH TOFU (Confiar en el Primer Uso) para la verificación de la clave del host -- se te mostrará la huella digital del servidor en la primera conexión y se te pedirá que la confirmes.

SSH Tunnel Architecture
Primary Server (sh0)
  |
  |-- SSH Tunnel (encrypted) --> Remote Node 1
  |                                 |-- Docker Socket
  |                                 |-- Container A
  |                                 |-- Container B
  |
  |-- SSH Tunnel (encrypted) --> Remote Node 2
                                    |-- Docker Socket
                                    |-- Container C
SSH tunnel status showing connected nodes and latency
Tip
sh0 reconecta automáticamente los túneles si se caen. La reconexión ocurre en segundos, y los contenedores en ejecución en el nodo remoto no se ven afectados -- solo las operaciones de administración están brevemente no disponibles.

Monitoreo de salud de nodos

sh0 monitorea continuamente la salud de todos los nodos conectados. El monitoreo incluye:

  • Conectividad SSH: Verifica que el túnel esté activo y respondiendo.
  • Estado de Docker: Verifica que el demonio Docker esté en ejecución en el nodo remoto.
  • Uso de recursos: Rastrea el uso de CPU, memoria y disco en cada nodo.
  • Salud de contenedores: Monitorea todos los contenedores ejecutándose en el nodo.
Node health dashboard showing CPU, memory, disk, and container status for each node

Cuando un nodo presenta problemas de salud, sh0 envía alertas a través de tus canales de notificación configurados (correo electrónico, Slack, Discord o webhooks). Puedes configurar los umbrales de alerta por nodo en la configuración del nodo.

Desplegar en nodos específicos

Al crear o configurar una aplicación, puedes especificar en qué nodo debe ejecutarse. Esto se configura en los ajustes de despliegue de la aplicación.

Node selection dropdown in the app deployment settings

Opciones:

  • Primario (predeterminado): Desplegar en el servidor principal de sh0.
  • Nodo específico: Fijar la aplicación a un nodo remoto nombrado.
  • Cualquier nodo: Deja que sh0 elija el nodo con más recursos disponibles.
Terminal
curl -X PUT https://your-server:9000/api/apps/my-app \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"node_id": "node_eu1"}'
Note
Al desplegar en un nodo remoto, sh0 transfiere la imagen Docker construida desde el servidor primario al nodo remoto a través del túnel SSH. Esto sucede automáticamente -- no se requiere un registro de contenedores.

Enrutamiento consciente de nodos

El proxy inverso Caddy del servidor primario maneja el enrutamiento a contenedores en todos los nodos. Cuando llega una solicitud para un dominio, Caddy la enruta al nodo y contenedor correctos, sin importar dónde se esté ejecutando el contenedor.

Para aplicaciones con réplicas distribuidas en varios nodos, Caddy balancea la carga entre todas las réplicas saludables en todos los nodos. La latencia entre el proxy primario y los nodos remotos debe considerarse al planificar tu arquitectura.

Tip
Para la menor latencia, coloca tu proxy inverso (servidor principal de sh0) en la misma región que la mayoría de tus usuarios, y usa nodos remotos para procesamiento en segundo plano o despliegues regionales.

Administrar múltiples servidores

El panel de Nodos en el panel de control proporciona una vista centralizada de todos los servidores en tu flota:

Nodes management panel showing all connected servers with their status and resource usage

Desde este panel puedes:

  • Ver métricas del nodo: Uso de CPU, memoria, disco y red para cada nodo.
  • Listar contenedores: Ver todos los contenedores ejecutándose en un nodo específico.
  • Drenar un nodo: Mover todos los contenedores fuera de un nodo de forma elegante antes de mantenimiento.
  • Remover un nodo: Desconectar un nodo remoto (los contenedores deben migrarse o detenerse primero).
  • Acceso por terminal: Abrir una terminal SSH a cualquier nodo directamente desde el panel de control.
Danger
Remover un nodo que aún tiene contenedores en ejecución hará que esos contenedores sean inaccesibles. Siempre drena un nodo antes de removerlo para asegurar que todas las aplicaciones sean migradas a otro nodo.