Desplegar desde Git (build desde el código)

En vez de una imagen prearmada, le das a la plataforma un repo Git con un Dockerfile — lo clona, buildea la imagen y la corre. La cache de capas vive en un registry local, así los redeploys son rápidos.

Requisitos

  • Un repo con Dockerfile (la app buildea con docker build).
  • Para repos privados: un Personal Access Token (PAT).

Dashboard

  1. Deploy an app → pestaña Git repo.
  2. App name, Git repo URL, Branch (default main), Container port.
  3. (Opcional) Private repo token para repos privados.
  4. Deploy. Tras buildear, el form muestra el webhook push-to-deploy.

API

curl -s -X POST $API/deploy \
  -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \
  -d '{
    "name": "gitapp",
    "repo": "https://github.com/acme/myapp",
    "branch": "main",
    "port": 3000
  }'

Campos

Campo Requerido Default Notas
repo ✅* URL git HTTPS.
branch   main Rama a buildear.
dockerfile   Dockerfile Ruta relativa al repo (sin .., sin rutas absolutas).
context   . Directorio de build context, relativo al repo.
port   80 Puerto donde escucha tu app.
repoToken   PAT para repos privados (cifrado at-rest, nunca se loguea).

* repo buildea desde el código; podés sumar cpu, memory, domain, env, secrets.

Monorepo / Dockerfile en otra ruta

-d '{"name":"api","repo":"https://github.com/acme/monorepo","branch":"main",
     "dockerfile":"services/api/Dockerfile","context":"services/api","port":8080}'

Repos privados

Generá un PAT (GitHub → Settings → Developer settings → Tokens) con acceso de lectura repo y pasalo como repoToken:

-d '{"name":"secretapp","repo":"https://github.com/acme/private","repoToken":"ghp_xxx"}'

El token se cifra (AES-256-GCM) y solo se inyecta en la URL de clone durante el build. Nunca lo devuelve la API ni aparece en logs.

Push-to-deploy (webhook de GitHub)

Cuando desplegás desde un repo, la respuesta incluye un webhook:

"webhook": {
  "url": "https://api.cynchro.cloud/webhooks/github/<appId>",
  "secret": "….",
  "contentType": "application/json",
  "events": ["push"]
}

Agregalo en GitHub → repo → Settings → Webhooks → Add webhook:

  • Payload URL: la url de arriba
  • Content type: application/json
  • Secret: el secret de arriba
  • Events: Just the push event

Ahora cada push a la rama configurada dispara un rebuild + redeploy automático. Los pushes a otras ramas se ignoran. (La firma se verifica con HMAC; un secret incorrecto se rechaza.)

Podés re-obtener el webhook después con GET /apps/:id (campo webhook).

Cómo funcionan los builds (bueno saberlo)

  • El clone es shallow (--depth 1) en la rama elegida.
  • La imagen se cachea en un registry local; los redeploys reusan capas (--cache-from) y suelen ser mucho más rápidos que el primer build.
  • Si un build cacheado falla, reintenta desde cero automáticamente (--no-cache).

→ Varios contenedores en una app: Apps multi-servicio · Config: Secrets


This site uses Just the Docs, a documentation theme for Jekyll.