Canal de compilación
Lizard compila en sus propios nodos. No necesitas Docker localmente. Cuando despliegas, la plataforma decide cómo convertir tu código fuente en una imagen de contenedor usando un orden de decisión fijo, y luego ejecuta esa imagen en un pod aislado. No todos los servicios de container as a service compilan la imagen por ti; el blog compara las tres formas en que se presenta esta categoría.
Orden de decisión de compilación
La plataforma elige exactamente una estrategia de compilación, en este orden:
- Dockerfile del repositorio en
dockerfilePath: sidockerfilePathestá configurado en el servicio, ese Dockerfile se usa sin cambios, incluso cuando también se han configurado comandos de compilación o de inicio. UnstartCommandconfigurado sigue reemplazando elENTRYPOINTy elCMDdel Dockerfile en runtime. Consulta Desplegar con un Dockerfile. - Dockerfile sintetizado: en caso contrario, si
buildCommandy/ostartCommandestán configurados en el servicio (o se pasan mediantelizard up --build-command/--start-command), Lizard genera un Dockerfile a partir de esos comandos. lizardpack no se invoca. - Dockerfile en el código fuente: en caso contrario se usa un
Dockerfileen la raíz del directorio de compilación (consulta la excepción de GitHub más abajo). - Autodetección de lizardpack: en caso contrario, la plataforma ejecuta lizardpack, su generador de buildpacks/Dockerfile.
Autodetección de lizardpack
lizardpack inspecciona tu repositorio y construye una imagen optimizada de múltiples etapas. Lizard comprueba los stacks compatibles en este orden:
Hugo → Go → Node → Python → Rust → Ruby → PHP → Java → static
Consulta las Guías de frameworks para ver scripts de producción, adaptadores, rutas de salida y puertos: Hugo, Go, Node (Node.js, Next.js, Nuxt, SvelteKit, Astro, React, Vue, Docusaurus, VitePress), Python (Django, FastAPI, Streamlit) y Ruby (Rails). La detección usa archivos del proyecto y dependencias; un repositorio que coincida con varios proveedores sigue este orden. Para fijar una versión de Node.js o Python, consulta versiones del runtime.
En esta ruta:
- El código fuente subido (
lizard up) siempre usa unDockerfileen la raíz tal como está escrito. - El código fuente de GitHub usa un
Dockerfileen la raíz tal como está escrito, a menos que parezca incompleto: tiene unCOPYdebuild,dist,out,.nextopublicescrito sin barra final (COPY dist /usr/share/nginx/html) y ninguna líneaRUNque empiece pornpm,yarn,pnpm,bun,pip,pip3,bundle,cargo,go build,mvnogradle. En ese caso lizardpack genera un reemplazo. - Sin Dockerfile, lizardpack genera uno por ti.
- El comando de inicio se detecta automáticamente: una línea
Procfileweb:(Python/Ruby) opackage.jsonscripts.start(Node) se lee automáticamente. Para ver la línea exacta que necesitan Django, Flask y FastAPI, consulta hosting de aplicaciones Python. - El puerto se infiere a partir de
EXPOSE, los valores predeterminados del framework o una variable de entornoPORTexplícita.
Ojo: En código fuente de GitHub, un Dockerfile que copia salida ya compilada (
COPY dist /dest) y no tiene un pasoRUNde gestor de paquetes se considera incompleto y lizardpack lo regenera. Añade un paso de compilación real o configuradockerfilePathpara forzar el uso literal. Consulta Los cambios del Dockerfile no se aplican.
Qué activa una reconstrucción
| Acción | ¿Reconstruye? |
|---|---|
git push en la rama seguida | ✅ mediante webhook de GitHub |
lizard redeploy / lizard up | ✅ explícito |
Cambiar variables VITE_* o NEXT_PUBLIC_* | ✅ reconstruye un servicio en ejecución; consulta variables de tiempo de compilación para saber cuándo los valores llegan a la compilación |
service set de campos de compilación (repoUrl, branch, sourceType, buildCommand, dockerfilePath, rootDirectory) | ✅ reconstruye automáticamente un servicio en ejecución; en caso contrario, ejecuta lizard redeploy |
service set de campos solo de runtime (startCommand, preDeployCommand, containerPort, watchPatterns) | ❌ ejecuta lizard redeploy para aplicar |
| Cualquier otro cambio de variable de entorno / secreto | ❌ se aplica con un reinicio rápido (sin reconstrucción) |
No compiles dos veces. Después de un
service setque cambia un campo de compilación en un servicio en ejecución, la reconstrucción se activa automáticamente: no encadenes unlizard redeploydespués, o pondrás en cola una segunda compilación redundante (por qué). Un servicio que se ha bloqueado o que nunca se ha desplegado no se reconstruye por sí solo; ejecutalizard redeploy.
Variables de tiempo de compilación
Lizard escribe las variables VITE_* y NEXT_PUBLIC_* en el Dockerfile como líneas ENV en dos casos:
- Servicios de GitHub sin
dockerfilePath: las recibe el Dockerfile de lizardpack o elDockerfileraíz del repositorio. - Servicios con
buildCommandostartCommandcuyo Dockerfile sintetizado es una compilación de Node.
Los servicios desplegados con lizard up y sin comando de compilación ni de inicio no reciben variables de Lizard en tiempo de compilación. Ningún servicio recibe argumentos de compilación aparte de COMMIT_SHA, así que un ARG en tu Dockerfile queda vacío. Para valores públicos con lizard up, súbelos en .env.production (comprueba que .gitignore no lo excluya), escríbelos en tu Dockerfile o, para una aplicación de servidor Node, configura tanto buildCommand como startCommand.
Ver una compilación
Los registros de compilación se transmiten durante lizard up. Para cualquier servicio:
lizard logs --build # the most recent build's logs
lizard events # deploy history + replica statusSi una compilación falla, lee lizard logs --build, corrige la causa (en tu repositorio o ajustando buildCommand / startCommand mediante lizard service set) y luego ejecuta lizard redeploy.
Notas de runtime
- Sin Docker
HEALTHCHECK. El runtime no ejecuta el ciclo de healthcheck de Docker, por lo que las directivasHEALTHCHECKse ignoran. Lizard ejecuta en su lugar una sonda TCP contra tu puerto (omitida en modo worker). - No escribas un Dockerfile sin necesidad. lizardpack detecta automáticamente la mayoría de los stacks: prueba primero con un despliegue y añade un Dockerfile (o configura
dockerfilePath) solo si la compilación automática no se ajusta a tu caso.
Referencia de configuración de compilación
| Campo | Descripción |
|---|---|
buildCommand | Comando para compilar tu aplicación → selecciona la ruta de Dockerfile sintetizado a menos que dockerfilePath esté configurado |
startCommand | Comando para iniciar tu aplicación en runtime; reemplaza el ENTRYPOINT y el CMD de la imagen |
preDeployCommand | Se ejecuta al inicio de cada contenedor (cada réplica, cada reinicio), antes de startCommand; solo se ejecuta cuando startCommand está configurado. Haz que sea seguro ejecutarlo muchas veces y al mismo tiempo |
dockerfilePath | Ruta a un Dockerfile del repositorio para usar literalmente; prevalece sobre buildCommand / startCommand en la compilación de la imagen |
rootDirectory | Subdirectorio desde el que compilar (monorepos) |
watchPatterns | Solo redesplegar cuando cambien rutas coincidentes |
containerPort | Puerto TCP en el que escucha tu aplicación (predeterminado 3000; 0 = worker) |
Configura cualquiera de estos con lizard service set <svc> --set <field>=<value>. Vacía un campo con un valor vacío, como --set buildCommand=. Consulta lizard service.
Actualizado