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
Agregar nodos remotos
Para agregar un servidor remoto como nodo:
- Navega a Configuración → Nodos en el panel de control.
- Haz clic en Agregar nodo.
- Ingresa los detalles del nodo: nombre de host o IP, puerto SSH y usuario SSH.
- Proporciona la clave privada SSH o selecciona una clave existente de tu administrador de claves.
- Haz clic en Conectar. sh0 verificará la conexión y registrará el nodo.
Vía la API:
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"
}'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.
Primary Server (sh0)
|
|-- SSH Tunnel (encrypted) --> Remote Node 1
| |-- Docker Socket
| |-- Container A
| |-- Container B
|
|-- SSH Tunnel (encrypted) --> Remote Node 2
|-- Docker Socket
|-- Container CMonitoreo 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.
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.
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.
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"}'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.
Administrar múltiples servidores
El panel de Nodos en el panel de control proporciona una vista centralizada de todos los servidores en tu flota:
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.