Esta guía cubre cómo desplegar InteeBuild en servicios gratuitos y qué comprobar antes de exponerlo. Todo lo que hace el proyecto funciona sin planes de pago: los builds corren en GitHub Actions, el servidor cabe en el plan gratuito de Render y no hay ni una API de pago detrás.
render.yaml define el servicio con plan: free, npm install como build, node server/server.js como arranque y /api/health como health check. En Render > Environment van GITHUB_TOKEN, INTEE_BUILDS_REPO, INTEE_DEFAULT_BRANCH y, si quieres, CORS_ORIGIN y CLEANUP_SECRET.
Tres cosas que conviene tener presentes del plan gratuito:
- El disco se borra al reiniciar. Todo lo que el servidor escribe en
data/(historial de builds, API keys, integraciones git y versiones) vive en el disco efímero de Render y desaparece con cada reinicio o despliegue. Es esperable: no guardes ahí nada que no puedas perder. - El servicio se duerme sin tráfico y tarda alrededor de un minuto en despertar. La primera petición tras la inactividad es lenta.
- GitHub Actions cobra minutos a los repos privados. En la cuenta gratuita hay una asignación mensual de unos 2000 minutos en runners Linux, y cada build ocupa un runner varios minutos. Los repos públicos no consumen esa asignación. Si te quedas corto, usa un repo de builds público o revisa el panel de billing de GitHub.
El repo de builds no cuesta nada y se auto-limpia: cada 30 minutos el servidor borra ramas build-* y decompile-* con más de 5 minutos, y runs y artefactos con más de 30 minutos. Por eso los enlaces de descarga caducan pronto.
- Token con permisos mínimos. Un fine-grained token sólo sobre el repo de builds, con
Contents: Read/writeyActions: Read/write. Nada más. Si se filtra, el daño queda contenido a ese repo. - Nunca subas
.enval repo. Está en.gitignore. Las variables van en Render > Environment. CORS_ORIGINconfigurado. En.env.exampleviene vacío, que es el modo desarrollo (cualquier origen). En producción,CORS_ORIGIN=https://tu-dominio.com.- Limpieza manual desactivada por defecto.
/api/cleanupdevuelve403salvo que pongasCLEANUP_SECRETy pases?secret=…. La limpieza automática de cada 30 minutos no depende de eso. - Rate limit activo. 10 builds por hora por IP, compartidos con la descompilación en la nube. En Render el contador se pierde al reiniciar, que es un efecto lateral del disco efímero.
- Protección SSRF activa. Las URLs a localhost, redes privadas y endpoints de metadatos cloud quedan bloqueadas en
/api/build,/api/projecty/api/analyze, y también en las redirecciones que devuelva el analizador. - Sin secretos en las respuestas.
/api/healthy/api/diagconfirman que el token existe y si es válido, pero nunca lo devuelven. El listado de API keys devuelve el hash enmascarado, no la key.
Abre /api/diag en tu dominio (también hay enlace "Diagnóstico" en el footer). Recorre cinco pasos y se detiene en el primero que falla:
env.hasTokenoenv.hasRepoenfalse: faltan variables en Render > Environment. Añádelas y haz redeploy.token.hintcon "inválido": el token expiró o fue revocado; genera uno nuevo.repo.hintcon "no existe o sin acceso":INTEE_BUILDS_REPOestá mal escrito (formatousuario/repo) o el token no llega a ese repo.branch.hintcon la rama por defecto de GitHub distinta a la que usas: ajustaINTEE_DEFAULT_BRANCHal valor que indica el mensaje.workflow.hintcon "aún no hay workflow": normal en instalación fresca, el archivo se crea solo en el primer build.ok: true: todo encaja. Si el build falla después, abre los logs del run desde el botón del resultado.
503 "GitHub no configurado"— faltanGITHUB_TOKENoINTEE_BUILDS_REPO.429conLimite de builds alcanzado (10 por hora)— 10 por hora por IP; espera a que venza la ventana.400de validación — el mensaje indica qué corregir: nombre, URL bloqueada, package, versión, HTML de más de 500.000 caracteres o icono de más de 7 MB.- Build en
failedcon error de GitHub — abre/api/diagy, si daok: true, revisa el log del run. - Build en
failedcon "Tiempo de espera agotado consultando GitHub" — el servidor agotó sus 200 consultas de 6 segundos (unos 20 minutos); el runner tardó más de lo previsto o GitHub estuvo lento.
$0 en licencias y servicios: builds, firma debug, descargas y API no cuestan nada. Lo único que puede consumir dinero es tu propia cuenta de GitHub o Render si te pasas de la asignación gratuita, y eso se ve en sus paneles de facturación. Si en algún momento añades planes de pago, hazlo en un fork separado para no complicar esta versión.
Sobre límites concretos de la API, en api.md. Sobre seguridad de los builds y del servidor, en security.md.