Saltar al contenido

Desplegar en Cloudflare Pages ​

Cloudflare Pages ofrece alojamiento estático global y rápido con ancho de banda ilimitado.

Despliegue rápido ​

  1. Ve a Cloudflare Pages
  2. Haz clic en "Create a project"
  3. Conecta tu repositorio de GitHub

Configuración de compilación ​

AjusteValor
Framework presetNone
Build commandnpm run build
Build output directorydist
Root directory/

Variables de entorno ​

Añádelas en Settings → Environment variables:

VariableValue
NODE_VERSION18
SIMPLE_MODEfalse (opcional)
VITE_BRAND_NAMENombre de marca personalizado (opcional)
VITE_BRAND_LOGORuta del logo relativa a public/ (opcional)
VITE_FOOTER_TEXTTexto personalizado de pie/copyright (opcional)
VITE_DEFAULT_LANGUAGEIdioma predeterminado de la interfaz, p. ej. fr (opcional)

Archivo de configuración ​

Crea _headers en tu carpeta public:

# Required security headers for SharedArrayBuffer (used by LibreOffice WASM)
/*
  Cross-Origin-Embedder-Policy: require-corp
  Cross-Origin-Opener-Policy: same-origin
  Cross-Origin-Resource-Policy: cross-origin

# Pre-compressed LibreOffice WASM binary
/libreoffice-wasm/soffice.wasm.gz
  Content-Type: application/wasm
  Content-Encoding: gzip
  Cache-Control: public, max-age=31536000, immutable

# Pre-compressed LibreOffice WASM data
/libreoffice-wasm/soffice.data.gz
  Content-Type: application/octet-stream
  Content-Encoding: gzip
  Cache-Control: public, max-age=31536000, immutable

# Cache WASM files aggressively
/*.wasm
  Cache-Control: public, max-age=31536000, immutable
  Content-Type: application/wasm

# Service worker
/sw.js
  Cache-Control: no-cache

Importante

Las cabeceras Cross-Origin-Embedder-Policy y Cross-Origin-Opener-Policy son necesarias para las conversiones de Word/ODT/Excel/PowerPoint a PDF. Sin ellas, SharedArrayBuffer no está disponible y el motor LibreOffice WASM no se podrá inicializar.

Crea _redirects para el enrutamiento SPA:

/*    /index.html   200

Dominio personalizado ​

  1. Ve a tu proyecto de Pages
  2. Haz clic en "Custom domains"
  3. Añade tu dominio
  4. Cloudflare configurará el DNS automáticamente si el dominio está en Cloudflare

Ventajas ​

  • Ancho de banda ilimitado y gratuito
  • CDN global con más de 300 ubicaciones edge
  • HTTPS automático
  • Despliegues de vista previa para pull requests
  • Compilaciones rápidas

Solución de problemas ​

Subida de archivos grandes ​

Cloudflare Pages admite archivos de hasta 25 MB. Los módulos WASM deberían caber, pero si llegas a los límites, considera:

bash
# Split large files during build
npm run build

Límites de tamaño del Worker ​

Si usas Cloudflare Workers para un enrutamiento avanzado, ten en cuenta el límite de 1 MB de los planes gratuitos.

Worker de proxy CORS (para firmas digitales) ​

La herramienta de firma digital necesita un proxy CORS para obtener las cadenas de certificados. Despliega el worker incluido:

bash
cd cloudflare
npx wrangler login
npx wrangler deploy

Funciones de seguridad ​

FunciónDescripción
Restricciones de URLSolo se permiten URL de certificados
Límite de tamañoMáx. 10MB por solicitud
Limitación de velocidad60 solicitudes/IP/min (requiere KV)
Bloqueo de IP privadasBloquea localhost e IP internas

Activar la limitación de velocidad ​

bash
# Create KV namespace
npx wrangler kv namespace create "RATE_LIMIT_KV"

# Add to wrangler.toml with returned ID:
# [[kv_namespaces]]
# binding = "RATE_LIMIT_KV"
# id = "YOUR_ID"

npx wrangler deploy

Compilar con la URL del proxy ​

bash
VITE_CORS_PROXY_URL=https://your-worker.workers.dev npm run build

O con Docker:

bash
export VITE_CORS_PROXY_URL="https://your-worker.workers.dev"
DOCKER_BUILDKIT=1 docker build \
  --secret id=VITE_CORS_PROXY_URL,env=VITE_CORS_PROXY_URL \
  -t your-bentopdf .

Nota: Consulta el README para configurar la firma HMAC.

Con doble licencia: AGPL-3.0 y licencia comercial.