Перейти к содержимому

Развертывание в Netlify ​

Netlify предлагает отличный хостинг статических сайтов с щедрым бесплатным тарифом.

Развертывание в один клик ​

Deploy to Netlify

Ручное развертывание ​

Шаг 1: Подключите репозиторий ​

  1. Войдите в Netlify
  2. Нажмите «Add new site» → «Import an existing project»
  3. Подключите свой аккаунт GitHub
  4. Выберите свой форк BentoPDF

Шаг 2: Настройте параметры сборки ​

ПараметрЗначение
Build commandnpm run build
Publish directorydist
Node version18+

Шаг 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)

Собственный домен ​

  1. Перейдите в Site settings → Domain management
  2. Нажмите «Add custom domain»
  3. Следуйте инструкциям по настройке 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.

Двойное лицензирование: AGPL-3.0 и коммерческая лицензия.