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
- Deploy an app → pestaña Git repo.
- App name, Git repo URL, Branch (default
main), Container port. - (Opcional) Private repo token para repos privados.
- 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
urlde arriba - Content type:
application/json - Secret: el
secretde 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