Ctrl K
ComunidadGuías…
Guía HostingByte · verificada

Instalar Cordane — Hub para Agentes de IA Autoalojable

Guía paso a paso verificada para instalar y configurar Cordane autoalojado con GitHub OAuth, conectar workers y verificar instalación. Arquitectura outbound sin puertos entrantes ni VPN.

Actualizada 5/10/2026Más guíasCitación AI/LLM
Instalar Cordane — Hub para Agentes de IA Autoalojable | Guía Verificada

Instalar Cordane — Hub para Agentes de IA Autoalojable

Última actualización: 2026-10-05 | Fuentes verificadas: GitHub cordane/cordane | Documentación oficial

/software/cordane — Ficha de software en HostingByte

¿Qué es Cordane?

Cordane es una plataforma de control centralizado para gestionar equipos de desarrollo y agentes de inteligencia artificial (Claude Code, Codex, Opencode) ejecutándose en hardware propio. Utiliza arquitectura outbound: los workers establecen conexiones WebSocket hacia el hub sin puertos entrantes ni VPN.

┌─────────────────────────────────────────────────────────────┐
│                    HUB (Control Plane)                       │
│              Interfaz web en navegador                       │
│         Autoalojado o Cloud Gestionado                       │
└─────────────────────────────────────────────────────────────┘
                              ↕ WebSocket outbound
┌─────────────────────────────────────────────────────────────┐
│                   WORKERS (Data Plane)                       │
│  Agentes, servidores de desarrollo y código                  │
│              En tus máquinas propias                         │
└─────────────────────────────────────────────────────────────┘

Prerrequisitos

Hub (Autoalojado — Community Tier Gratuito)

RequisitoEspecificación
SistemaLinux con Docker o binario Go estático único
CPU/RAM~1 vCPU, 512 MB–1 GB RAM
DiskVarios GB (SQLite + worktrees de Git)
RedPuertos 80/443 abiertos para HTTPS automático
DNSA record para hostname + wildcard *. para subdominios de preview
Requisito adicionalApp de GitHub OAuth con callback URL configurada

Worker (cada máquina donde ejecutarán agentes)

RequisitoEspecificación
SistemaLinux o macOS
RequeridoGit (Cordane crea worktrees por ticket)
OpcionalDocker para agentes en contenedores sandboxeados
CapacidadCPU/RAM/disk suficientes para builds y ejecuciones de agentes

Instalación Paso a Paso

1. Clonar Repositorio del Hub

git clone https://github.com/cordane/cordane.git
cd cordane/deploy

2. Configurar Variables de Entorno

cp .env.example .env

Variables clave a configurar en .env:

# URL pública del hub (incluye protocolo y dominio)
EXTERNAL_URL=https://tu-hub.ejemplo.com

# Hostname interno para el hub
CONTROL_HOST=tu-hub.ejemplo.com

# Clave secreta del hub (generar con openssl)
CORDANE_SECRET_KEY=$(openssl rand -base64 32)

# Credenciales GitHub OAuth (ver sección siguiente)
CORDANE_GITHUB_CLIENT_ID=...
CORDANE_GITHUB_CLIENT_SECRET=...

Generar CORDANE_SECRET_KEY:

openssl rand -base64 32

3. Configurar GitHub OAuth

Crear App OAuth en GitHub:

  1. Ve a GitHub Settings → Developer settings → OAuth Apps
  2. Click en New OAuth App
  3. Rellena:
    • Application name: Cordane Hub Self-Hosted
    • Homepage URL: https://tu-hub.ejemplo.com
    • Authorization callback URL: https://tu-hub.ejemplo.com/api/v1/auth/github/callback
  4. Click en Register application
  5. Copia Client ID y Client secret

4. Iniciar con Docker Compose

docker compose up -d
docker compose logs -f cordane

5. Acceder al Hub

Abre tu navegador en EXTERNAL_URL y autentícate con GitHub. El primer usuario que se autentifica es admin.

Conectar un Worker

1. Obtener Token de Join desde el Hub

En la interfaz web del hub:

  1. Ve a Workers → Add worker
  2. Copia el comando de join (contiene token crdjt_...)

2. Instalar Worker en Máquina Objetivo

# En tu máquina worker
curl -fsSL https://tu-hub.ejemplo.com/install.sh | sh

3. Unir al Hub

cordane worker join https://tu-hub.ejemplo.com --token crdjt_...

Para reinicios (opcional):

cordane worker run

En unos segundos el worker aparecerá Online en el tablero.

Comprobación Posterior

Verificar Worker Online

# En el hub, abre Workers y confirma que aparece "Online"

