Разгортванне на Netlify
Netlify прапануе выдатны хостынг статычных сайтаў са шчодрым бясплатным тарыфам.
Разгортванне адным клікам
Ручное разгортванне
Крок 1: Падключыце рэпазіторый
- Увайдзіце ў Netlify
- Націсніце "Add new site" → "Import an existing project"
- Падключыце свой уліковы запіс GitHub
- Выберыце свой форк BentoPDF
Крок 2: Наладзьце параметры зборкі
| Налада | Значэнне |
|---|---|
| Build command | npm run build |
| Publish directory | dist |
| Версія Node | 18+ |
Крок 3: Разгортванне
Націсніце "Deploy site" і пачакайце завяршэння зборкі.
Файл канфігурацыі
Стварыце netlify.toml у корані праекта:
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 = 200Важна
Загалоўкі Cross-Origin-Embedder-Policy і Cross-Origin-Opener-Policy патрэбныя для пераўтварэнняў Word/ODT/Excel/PowerPoint у PDF. Без іх SharedArrayBuffer недаступны, і рухавік LibreOffice WASM не ініцыялізуецца.
Загалоўкі Content-Encoding: gzip для файлаў .wasm.gz і .data.gz кажуць браўзеру распакоўваць іх аўтаматычна. Без іх браўзер атрымлівае сырыя байты gzip, і кампіляцыя WASM завяршаецца памылкай.
Зменныя асяроддзя
Задайце іх у Site settings → Environment variables:
| Зменная | Апісанне |
|---|---|
SIMPLE_MODE | Задайце true для мінімальнай зборкі |
VITE_BRAND_NAME | Уласная назва брэнда (замяняе "BentoPDF") |
VITE_BRAND_LOGO | Шлях да лагатыпа адносна public/ (напрыклад, images/my-logo.svg) |
VITE_FOOTER_TEXT | Уласны тэкст ніжняга калантытула/аўтарскага права |
VITE_DEFAULT_LANGUAGE | Мова інтэрфейсу па змаўчанні (напрыклад, fr, de, es) |
Уласны дамен
- Перайдзіце ў Site settings → Domain management
- Націсніце "Add custom domain"
- Выконвайце інструкцыі па наладзе DNS
Вялікія медыяфайлы
Для вялікіх файлаў WASM варта ўключыць Netlify Large Media:
bash
netlify lm:setup
git lfs track "*.wasm"Выпраўленне непаладак
Word/ODT/Excel у PDF спыняецца на 55%
Калі пераўтварэнне дакументаў завісае на 55%, адкрыйце кансоль DevTools і праверце:
js
console.log(window.crossOriginIsolated); // should be true
console.log(typeof SharedArrayBuffer); // should be "function"Калі crossOriginIsolated роўна false, загалоўкі COEP/COOP з вашага netlify.toml не прымяняюцца. Пераканайцеся, што файл ляжыць у корані праекта, і разгарніце нанова.
Калі ў кансолі бачна expected magic word 00 61 73 6d, found 1f 8b 08 08, у файлаў .wasm.gz няма загалоўкаў Content-Encoding: gzip. Пераканайцеся, што блокі [[headers]] для soffice.wasm.gz і soffice.data.gz ёсць у вашым netlify.toml.
Памылка зборкі
Праверце сумяшчальнасць версіі Node:
toml
[build.environment]
NODE_VERSION = "20"Павольная першая загрузка
Уключыце аптымізацыю рэсурсаў у Site settings → Build & deploy → Asset optimization.