Loading...

Guía de plataforma

Source Deploy: cómo una carpeta se convierte en una app en ejecución

La referencia del deploy por carpeta de cdnctl: arquitectura, campos de cdnctl.yaml, límites y los fallos reales que hemos visto con sus soluciones.

Volver a la Ayuda de la Plataforma

Arquitectura: qué ocurre tras cdnctl deploy

De su lado no interviene ningún repositorio git ni registro de contenedores. El flujo es:

  • cdnctl empaqueta la carpeta en un tar.gz (hasta 128 MB) y lo sube al panel bajo su cuenta.
  • El panel emite una URL de descarga firmada válida 30 minutos — la única vía por la que el entorno de build puede obtener su código.
  • Un sandbox aislado (Kaniko dentro de un pod protegido por gVisor) descarga el archivo, lo desempaqueta y construye el Dockerfile. Los builds suelen terminar en un minuto.
  • La imagen se sube al espacio privado de registro de su cuenta (registry.cdn.com.tr/<cuenta>/<app>) — nunca a un registro compartido o público.
  • La app se crea o actualiza, se expone en su subdominio con SSL y se despliega. cdnctl espera e imprime la URL en vivo.

cdnctl.yaml: los campos que importan

cdnctl init escribe este archivo; usted lo edita y cdnctl lo lee en cada deploy.

  • name — el nombre de la app; también semilla del subdominio en el primer deploy.
  • port — el puerto del contenedor donde escucha su servidor (todas las interfaces, no localhost).
  • healthcheck — ruta HTTP que la plataforma sondea; el deploy espera a que pase.
  • method — auto, source, git o compose; source es la vía por carpeta descrita aquí.
  • El propio manifiesto queda excluido del escaneo de cdnctl check: sus valores nunca silencian una advertencia sobre su código.
# cdnctl.yaml mínimo
name: task-tracker
port: 3000
healthcheck: /health
method: source

Límites — la letra pequeña honesta

  • Archivo fuente: máximo 128 MB. Los proyectos Node caben de sobra al excluir node_modules (init escribe el .dockerignore).
  • Tiempo de build: alrededor de un minuto para apps Node/Python típicas; los builds nativos pesados tardan más.
  • La plantilla de Dockerfile cubre Node, Python, PHP y sitios estáticos; cualquier otra cosa necesita un Dockerfile escrito a mano (deploy lo usa tal cual).
  • El pago queda en el panel: si la cuenta no tiene paquete de plataforma, deploy se detiene con el enlace de compra y cdnctl init --wait continúa tras el pago.

Solución de problemas: fallos que hemos vivido

Cada línea es un fallo real de ejecuciones en vivo, con la solución que funcionó.

  • El contenedor entra en crashloop con ERR_DLOPEN_FAILED justo tras el deploy — la imagen contiene node_modules copiado de su máquina (módulos nativos compilados para otra plataforma). Solución: añada node_modules a .dockerignore y deje que npm install corra dentro del build. cdnctl check lo marca antes de subir.
  • Build failed en el primer deploy — lea el log de build que imprime cdnctl deploy; la causa más común tras node_modules es una dependencia presente en local pero ausente de package.json/requirements.
  • La app aparece stopped tras un create — ejecute cdnctl deploy de nuevo (0.18.0+ dispara el rollout por sí mismo; versiones antiguas requerían un deploy explícito).
  • El sitio no responde aunque el build fue bien — el servidor escucha en 127.0.0.1 o en un puerto distinto al de cdnctl.yaml. Escuche en 0.0.0.0 y en el puerto declarado; check detecta el enlace a localhost.
  • El healthcheck nunca pasa — la ruta no devuelve 200 o la app tarda en arrancar; verifique la ruta primero en local.

Los comandos, de principio a fin

cdnctl init          # detectar proyecto, escribir cdnctl.yaml + Dockerfile
cdnctl check         # pre-vuelo local: los errores bloquean, las advertencias avisan
cdnctl deploy        # empaquetar → subir → build → URL en vivo
cdnctl container apps logs --app <app_uuid> --tail 100   # logs de ejecución
cdnctl deploy-token create --name "agent"   # token restringido para agentes IA