Vista previa técnicaDanos tu opinión

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 build

La 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

/etc/nginx/conf.d/docs.conf
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

Caddyfile
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:

  1. Sube .livemark/build/client/ a un bucket de S3 (aws s3 sync .livemark/build/client/ s3://my-docs --delete).
  2. Define Static website hosting → Index document como index.html.
  3. Crea una distribución de CloudFront que apunte al bucket.
  4. En CloudFront, añade una Custom error response que asigne 404 a /index.html con código de respuesta 200. Este es el fallback SPA para rutas desconocidas.
  5. 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

.htaccess
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:

.github/workflows/deploy.yaml
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 --delete

Para S3, sustituye el paso de despliegue por aws-actions/configure-aws-credentials + aws s3 sync.

Ver también

Hecho con ❤ y Livemark