Перайсці да зместу

Кіраўніцтва па самастойным размяшчэнні ​

BentoPDF можна размясціць на ўласнай інфраструктуры. Гэта кіраўніцтва апісвае розныя варыянты разгортвання.

Хуткі старт з Docker / Podman ​

Самы хуткі спосаб размясціць BentoPDF самастойна:

TIP

BentoPDF пастаўляецца ў дзвюх зборках:

  • Зборка для самастойнага размяшчэння: ghcr.io/alam00000/bentopdf-simple:latest. Усе інструменты PDF, без маркетынгавага афармлення (без hero-блока, FAQ, водгукаў, ніжняга калантытула). Выкарыстоўвайце яе для ўнутраных разгортванняў каманды або арганізацыі. Гэта не скарочаная "lite" версія.
  • Камерцыйная зборка: ghcr.io/alam00000/bentopdf:latest. Поўны маркетынгавы сайт, які выкарыстоўвае сам bentopdf.com і ўладальнікі камерцыйнай ліцэнзіі для публічных разгортванняў.

Калі сумняваецеся, бярыце зборку для самастойнага размяшчэння.

IMPORTANT

Пераўтварэнне офісных файлаў патрабуе SharedArrayBuffer, а значыць, праграма павінна быць ізаляванай паміж крыніцамі (cross-origin isolated) і раздавацца з бяспечнага кантэксту. Афіцыйны вобраз ужо адпраўляе патрэбныя загалоўкі COOP/COEP, але браўзеры ўсё роўна адключаюць SharedArrayBuffer на звычайных HTTP-адрасах лакальнай сеткі, напрыклад http://192.168.x.x.

Выкарыстоўвайце http://localhost толькі для праверкі на той жа прыладзе. Калі карыстальнікі заходзяць у BentoPDF праз IP або імя хаста ў LAN, падключыце HTTPS.

bash
# Docker
docker run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest

# Podman
podman run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest

Або з Docker Compose / Podman Compose:

yaml
# docker-compose.yml
services:
  bentopdf:
    image: ghcr.io/alam00000/bentopdf-simple:latest
    ports:
      - '3000:8080'
    restart: unless-stopped
bash
# Docker Compose
docker compose up -d

# Podman Compose
podman-compose up -d

Podman Quadlet (Linux Systemd) ​

Запускайце BentoPDF як сэрвіс systemd. Стварыце ~/.config/containers/systemd/bentopdf.container:

ini
[Container]
Image=ghcr.io/alam00000/bentopdf-simple:latest
ContainerName=bentopdf
PublishPort=3000:8080
AutoUpdate=registry

[Service]
Restart=always

[Install]
WantedBy=default.target
bash
systemctl --user daemon-reload
systemctl --user enable --now bentopdf

Поўная дакументацыя па Quadlet ёсць у кіраўніцтве па разгортванні з Docker.

Зборка з зыходнага кода ​

bash
# Clone and build
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
npm install
npm run build

# The built files are in the `dist` folder

Параметры канфігурацыі ​

Зборка для самастойнага размяшчэння (Simple Mode) ​

Зборка для самастойнага размяшчэння (вобраз bentopdf-simple, таксама вядомы як Simple Mode) функцыянальна ідэнтычная камерцыйнай зборцы: усе інструменты PDF прысутнічаюць і працуюць аднолькава. Яна толькі хавае маркетынгавае афармленне, якое мае сэнс толькі на самім bentopdf.com або ў камерцыйным публічным разгортванні. Гэта не скарочаная і не "lite" версія.

Што хавае зборка для самастойнага размяшчэння (толькі касметыка, ніякія функцыі PDF не выдаляюцца):

  • Панэль навігацыі, hero-блок, раздзел магчымасцей, FAQ, водгукі, ніжні калантытул
  • Змяняе загаловак старонкі на "Інструменты PDF"

