Multi-Servidor
Gerencie e implante em múltiplos servidores a partir de um único painel sh0 usando túneis SSH seguros.
Visão Geral
O sh0 suporta um modelo Traga Seu Próprio Servidor (BYOS) onde você pode conectar múltiplos servidores remotos (nós) à sua instância sh0 primária. O servidor primário atua como plano de controle, gerenciando implantações e roteamento em todos os nós conectados.
Esta arquitetura permite:
- Distribuir cargas de trabalho entre múltiplos servidores para melhor desempenho
- Posicionar aplicações mais perto dos usuários em diferentes regiões geográficas
- Isolar cargas de trabalho (ex.: bancos de dados em hardware dedicado)
- Escalar além dos recursos de um único servidor
Adicionando Nós Remotos
Para adicionar um servidor remoto como nó:
- Navegue até Configurações → Nós no painel.
- Clique em Adicionar Nó.
- Insira os detalhes do nó: hostname ou IP, porta SSH e usuário SSH.
- Forneça a chave privada SSH ou selecione uma chave existente do seu gerenciador de chaves.
- Clique em Conectar. O sh0 verificará a conexão e registrará o nó.
Via 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 ou configure sudo sem senha para Docker.Configuração de Túnel SSH
O sh0 se comunica com nós remotos via túneis SSH. O túnel encaminha requisições da API Docker do servidor primário para o socket Docker do nó remoto, mantendo todo o tráfego criptografado.
O túnel é estabelecido automaticamente quando você adiciona um nó. O sh0 usa SSH TOFU (Trust On First Use) para verificação de chave de host -- você verá a impressão digital do servidor na primeira conexão e será solicitado a confirmá-la.
Primary Server (sh0)
|
|-- SSH Tunnel (encrypted) --> Remote Node 1
| |-- Docker Socket
| |-- Container A
| |-- Container B
|
|-- SSH Tunnel (encrypted) --> Remote Node 2
|-- Docker Socket
|-- Container CMonitoramento de Saúde dos Nós
O sh0 monitora continuamente a saúde de todos os nós conectados. O monitoramento inclui:
- Conectividade SSH: Verifica se o túnel está ativo e responsivo.
- Status do Docker: Verifica se o daemon Docker está rodando no nó remoto.
- Uso de recursos: Rastreia uso de CPU, memória e disco em cada nó.
- Saúde dos contêineres: Monitora todos os contêineres rodando no nó.
Quando um nó fica indisponível, o sh0 envia alertas pelos seus canais de notificação configurados (e-mail, Slack, Discord ou webhooks). Você pode configurar limites de alerta por nó nas configurações do nó.
Implantando em Nós Específicos
Ao criar ou configurar uma aplicação, você pode especificar em qual nó ela deve rodar. Isso é configurado nas configurações de implantação da aplicação.
Opções:
- Primário (padrão): Implantar no servidor sh0 principal.
- Nó específico: Fixar a aplicação em um nó remoto nomeado.
- Qualquer nó: Deixe o sh0 escolher o nó com mais recursos disponíveis.
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"}'Roteamento Inteligente de Nós
O proxy reverso Caddy do servidor primário gerencia o roteamento para contêineres em todos os nós. Quando uma requisição chega para um domínio, o Caddy a roteia para o nó e contêiner corretos, independentemente de onde o contêiner está rodando.
Para aplicações com réplicas distribuídas entre nós, o Caddy faz balanceamento de carga entre todas as réplicas saudáveis em todos os nós. A latência entre o proxy primário e os nós remotos deve ser considerada ao planejar sua arquitetura.
Gerenciando Múltiplos Servidores
O painel de Nós no dashboard fornece uma visão centralizada de todos os servidores na sua frota:
A partir deste painel você pode:
- Ver métricas do nó: CPU, memória, disco e uso de rede para cada nó.
- Listar contêineres: Ver todos os contêineres rodando em um nó específico.
- Drenar um nó: Mover graciosamente todos os contêineres de um nó antes de manutenção.
- Remover um nó: Desconectar um nó remoto (contêineres devem ser migrados ou parados primeiro).
- Acesso ao terminal: Abrir um terminal SSH para qualquer nó diretamente do painel.