Sitios estáticos
Zenavo sirve los sitios estáticos con Caddy en el puerto 8080, compilados desde tu repositorio en cada despliegue.
HTML plano
Un repositorio con index.html y sin package.json se detecta como static: sus archivos se sirven tal cual.
Sitios compilados (Vite, React, Vue, Svelte, Astro)
Un proyecto Node.js cuyo framework genera archivos estáticos, como Vite, Create React App, Vue, SvelteKit con el adaptador static o Astro, se compila con su script build y se sirve la carpeta de salida. zbpack conoce la carpeta de cada framework (dist en Vite, build en Create React App); Build Plan Preview la muestra como outputDir. Para otra carpeta, indícala en Settings → Build → zbpack options:
ZBPACK_OUTPUT_DIR=publicAplicaciones de una sola página
Los enrutadores del lado del cliente (React Router, Vue Router) funcionan sin ajustes: una ruta sin extensión que no coincide con ningún archivo devuelve index.html, mientras que un recurso que falta, como /assets/app.js, sigue devolviendo 404.
Variables en sitios estáticos
Un sitio estático no tiene servidor, así que sus variables, como las VITE_* de Vite (import.meta.env.VITE_API_URL) o las REACT_APP_* de Create React App, deben existir al compilarlo. Las variables de la pestaña Variable solo llegan al servicio en ejecución, así que define estas en Settings → Build → Build arguments, por ejemplo:
VITE_API_URL=https://api.example.comLlegan a la compilación sin Dockerfile; consulta argumentos de compilación. Con tu propio Dockerfile, declara cada una con una línea ARG antes del comando de compilación. Todo lo que hay en el bundle es público: no pongas nunca secretos en estas variables.
Desplegar
- Add Service → GitHub, elige el repositorio y la rama.
- Haz clic en Next, comprueba que la vista previa muestra static o nodejs con tu framework y carpeta de salida, y haz clic en Deploy.
- Genera un dominio en la pestaña Networking, o asocia el tuyo.
Otros generadores
Para Hugo, Jekyll, MkDocs o un generador que zbpack no conozca, haz commit de la salida compilada y apunta ZBPACK_OUTPUT_DIR a ella, o añade un Dockerfile que compile el sitio y lo sirva:
FROM hugomods/hugo:exts AS build
WORKDIR /src
COPY . .
RUN hugo --minify
FROM caddy:2-alpine
COPY --from=build /src/public /usr/share/caddy
EXPOSE 80Problemas habituales
| Síntoma | Causa |
|---|---|
Recargar una página que no sea / devuelve 404 | Tu propio Dockerfile sirve el sitio con un servidor sin respaldo a index.html. Usa try_files {path} /index.html en Caddy, o la compilación generada. |
| El sitio sale en blanco y la consola muestra 404 en los recursos | La ruta base de la compilación no es /. Revisa base en vite.config u homepage en package.json. |
Un valor VITE_* es undefined | Solo está en la pestaña Variable, que no llega a la compilación. Defínelo como argumento de compilación y vuelve a desplegar; con tu propio Dockerfile, declara también su ARG. |