Што застаецца ў зборцы для самастойнага размяшчэння (усё, што сапраўды працуе з PDF):

  • Усе інструменты PDF (аб'яднанне, падзел, рэдагаванне, подпіс, OCR, пераўтварэнне офісных файлаў і г.д.)
  • Падтрымка ўласнага брэндынгу, уся канфігурацыя падчас зборкі і выканання

Камерцыйная зборка (ghcr.io/alam00000/bentopdf:latest) ляжыць у аснове самога bentopdf.com і выкарыстоўваецца ўладальнікамі камерцыйнай ліцэнзіі для публічных разгортванняў: яна дадае hero-блок, FAQ, водгукі і ніжні калантытул, якія не мелі б сэнсу ва ўнутраным інструменце.

Калі вы размяшчаеце BentoPDF для сваёй каманды, арганізацыі або як унутраны інструмент, бярыце зборку для самастойнага размяшчэння:

bash
# Use the pre-built image (recommended)
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest

# Or build it yourself
SIMPLE_MODE=true npm run build

Падрабязнасці глядзіце ў SIMPLE_MODE.md.

Камерцыйная зборка (публічныя разгортванні пад уласным брэндам) ​

Камерцыйная зборка (вобраз bentopdf, без суфікса -simple) ляжыць у аснове самога bentopdf.com. Яна ўключае поўны маркетынгавы сайт (hero-блок, магчымасці, FAQ, водгукі, ніжні калантытул) у дадатак да ўсіх інструментаў PDF. Выкарыстоўвайце гэтую зборку, калі хочаце разгарнуць BentoPDF як публічны PDF-сэрвіс пад уласным брэндам, напрыклад:

  • Вы прапануеце BentoPDF як SaaS для канчатковых карыстальнікаў на сваім дамене
  • Вам патрэбна поўная старонка (маркетынгавыя раздзелы + інструменты), а не толькі голы набор інструментаў
  • Вы ўладальнік камерцыйнай ліцэнзіі і ўбудоўваеце BentoPDF у камерцыйны прадукт

Запуск як ёсць (брэндынг BentoPDF, зручна для папярэдняга прагляду зборкі):

bash
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest

Зборка з уласным брэндам (тыповы камерцыйны сцэнарый):

bash
docker build \
  --build-arg VITE_BRAND_NAME="AcmePDF" \
  --build-arg VITE_BRAND_LOGO="images/acme-logo.svg" \
  --build-arg VITE_FOOTER_TEXT="© 2026 Acme Corp. All rights reserved." \
  -t acmepdf .

docker run -p 3000:8080 acmepdf

Усе іншыя параметры зборкі (BASE_URL, VITE_DEFAULT_LANGUAGE, DISABLE_TOOLS, перавызначэнні URL для WASM і г.д.) працуюць гэтак жа, як і ў зборцы для самастойнага размяшчэння.

Ліцэнзаванне

Выкарыстанне камерцыйнай зборкі дазволена паводле любога з двух варыянтаў ліцэнзіі BentoPDF:

  • AGPL-3.0 (бясплатна): дазволена, калі ваша разгортванне публікуе ўвесь свой зыходны код пад AGPL, уключаючы змены брэндынгу і звязаную бізнес-логіку.
  • Камерцыйная ліцэнзія ($79 пажыццёва): патрэбна для закрытых / прапрыетарных разгортванняў, калі вы не адкрываеце код свайго форка з брэндынгам або бізнес-код.

Поўнае параўнанне глядзіце на старонцы ліцэнзавання. Модулі WASM пад AGPL (PyMuPDF, Ghostscript, CoherentPDF) загружаюцца з CDN падчас выканання, таму яны не трапляюць у ваш вобраз і не змяняюць вашага ліцэнзійнага становішча.

Базавы URL ​

Разгортванне ў падкаталог:

bash
BASE_URL=/pdf-tools/ npm run build

Уласны брэндынг ​

Замяніце стандартны лагатып, назву і тэкст ніжняга калантытула BentoPDF на свае падчас зборкі:

ЗменнаяАпісаннеПа змаўчанні
VITE_BRAND_NAMEНазва брэнда ў загалоўку і ніжнім калантытулеBentoPDF
VITE_BRAND_LOGOШлях да лагатыпа адносна public/images/favicon-no-bg.svg
VITE_FOOTER_TEXTУласны тэкст ніжняга калантытула/аўтарскага права© 2026 BentoPDF. All rights reserved.
bash
# Place your logo in public/, then build
VITE_BRAND_NAME="AcmePDF" \
VITE_BRAND_LOGO="images/acme-logo.svg" \
VITE_FOOTER_TEXT="© 2026 Acme Corp. Internal use only." \
npm run build

Або праз Docker:

bash
docker build \
  --build-arg VITE_BRAND_NAME="AcmePDF" \
  --build-arg VITE_BRAND_LOGO="images/acme-logo.svg" \
  --build-arg VITE_FOOTER_TEXT="© 2026 Acme Corp. Internal use only." \
  -t acmepdf .

Брэндынг працуе і ў поўным рэжыме, і ў Simple Mode, і можа спалучацца з усімі іншымі параметрамі зборкі (BASE_URL, SIMPLE_MODE, VITE_DEFAULT_LANGUAGE).

Адключэнне пэўных інструментаў ​

Хавайце асобныя інструменты з меркаванняў адпаведнасці патрабаванням або бяспекі. Адключаныя інструменты выдаляюцца з галоўнай старонкі, пошуку, спалучэнняў клавіш, канструктара працоўных працэсаў і недаступныя па прамым URL.

Ідэнтыфікатары інструментаў: гэта URL старонкі без .html. Адкрыйце любы інструмент і паглядзіце на URL (напрыклад, edit-pdf, sign-pdf, encrypt-pdf).

Падчас зборкі (убудоўваецца ў бандл):

bash
DISABLE_TOOLS="edit-pdf,sign-pdf" npm run build

Падчас выканання (без перазборкі, падключыце config.json):

json
{
  "disabledTools": ["edit-pdf", "sign-pdf"]
}
bash
docker run -d -p 3000:8080 \
  -v ./config.json:/usr/share/nginx/html/config.json:ro \
  ghcr.io/alam00000/bentopdf-simple:latest

Абодва спосабы можна спалучаць: спісы аб'ядноўваюцца.

Таксама можна адключыць асобныя функцыі ў рэдактары PDF (напрыклад, рэдагаванне канфідэнцыйных даных), не адключаючы ўвесь інструмент, дадаўшы editorDisabledCategories у config.json. Поўны спіс катэгорый глядзіце ў кіраўніцтве па Docker.

Кіраўніцтвы па разгортванні ​

Выберыце платформу:

Тыповыя праблемы ​

Word / ODT / Excel / PowerPoint у PDF завісае (SharedArrayBuffer недаступны) ​

Сімптом: пераўтварэнні дакументаў на базе LibreOffice (Word, ODT, Excel, PowerPoint у PDF) завісаюць на ~55% або не пачынаюцца. У кансолі браўзера можа быць:

ReferenceError: SharedArrayBuffer is not defined

…або window.crossOriginIsolated вяртае false, або кампіляцыя WASM паведамляе expected magic word 00 61 73 6d, found 1f 8b 08 08.

Прычына: LibreOffice WASM патрабуе SharedArrayBuffer, які браўзер уключае толькі калі старонка ізаляваная паміж крыніцамі І раздаецца з бяспечнага кантэксту. Гэта значыць, што павінны выконвацца дзве ўмовы:

  1. Кожны адказ уключае абодва загалоўкі:
    • Cross-Origin-Embedder-Policy: require-corp
    • Cross-Origin-Opener-Policy: same-origin
  2. Старонка раздаецца з https://... або http://localhost. Звычайны HTTP на IP лакальнай сеткі (напрыклад, http://192.168.x.x) НЕ лічыцца бяспечным: браўзеры адключаюць там SharedArrayBuffer.

Неадпаведнасць 00 61 73 6d / 1f 8b 08 08 з'яўляецца асобным сімптомам: у папярэдне сціснутых файлаў .wasm.gz / .data.gz няма загалоўка адказу Content-Encoding: gzip, таму браўзер атрымлівае сырыя байты gzip замест распакаванага WASM.

Рашэнне: дакладную канфігурацыю глядзіце ў кіраўніцтве для вашай платформы:

Праверка: адкрыйце кансоль DevTools на любой старонцы BentoPDF і выканайце:

js
console.log(window.crossOriginIsolated); // should be true
console.log(typeof SharedArrayBuffer); // should be "function"

Калі старонка працуе праз HTTPS або http://localhost І абодва загалоўкі COEP/COOP ёсць у кожным адказе, абедзве праверкі праходзяць. Калі вы на http://192.168.x.x або іншым не-loopback HTTP-адрасе, падключыце HTTPS: выпраўлення толькі загалоўкамі няма.

Файлы .mjs аддаюцца як application/octet-stream ​

Сімптом: Падпісаць PDF / Запаўненне форм / некаторыя іншыя інструменты паказваюць пусты праглядальнік або не загружаюцца. Кансоль браўзера паведамляе:

Failed to load module script: The server responded with a non-JavaScript MIME type of "application/octet-stream". Strict MIME type checking is enforced for module scripts per HTML spec.

Прычына: у вашым вэб-серверы або зваротным проксі няма адпаведнасці MIME-тыпу для файлаў .mjs (убудаваны праглядальнік PDF пастаўляецца з ES-модулямі з гэтым пашырэннем). Многія стандартныя канфігурацыі сервераў па змаўчанні аддаюць application/octet-stream для невядомых пашырэнняў, а браўзеры адмаўляюцца выконваць такое як ES-модулі.

Рашэнне: дакладны фрагмент глядзіце ў кіраўніцтве для вашай платформы:

Праверка: адкрыйце DevTools → укладка Network, знайдзіце няўдалы запыт .mjs і праверце загаловак адказу Content-Type. Ён павінен быць application/javascript. Калі ён усё яшчэ application/octet-stream, знешні зваротны проксі або CDN можа паўторна вызначаць тып: праверце кожны ўзровень ланцужка раздачы.

Канфігурацыя WASM (кампаненты AGPL) ​

BentoPDF не ўключае ў свой зыходны код бібліятэкі апрацоўкі пад ліцэнзіяй AGPL, але загадзя наладжвае URL CDN, каб усе функцыі працавалі адразу, без ручной налады.

Без налад па змаўчанні

Пачынаючы з v2.0.0, модулі WASM загадзя наладжаны на загрузку з CDN jsDelivr праз зменныя асяроддзя. Усе пашыраныя функцыі працуюць адразу без налад з боку карыстальніка.

КампанентЛіцэнзіяФункцыі
PyMuPDFAGPL-3.0Пераўтварэнне EPUB/MOBI/FB2/XPS, выманне выяў, выманне табліц
GhostscriptAGPL-3.0Пераўтварэнне ў PDF/A, сцісканне, выраўноўванне нахілу, растраванне
CoherentPDFAGPL-3.0Змест, далучэнні, аб'яднанне PDF з закладкамі

Зменныя асяроддзя па змаўчанні ​

Яны задаюцца ў .env.production і ўбудоўваюцца ў зборку:

bash
VITE_WASM_PYMUPDF_URL=https://cdn.jsdelivr.net/npm/@bentopdf/pymupdf-wasm@0.11.16/
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm@0.1.1/assets/
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/coherentpdf@2.5.5/dist/
VITE_TESSERACT_WORKER_URL=
VITE_TESSERACT_CORE_URL=
VITE_TESSERACT_LANG_URL=
VITE_TESSERACT_AVAILABLE_LANGUAGES=
VITE_OCR_FONT_BASE_URL=

Перавызначэнне URL для WASM ​

Значэнні па змаўчанні можна перавызначыць падчас зборкі для ўласных разгортванняў:

bash
# Via Docker build args
docker build \
  --build-arg VITE_WASM_PYMUPDF_URL=https://your-server.com/pymupdf/ \
  --build-arg VITE_WASM_GS_URL=https://your-server.com/gs/ \
  --build-arg VITE_WASM_CPDF_URL=https://your-server.com/cpdf/ \
  --build-arg VITE_TESSERACT_WORKER_URL=https://your-server.com/ocr/worker.min.js \
  --build-arg VITE_TESSERACT_CORE_URL=https://your-server.com/ocr/core \
  --build-arg VITE_TESSERACT_LANG_URL=https://your-server.com/ocr/lang-data \
  --build-arg VITE_TESSERACT_AVAILABLE_LANGUAGES=eng,deu \
  --build-arg VITE_OCR_FONT_BASE_URL=https://your-server.com/ocr/fonts \
  -t bentopdf .

# Or via .env.production before building from source
VITE_WASM_PYMUPDF_URL=https://your-server.com/pymupdf/ npm run build

Каб цалкам адключыць модуль (патрабуючы ручной налады карыстальнікам праз пашыраныя налады), задайце яго зменнай пусты радок.

Для OCR альбо пакіньце ўсе зменныя VITE_TESSERACT_* пустымі і выкарыстоўвайце стандартныя анлайн-рэсурсы, альбо задайце URL worker/core/lang разам для ўласнага або аўтаномнага OCR. Калі вы ўключаеце толькі пэўныя мовы OCR, таксама задайце VITE_TESSERACT_AVAILABLE_LANGUAGES з тымі ж кодамі праз коску, каб інтэрфейс прапаноўваў толькі ўсталяваныя мовы, а непадтрымліваемы выбар завяршаўся зразумелай памылкай. Для поўнасцю аўтаномнага выніку PDF з пошукам таксама задайце VITE_OCR_FONT_BASE_URL на ўнутраны каталог, які раздае ўбудаваныя шрыфты OCR.

Карыстальнікі таксама могуць у любы момант перавызначыць гэтыя значэнні праз Пашыраныя налады ў інтэрфейсе: перавызначэнні карыстальніка, захаваныя ў браўзеры, маюць прыярытэт над значэннямі асяроддзя.

Ізаляванае / аўтаномнае разгортванне ​

Для сетак без доступу да інтэрнэту (дзяржаўныя, медыцынскія, фінансавыя і г.д.). URL для WASM убудоўваюцца ў JavaScript падчас зборкі, а самі файлы WASM спампоўвае браўзер карыстальніка падчас выканання. Таму ўсё трэба падрыхтаваць на машыне з інтэрнэтам, а потым перанесці ў ізаляваную сетку.

Аўтаматычны скрыпт (рэкамендуецца) ​

Уключаны скрыпт prepare-airgap.sh аўтаматызуе ўвесь працэс: спампоўвае пакеты WASM, збірае вобраз Docker і стварае самадастатковы пакет са скрыптом усталявання.

bash
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf

# Show supported OCR language codes (for --ocr-languages)
bash scripts/prepare-airgap.sh --list-ocr-languages

# Search OCR language codes by name or abbreviation
bash scripts/prepare-airgap.sh --search-ocr-language german

# Interactive mode — prompts for all options
bash scripts/prepare-airgap.sh

# Or fully automated
bash scripts/prepare-airgap.sh --wasm-base-url https://internal.example.com/wasm

У выніку атрымаецца каталог пакета:

bentopdf-airgap-bundle/
  bentopdf.tar              # Docker image
  *.tgz                     # WASM packages (PyMuPDF, Ghostscript, CoherentPDF, Tesseract)
  tesseract-langdata/       # OCR traineddata files
  ocr-fonts/                # OCR text-layer font files
  setup.sh                  # Setup script for the air-gapped side
  README.md                 # Instructions

Перанясіце пакет у ізаляваную сетку праз USB, унутраны рэпазіторый артэфактаў або іншы дазволены спосаб. Затым запусціце ўключаны скрыпт усталявання:

bash
cd bentopdf-airgap-bundle
bash setup.sh

Скрыпт загружае вобраз Docker, распакоўвае файлы WASM і пры жаданні запускае кантэйнер.

Параметры скрыпта:

СцягАпісаннеПа змаўчанні
--wasm-base-url <url>Дзе WASM будуць размешчаны ўнутры сеткі(абавязкова, запытваецца, калі няма)
--image-name <name>Тэг вобраза Dockerbentopdf
--output-dir <path>Каталог выніковага пакета./bentopdf-airgap-bundle
--simple-modeУключыць Simple Modeвыкл.
--base-url <path>Базавы URL падкаталога (напрыклад, /pdf/)/
--language <code>Мова інтэрфейсу па змаўчанні (напрыклад, fr, de)(няма)
--brand-name <name>Уласная назва брэнда(няма)
--brand-logo <path>Шлях да лагатыпа адносна public/(няма)
--footer-text <text>Уласны тэкст ніжняга калантытула(няма)
--ocr-languages <list>Мовы OCR для ўключэння ў пакет праз коскуeng
--list-ocr-languagesВывесці падтрымліваемыя коды і назвы OCR і выйсцівыкл.
--search-ocr-language <term>Пошук кодаў OCR па назве або скарачэннівыкл.
--dockerfile <path>Dockerfile для выкарыстанняDockerfile
--skip-dockerПрапусціць зборку і экспарт Dockerвыкл.
--skip-wasmПрапусціць спампоўванне WASM (выкарыстаць існуючыя .tgz)выкл.

Інтэрактыўны рэжым таксама прымае list, каб вывесці поўны спіс падтрымліваемых кодаў Tesseract, і search <term> для пошуку адпаведнасцей, напрыклад search german або search chi.

Патрабаванне аднаго паходжання

Файлы WASM павінны раздавацца з таго ж паходжання (origin), што і праграма BentoPDF. Web Workers выкарыстоўваюць importScripts(), які не можа загружаць скрыпты з іншых паходжанняў. Напрыклад, калі BentoPDF працуе на https://internal.example.com, базавы URL для WASM таксама павінен быць https://internal.example.com/wasm.

Ручныя крокі ​

Калі вы аддаеце перавагу рабіць усё ўручную без скрыпта

Крок 1: Спампуйце пакеты WASM і OCR (на машыне з інтэрнэтам)

bash
npm pack @bentopdf/pymupdf-wasm@0.11.14
npm pack @bentopdf/gs-wasm
npm pack coherentpdf
npm pack tesseract.js@7.0.0
npm pack tesseract.js-core@7.0.0
mkdir -p tesseract-langdata
curl -fsSL https://cdn.jsdelivr.net/npm/@tesseract.js-data/eng/4.0.0_best_int/eng.traineddata.gz -o tesseract-langdata/eng.traineddata.gz
mkdir -p ocr-fonts
curl -fsSL https://raw.githack.com/googlefonts/noto-fonts/main/hinted/ttf/NotoSans/NotoSans-Regular.ttf -o ocr-fonts/NotoSans-Regular.ttf

Крок 2: Збярыце вобраз Docker з унутранымі URL

bash
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf

docker build \
  --build-arg VITE_WASM_PYMUPDF_URL=https://internal-server.example.com/wasm/pymupdf/ \
  --build-arg VITE_WASM_GS_URL=https://internal-server.example.com/wasm/gs/ \
  --build-arg VITE_WASM_CPDF_URL=https://internal-server.example.com/wasm/cpdf/ \
  --build-arg VITE_TESSERACT_WORKER_URL=https://internal-server.example.com/wasm/ocr/worker.min.js \
  --build-arg VITE_TESSERACT_CORE_URL=https://internal-server.example.com/wasm/ocr/core \
  --build-arg VITE_TESSERACT_LANG_URL=https://internal-server.example.com/wasm/ocr/lang-data \
  --build-arg VITE_OCR_FONT_BASE_URL=https://internal-server.example.com/wasm/ocr/fonts \
  -t bentopdf .

Крок 3: Экспартуйце вобраз Docker

bash
docker save bentopdf -o bentopdf.tar

Крок 4: Перанясіце ў ізаляваную сетку

Скапіруйце праз USB, унутраны рэпазіторый артэфактаў або іншы дазволены спосаб:

  • bentopdf.tar: вобраз Docker
  • Пяць пакетаў WASM/OCR .tgz з кроку 1
  • Каталог tesseract-langdata/ з кроку 1
  • Каталог ocr-fonts/ з кроку 1

Крок 5: Наладзьце ўнутры ізаляванай сеткі

bash
# Load the Docker image
docker load -i bentopdf.tar

# Extract WASM packages
mkdir -p ./wasm/pymupdf ./wasm/gs ./wasm/cpdf ./wasm/ocr/core ./wasm/ocr/lang-data ./wasm/ocr/fonts
tar xzf bentopdf-pymupdf-wasm-0.11.14.tgz -C ./wasm/pymupdf --strip-components=1
tar xzf bentopdf-gs-wasm-*.tgz -C ./wasm/gs --strip-components=1
tar xzf coherentpdf-*.tgz -C ./wasm/cpdf --strip-components=1
TEMP_TESS=$(mktemp -d)
tar xzf tesseract.js-7.0.0.tgz -C "$TEMP_TESS"
cp "$TEMP_TESS/package/dist/worker.min.js" ./wasm/ocr/worker.min.js
rm -rf "$TEMP_TESS"
tar xzf tesseract.js-core-7.0.0.tgz -C ./wasm/ocr/core --strip-components=1
cp ./tesseract-langdata/*.traineddata.gz ./wasm/ocr/lang-data/
cp ./ocr-fonts/* ./wasm/ocr/fonts/

# Run BentoPDF
docker run -d -p 3000:8080 --restart unless-stopped bentopdf

Пераканайцеся, што файлы даступныя па URL, наладжаных на кроку 2, уключаючы .../ocr/worker.min.js, .../ocr/core, .../ocr/lang-data і .../ocr/fonts.

Збіраеце з зыходнага кода замест Docker?

Задайце зменныя ў .env.production перад запускам npm run build:

bash
VITE_WASM_PYMUPDF_URL=https://internal-server.example.com/wasm/pymupdf/
VITE_WASM_GS_URL=https://internal-server.example.com/wasm/gs/
VITE_WASM_CPDF_URL=https://internal-server.example.com/wasm/cpdf/
VITE_TESSERACT_WORKER_URL=https://internal-server.example.com/wasm/ocr/worker.min.js
VITE_TESSERACT_CORE_URL=https://internal-server.example.com/wasm/ocr/core
VITE_TESSERACT_LANG_URL=https://internal-server.example.com/wasm/ocr/lang-data
VITE_OCR_FONT_BASE_URL=https://internal-server.example.com/wasm/ocr/fonts

Уласны проксі для WASM ​

Калі трэба раздаваць файлы WASM пад AGPL з правільнымі загалоўкамі CORS, можна разгарнуць просты проксі. Прыклад рэалізацыі ёсць у кіраўніцтве па Cloudflare WASM Proxy.

Чаму асобна?

Такое раздзяленне забяспечвае:

  • Зразумелую юрыдычную адпаведнасць для камерцыйных карыстальнікаў
  • Ядро BentoPDF застаецца пад двайной ліцэнзіяй (AGPL-3.0 / камерцыйная)
  • Файлы WASM загружаюцца падчас выканання, а не ўключаюцца ў зыходны код

Сістэмныя патрабаванні ​

ПатрабаваннеМінімум
Сховішча~100 MB (ядро без модуляў AGPL)
RAM512 MB
CPUЛюбы сучасны працэсар

TIP

BentoPDF з'яўляецца статычным сайтам: ніякая база даных або бэкэнд-сервер не патрэбныя!

Двайная ліцэнзія: AGPL-3.0 і камерцыйная ліцэнзія.