Wdrożenie na Netlify
Netlify zapewnia świetny hosting statycznych stron z hojnym darmowym planem.
Wdrożenie jednym kliknięciem
Wdrożenie ręczne
Krok 1: Połącz repozytorium
- Zaloguj się do Netlify
- Kliknij "Add new site" → "Import an existing project"
- Połącz swoje konto GitHub
- Wybierz swój fork BentoPDF
Krok 2: Skonfiguruj ustawienia budowania
| Ustawienie | Wartość |
|---|---|
| Build command | npm run build |
| Publish directory | dist |
| Node version | 18+ |
Krok 3: Wdróż
Kliknij "Deploy site" i poczekaj na zakończenie budowania.
Plik konfiguracyjny
Utwórz netlify.toml w katalogu głównym projektu:
toml
[build]
command = "npm run build"
publish = "dist"
[build.environment]
NODE_VERSION = "18"
# Required security headers for SharedArrayBuffer (used by LibreOffice WASM)
[[headers]]
for = "/*"
[headers.values]
Cross-Origin-Embedder-Policy = "require-corp"
Cross-Origin-Opener-Policy = "same-origin"
Cross-Origin-Resource-Policy = "cross-origin"
# Pre-compressed LibreOffice WASM binary - must be served with Content-Encoding
[[headers]]
for = "/libreoffice-wasm/soffice.wasm.gz"
[headers.values]
Content-Type = "application/wasm"
Content-Encoding = "gzip"
Cache-Control = "public, max-age=31536000, immutable"
# Pre-compressed LibreOffice WASM data - must be served with Content-Encoding
[[headers]]
for = "/libreoffice-wasm/soffice.data.gz"
[headers.values]
Content-Type = "application/octet-stream"
Content-Encoding = "gzip"
Cache-Control = "public, max-age=31536000, immutable"
# Cache other WASM files
[[headers]]
for = "*.wasm"
[headers.values]
Cache-Control = "public, max-age=31536000, immutable"
Content-Type = "application/wasm"
# SPA routing
[[redirects]]
from = "/*"
to = "/index.html"
status = 200Ważne
Nagłówki Cross-Origin-Embedder-Policy i Cross-Origin-Opener-Policy są wymagane do konwersji Word/ODT/Excel/PowerPoint na PDF. Bez nich SharedArrayBuffer jest niedostępny, a silnik LibreOffice WASM nie uruchomi się.
Nagłówki Content-Encoding: gzip przy plikach .wasm.gz i .data.gz informują przeglądarkę, że ma je automatycznie rozpakować. Bez nich przeglądarka otrzymuje surowe bajty gzip, a kompilacja WASM kończy się błędem.
Zmienne środowiskowe
Ustaw je w Site settings → Environment variables:
| Zmienna | Opis |
|---|---|
SIMPLE_MODE | Ustaw na true dla minimalnego builda |
VITE_BRAND_NAME | Własna nazwa marki (zastępuje "BentoPDF") |
VITE_BRAND_LOGO | Ścieżka do logo względem public/ (np. images/my-logo.svg) |
VITE_FOOTER_TEXT | Własny tekst stopki/praw autorskich |
VITE_DEFAULT_LANGUAGE | Domyślny język interfejsu (np. fr, de, es) |
Własna domena
- Przejdź do Site settings → Domain management
- Kliknij "Add custom domain"
- Postępuj zgodnie z instrukcjami konfiguracji DNS
Duże pliki multimedialne
Dla dużych plików WASM rozważ włączenie Netlify Large Media:
bash
netlify lm:setup
git lfs track "*.wasm"Rozwiązywanie problemów
Konwersja Word/ODT/Excel na PDF zawiesza się na 55%
Jeśli konwersje dokumentów zawieszają się na 55%, otwórz konsolę DevTools i sprawdź:
js
console.log(window.crossOriginIsolated); // should be true
console.log(typeof SharedArrayBuffer); // should be "function"Jeśli crossOriginIsolated ma wartość false, nagłówki COEP/COOP z Twojego netlify.toml nie są stosowane. Upewnij się, że plik jest w katalogu głównym projektu, i wdróż ponownie.
Jeśli w konsoli widzisz expected magic word 00 61 73 6d, found 1f 8b 08 08, pliki .wasm.gz nie mają nagłówków Content-Encoding: gzip. Upewnij się, że bloki [[headers]] dla soffice.wasm.gz i soffice.data.gz znajdują się w Twoim netlify.toml.
Budowanie kończy się błędem
Sprawdź zgodność wersji Node:
toml
[build.environment]
NODE_VERSION = "20"Wolne pierwsze ładowanie
Włącz optymalizację zasobów w Site settings → Build & deploy → Asset optimization.