Hosting estático
Actualizado el 12 nov 2026
La compilación de Livemark es un simple directorio de archivos .html, .css, .js y recursos. Cualquier cosa capaz de servir un directorio de archivos funcionará. Esta guía cubre las configuraciones habituales.
Compila el sitio
livemark buildLa salida queda en .livemark/build/client/. Trata ese directorio como la raíz de documentos.
Prerenderizado frente a fallback SPA
Livemark prerenderiza cada ruta en disco durante livemark build. Un enlace profundo como /customization/site-metadata/ cae en un archivo real en customization/site-metadata/index.html, sin necesidad de un fallback de enrutado en el cliente para las páginas conocidas.
Aun así, conviene configurar el fallback SPA (reescribir las rutas desconocidas a index.html) como defensa en profundidad: da a los 404 un renderizado elegante en el cliente en lugar de la página de error por defecto del hosting.
nginx
server {
listen 80;
server_name docs.example.com;
root /var/www/docs;
# Try the exact file, then a directory's index.html, then SPA fallback.
location / {
try_files $uri $uri/index.html /index.html =404;
}
# Long-cache hashed assets.
location /assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}Copia .livemark/build/client/* a /var/www/docs/ en cada publicación.
Caddy
docs.example.com {
root * /var/www/docs
try_files {path} {path}/index.html /index.html
file_server
encode gzip zstd
}Caddy aprovisiona automáticamente certificados de Let's Encrypt cuando el dominio resuelve hacia él.
AWS S3 + CloudFront
El patrón estándar es un bucket de S3 como origen y CloudFront delante:
- Sube
.livemark/build/client/a un bucket de S3 (aws s3 sync .livemark/build/client/ s3://my-docs --delete). - Define Static website hosting → Index document como
index.html. - Crea una distribución de CloudFront que apunte al bucket.
- En CloudFront, añade una Custom error response que asigne
404a/index.htmlcon código de respuesta200. Este es el fallback SPA para rutas desconocidas. - Define el objeto raíz por defecto de la distribución como
index.html.
Para controlar la caché larga de los recursos con hash, añade una política de caché que respete las cabeceras Cache-Control definidas en los objetos /assets/*.
Apache
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.html [L]Coloca la compilación en la raíz de documentos. Las dos RewriteCond garantizan que los archivos y directorios reales se sirvan directamente; solo las rutas sin coincidencia recurren al fallback.
Otros hostings
La misma receta funciona en Render Static, Surge, Fly Static, Bunny o cualquier almacenamiento de objetos con CDN: sube el directorio, apunta un dominio a él y asegúrate de que las rutas desconocidas recurran a index.html.
Despliega con GitHub Actions
Un ejemplo mínimo con nginx/SSH:
name: deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
cache: pnpm
node-version: 24
- run: pnpm install
- run: pnpm livemark build
- uses: easingthemes/ssh-deploy@v5
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY }}
REMOTE_HOST: ${{ secrets.SSH_HOST }}
REMOTE_USER: ${{ secrets.SSH_USER }}
SOURCE: .livemark/build/client/
TARGET: /var/www/docs/
ARGS: -avzr --deletePara S3, sustituye el paso de despliegue por aws-actions/configure-aws-credentials + aws s3 sync.
Ver también
- Metadatos del sitio:
sitehace posibles las URLs absolutas y la generación de feeds. - Despliegue: vuelve al índice de hostings.
Hecho con ❤ y Livemark