Verificar Puertos (debería estar vacío — arquitectura outbound)

ss -ltnp
# No debería mostrar nada escuchando en puertos entrantes

Verificar Logs del Hub

docker compose logs -f cordane

Backup de SQLite

El hub utiliza SQLite para el estado. Backups sencillos vía Litestream hacia buckets S3 compatibles.

Configurar backup a S3

Edita .env:

CORDANE_LITESTREAM_S3_BUCKET=tu-bucket
CORDANE_LITESTREAM_S3_REGION=us-east-1
CORDANE_LITESTREAM_S3_ACCESS_KEY_ID=tu-access-key
CORDANE_LITESTREAM_S3_SECRET_ACCESS_KEY=tu-secret-key
CORDANE_LITESTREAM_S3_ENDPOINT=https://tu-s3-endpoint.com

Ejecutar backup manual

docker compose exec cordane litestream migrate
docker compose exec cordane litestream snapshot /tmp/snapshot.db

Actualización y Rollback

Actualizar Worker

# Descargar y aplicar actualización
cordane worker upgrade

# Solo verificar si hay actualización disponible
cordane worker upgrade --check

Actualizar Hub Self-Hosted

docker compose pull && docker compose up -d

Verificar versión en hub: Settings → Version (banner "update available" cuando haya nueva release)

Rollback (si es necesario)

# Detener y restaurar desde backup anterior
docker compose down
# Restaurar backup de SQLite manualmente o desde S3
docker compose up -d

Errores Habituales

ErrorCausaSolución
401 Unauthorized en OAuth Callback URL incorrecto en GitHub App Verificar que https://tu-hub.ejemplo.com/api/v1/auth/github/callback coincide exactamente
Worker no aparece "Online" Token de join expirado o mal copiado Generar nuevo token desde hub → Workers → Add worker
HTTPS no funciona DNS en grey-cloud (Cloudflare) Configurar DNS-only / DNS grey-cloud; Caddy termina TLS
cordane: command not found Worker binario no instalado Ejecutar curl -fsSL https://tu-hub/install.sh | sh
Subdominios de preview no resuelven Falta wildcard DNS *.ejemplo.com Configurar A record wildcard en DNS provider

Seguridad

  • Cifrado AES-256-GCM: Secrets de aplicación y perfil cifrados en la base de datos con clave que el usuario controla — nunca almacenados en texto plano junto a los datos.
  • Sin Phone-home: El hub verifica su licencia offline con token firmado. Funciona incluso cuando los servidores de SHB no están disponibles.
  • Datos en tu perímetro: En modo cloud gestionado, agentes, fuente y secretos ejecutan solo en workers propios. El plano de datos nunca toca servidores de terceros.
  • Autenticación OAuth GitHub: Sin contraseñas. Primer usuario que se autentifica es admin.
  • Subdominios autenticados: Previews de aplicaciones con autenticación por defecto y escopado por equipo.

FAQ Basada en Evidencia

¿Qué máquinas pueden ejecutar un worker?

Cualquier sistema Linux o macOS que pueda ejecutar un binario Go. Desde laptop hasta VPS barato ($4-5/mo). Los workers son ligeros y escalables.

¿Cuántos agentes soporta?

Community tier: hasta 3 ejecuciones concurrentes de agente. Tier con licencia: ilimitado. Cada ticket obtiene su propio worktree y puertos.

¿Puedo cambiar entre autoalojado y cloud?

Sí. El único cambio es quién ejecuta el hub (control plane). Workers permanecen en tus máquinas. Puedes mover datos SQLite entre modos sin pérdida.

¿Tengo lock-in con Cordane?

No. Datos son SQLite plano exportable. Hub verifica licencia offline. Puedes migrar entre autoalojado y cloud gestionado libremente.

¿Qué agentes soporta?

Cualquier CLI agent: Claude Code, Codex, Aider o scripts propios. No estás lockeado a un modelo o proveedor específico.

¿Puedo usar tmux nativo?

No directamente — Cordane no soporta keybindings nativos de tmux. Usa terminales persistentes con PTY real que mapean sesiones tmux a espacios del tablero.

Precios

TierPrecioCaracterísticas
Community (Gratuito) $0/mo 1 worker, 1 proyecto, 2 usuarios, 3 concurrentes. Sin licencia, sin phone-home.
Self-hosted con Licencia $19/user/mo Ilimitado en workers, proyectos y concurrencia.
Cloud Gestionado $39/mo + 3 seats Hub ejecutado por SHB con TLS, backups y upgrades automáticos.

Fuentes verificadas

Fuente 1 ↗Fuente 2 ↗Fuente 3 ↗