4.1 KiB
Deploy to Cloudflare Pages
Cloudflare Pages offers fast, global static site hosting with unlimited bandwidth.
Quick Deploy
- Go to Cloudflare Pages
- Click "Create a project"
- Connect your GitHub repository
Build Configuration
| Setting | Value |
|---|---|
| Framework preset | None |
| Build command | npm run build |
| Build output directory | dist |
| Root directory | / |
Environment Variables
Add these in Settings → Environment variables:
| Variable | Value |
|---|---|
NODE_VERSION |
18 |
SIMPLE_MODE |
false (optional) |
VITE_BRAND_NAME |
Custom brand name (optional) |
VITE_BRAND_LOGO |
Logo path relative to public/ (optional) |
VITE_FOOTER_TEXT |
Custom footer/copyright text (optional) |
VITE_DEFAULT_LANGUAGE |
Default UI language, e.g. fr (optional) |
Configuration File
Create _headers in your public folder:
# 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
::: warning Important
The Cross-Origin-Embedder-Policy and Cross-Origin-Opener-Policy headers are required for Word/ODT/Excel/PowerPoint to PDF conversions. Without them, SharedArrayBuffer is unavailable and the LibreOffice WASM engine will fail to initialize.
:::
Create _redirects for SPA routing:
/* /index.html 200
Custom Domain
- Go to your Pages project
- Click "Custom domains"
- Add your domain
- Cloudflare will auto-configure DNS if the domain is on Cloudflare
Advantages
- Free unlimited bandwidth
- Global CDN with 300+ edge locations
- Automatic HTTPS
- Preview deployments for pull requests
- Fast builds
Troubleshooting
Large File Uploads
Cloudflare Pages supports files up to 25 MB. WASM modules should be fine, but if you hit limits, consider:
# Split large files during build
npm run build
Worker Size Limits
If using Cloudflare Workers for advanced routing, note the 1 MB limit for free plans.
CORS Proxy Worker (For Digital Signatures)
The Digital Signature tool requires a CORS proxy to fetch certificate chains. Deploy the included worker:
cd cloudflare
npx wrangler login
npx wrangler deploy
Security Features
| Feature | Description |
|---|---|
| URL Restrictions | Only certificate URLs allowed |
| File Size Limit | Max 10MB per request |
| Rate Limiting | 60 req/IP/min (requires KV) |
| Private IP Blocking | Blocks localhost, internal IPs |
Enable Rate Limiting
# 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
Build with Proxy URL
VITE_CORS_PROXY_URL=https://your-worker.workers.dev npm run build
Note: See README for HMAC signature setup.