Komodo CD

Redespliega tus stacks de Komodo desde CI.

Komodo CD es un pequeño panel autoalojado sobre Komodo: el estado de cada stack, Pull o Redeploy con un clic y un curl listo para pegar, para que tu pipeline haga lo mismo después de cada push.

Instalar en un servidor
curl -fsSL https://raw.githubusercontent.com/Nonetss/Komodo-CD/main/scripts/bootstrap.sh | bash

Ejecútalo en un directorio vacío. Hace unas pocas preguntas, genera el secreto y arranca el stack con Docker Compose.

komodo-cd.example.com/

Qué incluye

  1. Cada stack, en su página.

    La lista de stacks se queda a la izquierda, con búsqueda y filtros por activos, parados o con problemas. Abre uno para ver sus servicios e imágenes, cuál tiene una imagen nueva, el commit desplegado frente al último, las tres acciones y el curl que lanza cada una desde CI. Marca varios para lanzar la misma acción en todos.

    komodo-cd.example.com/stacks/photos
  2. Pull, Redeploy o los dos.

    Elige un stack y una acción. Pull actualiza las imágenes sin reiniciar, Redeploy baja y vuelve a levantar todo el stack, Pull + Redeploy hace las dos cosas. Debajo del formulario, la misma acción como un curl listo para un workflow de GitHub o Gitea Actions.

    komodo-cd.example.com/deploy
  3. Cada deploy deja rastro.

    Las acciones lanzadas desde el panel y desde CI acaban en el mismo historial, con quién las lanzó (un usuario o el nombre de la API key), el resultado y el propio mensaje de error de Komodo cuando algo falla.

    komodo-cd.example.com/history
  4. Sabe qué lleva cada imagen.

    Cada imagen que usa un stack se escanea con Trivy la primera vez que aparece, después de cada deploy y cuando lo pidas. La página de Seguridad las ordena por gravedad, dice qué vulnerabilidades tienen arreglo y qué stacks usan cada imagen, y copia el informe de una imagen en Markdown. Las imágenes privadas que no puede descargar se marcan como sin acceso.

    komodo-cd.example.com/security
  5. Un Komodo, un par de claves.

    Pega la URL de tu instancia de Komodo y una key y un secret de su Settings → API Keys. Se quedan en el backend: la API muestra la conexión por nombre y URL, nunca con sus credenciales.

    komodo-cd.example.com/credentials
  6. Claro u oscuro, inglés o español.

    Los dos temas y los dos idiomas vienen de serie y se recuerdan por navegador. En el móvil la navegación superior pasa a ser una barra inferior, así que un redeploy está a un par de toques.

    komodo-cd.example.com/stacks/photos

Y el resto

El estado de un vistazo
El resumen reúne las cifras clave: los stacks por estado, lo que pide atención o tiene algo nuevo que desplegar, las vulnerabilidades de las imágenes y los despliegues de los últimos 30 días con su porcentaje de éxito.
Avisos de actualización
Un stack se marca cuando una de sus imágenes tiene actualización o el commit desplegado va por detrás del último, y un solo Pull + Redeploy desde la página de Stacks pone al día los que selecciones.
API keys
Claves personales enviadas como x-api-key, que solo se muestran al crearlas. Cada pipeline puede tener la suya y revocarse por separado.
Referencia OpenAPI
Cada endpoint está documentado en una referencia interactiva en /scalar, con la especificación en /doc.
Avisos de fallo
Notificaciones opcionales de ntfy, en ntfy.sh o en tu propio servidor, cada vez que falla un deploy, desde CI o a mano.
Cuatro contenedores, sin servidor de base de datos
Backend, frontend y gateway en ghcr.io, con la etiqueta latest y la de cada versión, más el servidor oficial de Trivy para los escaneos. SQLite en un único volumen: sin servidor de base de datos.

Cómo está montado

Cuatro contenedores levantados con Docker Compose. El gateway lleva Caddy, el único puerto publicado, que manda la API al backend y cada página a Astro SSR en el contenedor del frontend. El backend es el dueño de un fichero SQLite, habla con tu instancia de Komodo y manda las imágenes que hay que escanear a un servidor de Trivy, y Komodo hace el despliegue real en tus servidores.

Recorrido de las peticiones

Abrir una página
  1. Navegador
    → HTTPS
  2. Caddy:80
    Gateway
    → /*
  3. Astro SSR:4321
    Frontend · React
    → /api/auth
  4. Backend:3000
    Better Auth
Desplegar desde CI
  1. Runner de CI
    GitHub · Gitea
    → POST /api/v0/deploy
  2. Caddy:80
    Gateway
    → /api
  3. Backend:3000
    Hono · oRPC
    SQLite · db_data
    → HTTPS
  4. Komodo
    Core API
    → PullStack · DeployStack
  5. Tus servidores
    Komodo Periphery

Enrutado del gateway

PeticiónVa a
/rpc/* /api/*backend:3000
/doc /scalarbackend:3000
cualquier otra rutafrontend:4321

Solo el puerto 80 del gateway se mapea al host, como PORT. El backend y el frontend solo son accesibles dentro de la red de Compose. Caddy además responde a /health y añade cabeceras de seguridad básicas a cada respuesta.

El secret de Komodo no sale del backend.
La key y el secret se guardan en la base de datos del backend y solo se usan para llamar a Komodo. Al listar la conexión se devuelven su nombre y su URL, nunca las credenciales.
Una sola puerta para personas y pipelines.
Los mismos endpoints aceptan la cookie de sesión del navegador o la cabecera x-api-key desde CI. Las dos acaban en el historial, una key con su propio nombre.
Komodo sigue siendo la fuente de verdad.
Los stacks se leen de Komodo en cada petición y las acciones llaman a su PullStack y DeployStack. Komodo CD solo guarda usuarios, API keys, la conexión, los ajustes de ntfy y el historial.
Leer la arquitectura en la documentación

En marcha con un solo comando.

En un host Linux con Docker, curl y openssl, desde un directorio vacío:

curl -fsSL https://raw.githubusercontent.com/Nonetss/Komodo-CD/main/scripts/bootstrap.sh | bash

Todo lo que guarda Komodo CD vive en el volumen db_data: usuarios, API keys, la conexión con Komodo, los ajustes de ntfy y el historial. Haz copia, y ten en cuenta que docker compose down -v lo borra.

¿Prefieres montarlo a mano? Desplegar con Docker Compose

Qué hace el script

  1. 1Pregunta el puerto del host, la URL pública y el nombre, email y contraseña del primer administrador.
  2. 2Genera BETTER_AUTH_SECRET con openssl y escribe .env con modo 600. Nunca sobrescribe un .env existente.
  3. 3Descarga compose.yml en el directorio actual.
  4. 4Opcionalmente descarga las imágenes de ghcr.io y arranca el stack. El backend migra la base de datos y crea el administrador al arrancar.
komodo-cd.example.com