mirror of
https://github.com/alam00000/bentopdf.git
synced 2026-11-05 20:02:47 +01:00
539 lines
26 KiB
Markdown
539 lines
26 KiB
Markdown
# Príručka pre vlastný hosting
|
|
|
|
BentoPDF môžete hostovať na vlastnej infraštruktúre. Táto príručka pokrýva rôzne možnosti nasadenia.
|
|
|
|
## Rýchly štart s Docker / Podman
|
|
|
|
Najrýchlejší spôsob, ako hostovať BentoPDF vo vlastnej réžii:
|
|
|
|
> [!TIP]
|
|
> BentoPDF sa dodáva v dvoch zostaveniach:
|
|
>
|
|
> - **Zostavenie Self-Hosted**: `ghcr.io/alam00000/bentopdf-simple:latest`. Všetky PDF nástroje, **bez** marketingových prvkov (bez úvodnej sekcie, FAQ, referencií a päty). Použite ho pre interné, tímové a organizačné nasadenia. **Nie je** to funkčne obmedzená verzia „lite“.
|
|
> - **Komerčné zostavenie**: `ghcr.io/alam00000/bentopdf:latest`. Kompletný marketingový web, ktorý používa samotný bentopdf.com a držitelia komerčnej licencie pri verejných nasadeniach.
|
|
>
|
|
> Ak si nie ste istí, stiahnite zostavenie Self-Hosted.
|
|
|
|
> [!IMPORTANT]
|
|
> Konverzia súborov Office vyžaduje `SharedArrayBuffer`, čo znamená, že aplikácia musí byť izolovaná z hľadiska cross-origin a zároveň poskytovaná zo zabezpečeného kontextu. Oficiálny obraz už posiela potrebné hlavičky COOP/COEP, prehliadače však `SharedArrayBuffer` stále vypínajú na obyčajných HTTP pôvodoch v lokálnej sieti, ako je `http://192.168.x.x`.
|
|
>
|
|
> `http://localhost` používajte len na testovanie na tom istom zariadení. Ak používatelia pristupujú k BentoPDF cez IP adresu alebo názov hostiteľa v LAN, zabezpečte ho cez 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
|
|
```
|
|
|
|
Alebo pomocou 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)
|
|
|
|
Spustite BentoPDF ako službu systemd. Vytvorte `~/.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
|
|
```
|
|
|
|
Kompletnú dokumentáciu ku Quadlet nájdete v [príručke nasadenia Docker](/sk/self-hosting/docker).
|
|
|
|
## Zostavenie zo zdrojového kódu
|
|
|
|
```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
|
|
```
|
|
|
|
## Možnosti konfigurácie
|
|
|
|
### Zostavenie Self-Hosted (Simple Mode)
|
|
|
|
Zostavenie Self-Hosted (obraz `bentopdf-simple`, nazývaný aj Simple Mode) je **funkčne identické** s komerčným zostavením: obsahuje všetky PDF nástroje a tie sa správajú rovnako. Iba skrýva marketingové prvky, ktoré dávajú zmysel len na samotnom bentopdf.com alebo pri komerčnom verejnom nasadení. **Nie je to funkčne obmedzená ani „lite“ verzia.**
|
|
|
|
**Čo zostavenie Self-Hosted skrýva** (len kozmetické zmeny, žiadne PDF funkcie sa neodstraňujú):
|
|
|
|
- Navigačnú lištu, úvodnú sekciu, sekciu funkcií, FAQ, referencie, pätu
|
|
- Mení titulok stránky na „Nástroje PDF“
|
|
|
|
**Čo zostavenie Self-Hosted zachováva** (všetko, čo skutočne pracuje s PDF):
|
|
|
|
- Všetky PDF nástroje (spájanie, rozdeľovanie, úpravy, podpisovanie, OCR, konverzia Office atď.)
|
|
- Podporu vlastnej značky, všetku konfiguráciu pri zostavení aj za behu
|
|
|
|
Komerčné zostavenie (`ghcr.io/alam00000/bentopdf:latest`) poháňa samotný bentopdf.com a používajú ho držitelia komerčnej licencie pri verejných nasadeniach. Pridáva úvodnú sekciu, FAQ, referencie a pätu, ktoré by pri internom nástroji nedávali zmysel.
|
|
|
|
Ak hostujete BentoPDF pre svoj tím, organizáciu alebo ako interný nástroj, stiahnite zostavenie Self-Hosted:
|
|
|
|
```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
|
|
```
|
|
|
|
Všetky podrobnosti nájdete v [SIMPLE_MODE.md](https://github.com/alam00000/bentopdf/blob/main/SIMPLE_MODE.md).
|
|
|
|
### Komerčné zostavenie (verejné nasadenia pod vlastnou značkou)
|
|
|
|
Komerčné zostavenie (obraz `bentopdf`, bez prípony `-simple`) poháňa samotný bentopdf.com. Okrem všetkých PDF nástrojov obsahuje kompletný marketingový web (úvodná sekcia, funkcie, FAQ, referencie, päta). Toto zostavenie použite, keď chcete **nasadiť BentoPDF ako verejnú PDF službu pod vlastnou značkou**, napríklad:
|
|
|
|
- Prevádzkujete BentoPDF ako hostovanú SaaS službu pre koncových používateľov na vlastnej doméne
|
|
- Chcete zážitok úvodnej stránky (marketingové sekcie + nástroje), nie len samotné nástroje
|
|
- Ste držiteľom komerčnej licencie a integrujete BentoPDF do komerčného produktu
|
|
|
|
**Spustenie bez úprav** (so značkou BentoPDF, užitočné na náhľad zostavenia):
|
|
|
|
```bash
|
|
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
|
```
|
|
|
|
**Zostavenie s vlastnou značkou** (typický komerčný postup):
|
|
|
|
```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
|
|
```
|
|
|
|
Všetky ostatné možnosti pri zostavení (`BASE_URL`, `VITE_DEFAULT_LANGUAGE`, `DISABLE_TOOLS`, prepísanie URL pre WASM atď.) fungujú rovnako ako pri zostavení Self-Hosted.
|
|
|
|
::: warning Licencovanie
|
|
Prevádzka komerčného zostavenia je povolená v rámci ktorejkoľvek z dvoch licenčných možností BentoPDF:
|
|
|
|
- **AGPL-3.0** (zadarmo): povolené, ak vaše nasadenie zverejní celý svoj zdrojový kód pod AGPL vrátane všetkých úprav značky a súvisiacej obchodnej logiky.
|
|
- **Komerčná licencia** (79 $ doživotne): potrebná pre uzavreté / proprietárne nasadenia, kde nezverejňujete svoj fork so značkou ani obchodný kód.
|
|
|
|
Úplné porovnanie nájdete na [stránke licencovania](https://www.bentopdf.com/licensing). WASM moduly pod licenciou AGPL (PyMuPDF, Ghostscript, CoherentPDF) sa načítavajú z CDN za behu, takže sa nedostanú do vášho obrazu a nemenia vašu licenčnú pozíciu.
|
|
:::
|
|
|
|
### Základná URL
|
|
|
|
Nasadenie do podadresára:
|
|
|
|
```bash
|
|
BASE_URL=/pdf-tools/ npm run build
|
|
```
|
|
|
|
### Vlastná značka
|
|
|
|
Pri zostavení nahraďte predvolené logo, názov a text päty BentoPDF vlastnými:
|
|
|
|
| Premenná | Popis | Predvolené |
|
|
| ------------------ | ----------------------------------- | --------------------------------------- |
|
|
| `VITE_BRAND_NAME` | Názov značky v hlavičke a päte | `BentoPDF` |
|
|
| `VITE_BRAND_LOGO` | Cesta k logu relatívne k `public/` | `images/favicon-no-bg.svg` |
|
|
| `VITE_FOOTER_TEXT` | Vlastný text päty / autorských práv | `© 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
|
|
```
|
|
|
|
Alebo cez 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 .
|
|
```
|
|
|
|
Vlastná značka funguje v plnom režime aj v Simple Mode a dá sa kombinovať so všetkými ostatnými možnosťami pri zostavení (`BASE_URL`, `SIMPLE_MODE`, `VITE_DEFAULT_LANGUAGE`).
|
|
|
|
### Vypnutie konkrétnych nástrojov
|
|
|
|
Skryte jednotlivé nástroje z dôvodu súladu s predpismi alebo bezpečnosti. Vypnuté nástroje sa odstránia z domovskej stránky, vyhľadávania, skratiek, nástroja na tvorbu workflow aj z priameho prístupu cez URL.
|
|
|
|
ID nástroja je URL stránky bez `.html`: otvorte ľubovoľný nástroj a pozrite sa na URL (napr. `edit-pdf`, `sign-pdf`, `encrypt-pdf`).
|
|
|
|
**Pri zostavení** (zapečené do balíka):
|
|
|
|
```bash
|
|
DISABLE_TOOLS="edit-pdf,sign-pdf" npm run build
|
|
```
|
|
|
|
**Za behu** (bez nového zostavenia, stačí pripojiť `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
|
|
```
|
|
|
|
Obe metódy sa dajú kombinovať, zoznamy sa zlúčia.
|
|
|
|
V PDF editore môžete vypnúť aj konkrétne funkcie (napr. redigovanie) bez vypnutia celého nástroja, a to pridaním `editorDisabledCategories` do `config.json`. Úplný zoznam kategórií nájdete v [príručke Docker](/sk/self-hosting/docker#vypnutie-funkcii-editora).
|
|
|
|
## Príručky nasadenia
|
|
|
|
Vyberte si platformu:
|
|
|
|
- [Vercel](/sk/self-hosting/vercel)
|
|
- [Netlify](/sk/self-hosting/netlify)
|
|
- [Cloudflare Pages](/sk/self-hosting/cloudflare)
|
|
- [AWS S3 + CloudFront](/sk/self-hosting/aws)
|
|
- [Hostinger](/sk/self-hosting/hostinger)
|
|
- [Nginx](/sk/self-hosting/nginx)
|
|
- [Apache](/sk/self-hosting/apache)
|
|
- [Docker](/sk/self-hosting/docker)
|
|
- [Kubernetes](/sk/self-hosting/kubernetes)
|
|
- [CORS proxy](/sk/self-hosting/cors-proxy) - Potrebný pre digitálne podpisy
|
|
|
|
## Časté problémy
|
|
|
|
### Konverzia Word / ODT / Excel / PowerPoint do PDF zamrzne (SharedArrayBuffer nie je dostupný)
|
|
|
|
**Príznak**: Konverzie dokumentov založené na LibreOffice (Word, ODT, Excel, PowerPoint do PDF) zamrznú na ~55 % alebo sa vôbec nespustia. Konzola prehliadača môže zobraziť:
|
|
|
|
> `ReferenceError: SharedArrayBuffer is not defined`
|
|
|
|
…alebo `window.crossOriginIsolated` hlási `false`, alebo kompilácia WASM hlási `expected magic word 00 61 73 6d, found 1f 8b 08 08`.
|
|
|
|
**Príčina**: LibreOffice WASM vyžaduje `SharedArrayBuffer`, ktorý prehliadač povolí, len keď je stránka **izolovaná z hľadiska cross-origin** A ZÁROVEŇ poskytovaná zo **zabezpečeného kontextu**. Musia teda platiť dve veci:
|
|
|
|
1. Každá odpoveď obsahuje obe hlavičky:
|
|
- `Cross-Origin-Embedder-Policy: require-corp`
|
|
- `Cross-Origin-Opener-Policy: same-origin`
|
|
2. Stránka sa poskytuje z `https://...` alebo `http://localhost`. Obyčajné HTTP na IP adrese v LAN (napr. `http://192.168.x.x`) sa NEPOVAŽUJE za zabezpečené, prehliadače tam `SharedArrayBuffer` vypínajú.
|
|
|
|
Nezhoda `00 61 73 6d / 1f 8b 08 08` je samostatný čiastkový príznak: vopred skomprimovaným súborom `.wasm.gz` / `.data.gz` chýba hlavička odpovede `Content-Encoding: gzip`, takže prehliadač dostane surové gzip bajty namiesto dekomprimovaného WASM.
|
|
|
|
**Riešenie**: presnú konfiguráciu nájdete v príručke nasadenia pre vašu platformu:
|
|
|
|
- [Nginx →](/sk/self-hosting/nginx#konverzia-word-odt-excel-do-pdf-nefunguje)
|
|
- [Apache →](/sk/self-hosting/apache#prevod-word-odt-excel-do-pdf-nefunguje)
|
|
- [AWS S3 + CloudFront →](/sk/self-hosting/aws#krok-3b-politika-hlaviciek-odpovede-potrebna-pre-libreoffice-wasm)
|
|
- [Cloudflare Pages →](/sk/self-hosting/cloudflare#konfiguracny-subor) (súbor `_headers`)
|
|
- [Netlify →](/sk/self-hosting/netlify#konverzia-word-odt-excel-do-pdf-sa-zasekne-na-55) (`netlify.toml`)
|
|
- [Vercel →](/sk/self-hosting/vercel#konverzia-word-odt-excel-do-pdf-nefunguje) (`vercel.json`)
|
|
- [Hostinger →](/sk/self-hosting/hostinger#nastroje-libreoffice-nefunguju) (`.htaccess`)
|
|
- [Kubernetes →](/sk/self-hosting/kubernetes#ako-zabezpecit-aby-hlavicky-sharedarraybuffer-stale-fungovali-ingress-gateway)
|
|
- **Docker**: rieši sa automaticky pribalenou konfiguráciou nginx, nie je potrebný žiadny zásah.
|
|
|
|
**Overenie**: otvorte konzolu DevTools na ľubovoľnej stránke BentoPDF a spustite:
|
|
|
|
```js
|
|
console.log(window.crossOriginIsolated); // should be true
|
|
console.log(typeof SharedArrayBuffer); // should be "function"
|
|
```
|
|
|
|
Ak je stránka na HTTPS alebo `http://localhost` A ZÁROVEŇ sú na každej odpovedi prítomné obe hlavičky COEP/COOP, obe kontroly prejdú. Ak ste na `http://192.168.x.x` alebo inom HTTP pôvode mimo loopback, zabezpečte ho cez HTTPS, riešenie len pomocou hlavičiek neexistuje.
|
|
|
|
### Súbory `.mjs` sa poskytujú ako `application/octet-stream`
|
|
|
|
**Príznak**: Podpísať PDF / Vyplňovač formulárov / niektoré ďalšie nástroje zobrazia prázdny prehliadač alebo sa nenačítajú. Konzola prehliadača hlási:
|
|
|
|
> `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.`
|
|
|
|
**Príčina**: Váš webový server alebo reverzný proxy nemá mapovanie MIME typu pre súbory `.mjs` (pribalený PDF prehliadač dodáva ES moduly s touto príponou). Mnohé štandardné konfigurácie serverov používajú pre neznáme prípony predvolene `application/octet-stream` a prehliadače ich odmietnu spustiť ako ES moduly.
|
|
|
|
**Riešenie**: presný úryvok nájdete v príručke nasadenia pre vašu platformu:
|
|
|
|
- [Nginx →](/sk/self-hosting/nginx#podpisat-pdf-alebo-vyplnovac-formularov-zobrazuje-prazdny-prehliadac-chyba-mime-mjs)
|
|
- [Apache →](/sk/self-hosting/apache#podpisat-pdf-alebo-vyplnanie-formularov-zobrazuje-prazdny-prehliadac-chyba-mime-pri-mjs)
|
|
- [AWS S3 + CloudFront →](/sk/self-hosting/aws#krok-2-zostavenie-a-nahranie) (pozri `aws s3 cp ... --include "*.mjs"`)
|
|
- [Kubernetes →](/sk/self-hosting/kubernetes#chyby-mime-typu-mjs-prazdny-iframe-v-podpisat-pdf-vyplnovac-formularov)
|
|
- **Docker, Vercel, Netlify, Cloudflare Pages, Hostinger**: rieši sa automaticky, nie je potrebný žiadny zásah.
|
|
|
|
**Overenie**: otvorte DevTools → kartu Network, nájdite zlyhávajúcu požiadavku `.mjs` a skontrolujte hlavičku odpovede `Content-Type`. Mala by byť `application/javascript`. Ak je stále `application/octet-stream`, typ môže znova určovať vonkajší reverzný proxy alebo CDN, skontrolujte každú vrstvu v reťazci.
|
|
|
|
## Konfigurácia WASM (komponenty AGPL)
|
|
|
|
BentoPDF **nepribaľuje** knižnice na spracovanie pod licenciou AGPL do svojho zdrojového kódu, ale **má predkonfigurované URL adresy CDN**, takže všetky funkcie fungujú hneď po inštalácii, bez ručného nastavovania.
|
|
|
|
::: tip Predvolene bez konfigurácie
|
|
Od verzie v2.0.0 sú WASM moduly predkonfigurované tak, aby sa načítavali z CDN jsDelivr cez premenné prostredia. Všetky pokročilé funkcie fungujú okamžite bez akejkoľvek konfigurácie zo strany používateľa.
|
|
:::
|
|
|
|
| Komponent | Licencia | Funkcie |
|
|
| --------------- | -------- | ------------------------------------------------------------------- |
|
|
| **PyMuPDF** | AGPL-3.0 | Konverzia EPUB/MOBI/FB2/XPS, extrakcia obrázkov, extrakcia tabuliek |
|
|
| **Ghostscript** | AGPL-3.0 | Konverzia do PDF/A, kompresia, vyrovnanie, rasterizácia |
|
|
| **CoherentPDF** | AGPL-3.0 | Obsah, prílohy, spájanie PDF so záložkami |
|
|
|
|
### Predvolené premenné prostredia
|
|
|
|
Sú nastavené v `.env.production` a zapečené do zostavenia:
|
|
|
|
```bash
|
|
VITE_WASM_PYMUPDF_URL=https://cdn.jsdelivr.net/npm/@bentopdf/[email protected]/
|
|
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/[email protected]/assets/
|
|
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/[email protected]/dist/
|
|
VITE_TESSERACT_WORKER_URL=
|
|
VITE_TESSERACT_CORE_URL=
|
|
VITE_TESSERACT_LANG_URL=
|
|
VITE_TESSERACT_AVAILABLE_LANGUAGES=
|
|
VITE_OCR_FONT_BASE_URL=
|
|
```
|
|
|
|
### Prepísanie URL adries WASM
|
|
|
|
Pre vlastné nasadenia môžete predvolené hodnoty prepísať pri zostavení:
|
|
|
|
```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
|
|
```
|
|
|
|
Ak chcete modul úplne vypnúť (vyžaduje ručnú konfiguráciu používateľom v Pokročilých nastaveniach), nastavte jeho premennú na prázdny reťazec.
|
|
|
|
Pre OCR buď nechajte všetky premenné `VITE_TESSERACT_*` prázdne a ponechajte predvolené online zdroje, alebo nastavte URL pre worker/core/lang spolu pre vlastné hostované / offline OCR. Ak pribalíte len konkrétne jazyky OCR, nastavte aj `VITE_TESSERACT_AVAILABLE_LANGUAGES` na rovnaké kódy oddelené čiarkami, aby rozhranie ponúkalo len nainštalované jazyky a nepodporovaný výber zlyhal s popisnou chybou. Pre úplne offline výstup prehľadávateľného PDF nastavte aj `VITE_OCR_FONT_BASE_URL` na interný adresár, ktorý poskytuje pribalené OCR písma.
|
|
|
|
Používatelia môžu tieto predvolené hodnoty kedykoľvek prepísať aj v **Pokročilých nastaveniach** v rozhraní: používateľské nastavenia uložené v prehliadači majú prednosť pred predvolenými hodnotami prostredia.
|
|
|
|
### Nasadenie v izolovanej sieti (air-gapped) / offline
|
|
|
|
Pre siete bez prístupu na internet (štátna správa, zdravotníctvo, financie atď.). URL adresy WASM sa zapečú do JavaScriptu **pri zostavení**, samotné WASM súbory sťahuje **prehliadač používateľa** za behu. Preto musíte všetko pripraviť na počítači s internetom a potom to preniesť do izolovanej siete.
|
|
|
|
#### Automatizovaný skript (odporúčané)
|
|
|
|
Priložený skript `prepare-airgap.sh` automatizuje celý proces: stiahne WASM balíky, zostaví Docker obraz a vytvorí samostatný balík s inštalačným skriptom.
|
|
|
|
```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
|
|
```
|
|
|
|
Vznikne adresár s balíkom:
|
|
|
|
```
|
|
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
|
|
```
|
|
|
|
Preneste balík do izolovanej siete cez USB, interný repozitár artefaktov alebo schválenou metódou. Potom spustite priložený inštalačný skript:
|
|
|
|
```bash
|
|
cd bentopdf-airgap-bundle
|
|
bash setup.sh
|
|
```
|
|
|
|
Inštalačný skript načíta Docker obraz, rozbalí WASM súbory a voliteľne spustí kontajner.
|
|
|
|
**Možnosti skriptu:**
|
|
|
|
| Prepínač | Popis | Predvolené |
|
|
| ------------------------------ | ---------------------------------------------------- | --------------------------------- |
|
|
| `--wasm-base-url <url>` | Kde budú WASM súbory interne hostované | _(povinné, ak chýba, vyžiada sa)_ |
|
|
| `--image-name <name>` | Tag Docker obrazu | `bentopdf` |
|
|
| `--output-dir <path>` | Výstupný adresár balíka | `./bentopdf-airgap-bundle` |
|
|
| `--simple-mode` | Zapnúť Simple Mode | vypnuté |
|
|
| `--base-url <path>` | Základná URL podadresára (napr. `/pdf/`) | `/` |
|
|
| `--language <code>` | Predvolený jazyk rozhrania (napr. `fr`, `de`) | _(žiadne)_ |
|
|
| `--brand-name <name>` | Vlastný názov značky | _(žiadne)_ |
|
|
| `--brand-logo <path>` | Cesta k logu relatívne k `public/` | _(žiadne)_ |
|
|
| `--footer-text <text>` | Vlastný text päty | _(žiadne)_ |
|
|
| `--ocr-languages <list>` | Jazyky OCR na pribalenie, oddelené čiarkami | `eng` |
|
|
| `--list-ocr-languages` | Vypíše podporované kódy a názvy OCR a skončí | vypnuté |
|
|
| `--search-ocr-language <term>` | Vyhľadá kódy OCR podľa názvu alebo skratky | vypnuté |
|
|
| `--dockerfile <path>` | Použitý Dockerfile | `Dockerfile` |
|
|
| `--skip-docker` | Preskočiť zostavenie a export Docker obrazu | vypnuté |
|
|
| `--skip-wasm` | Preskočiť sťahovanie WASM (použiť existujúce `.tgz`) | vypnuté |
|
|
|
|
Interaktívna výzva prijíma aj `list` na vypísanie celého zoznamu podporovaných kódov Tesseract a `search <term>` na hľadanie zhôd, napríklad `search german` alebo `search chi`.
|
|
|
|
::: warning Požiadavka na rovnaký pôvod
|
|
WASM súbory musia byť poskytované z **rovnakého pôvodu** ako aplikácia BentoPDF. Web Workers používajú `importScripts()`, ktorý nedokáže načítať skripty z iného pôvodu. Ak napríklad BentoPDF beží na `https://internal.example.com`, základná URL pre WASM by mala byť tiež `https://internal.example.com/wasm`.
|
|
:::
|
|
|
|
#### Ručný postup
|
|
|
|
<details>
|
|
<summary>Ak to chcete urobiť ručne bez skriptu</summary>
|
|
|
|
**Krok 1: Stiahnite balíky WASM a OCR** (na počítači s internetom)
|
|
|
|
```bash
|
|
npm pack @bentopdf/[email protected]
|
|
npm pack @bentopdf/gs-wasm
|
|
npm pack coherentpdf
|
|
npm pack [email protected]
|
|
npm pack [email protected]
|
|
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
|
|
```
|
|
|
|
**Krok 2: Zostavte Docker obraz s internými URL adresami**
|
|
|
|
```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 .
|
|
```
|
|
|
|
**Krok 3: Exportujte Docker obraz**
|
|
|
|
```bash
|
|
docker save bentopdf -o bentopdf.tar
|
|
```
|
|
|
|
**Krok 4: Preneste súbory do izolovanej siete**
|
|
|
|
Skopírujte cez USB, interný repozitár artefaktov alebo schválenou metódou prenosu:
|
|
|
|
- `bentopdf.tar`: Docker obraz
|
|
- Päť balíkov WASM/OCR `.tgz` z kroku 1
|
|
- Adresár `tesseract-langdata/` z kroku 1
|
|
- Adresár `ocr-fonts/` z kroku 1
|
|
|
|
**Krok 5: Nastavenie v izolovanej sieti**
|
|
|
|
```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
|
|
```
|
|
|
|
Uistite sa, že súbory sú dostupné na URL adresách nastavených v kroku 2 vrátane `.../ocr/worker.min.js`, `.../ocr/core`, `.../ocr/lang-data` a `.../ocr/fonts`.
|
|
|
|
</details>
|
|
|
|
::: info Zostavujete zo zdrojového kódu namiesto Docker?
|
|
Pred spustením `npm run build` nastavte premenné v `.env.production`:
|
|
|
|
```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
|
|
```
|
|
|
|
:::
|
|
|
|
### Hostovanie vlastného WASM proxy
|
|
|
|
Ak potrebujete poskytovať AGPL WASM súbory so správnymi hlavičkami CORS, môžete nasadiť jednoduchý proxy. Príklad implementácie nájdete v [príručke Cloudflare WASM Proxy](https://github.com/alam00000/bentopdf/blob/main/cloudflare/WASM-PROXY.md).
|
|
|
|
::: tip Prečo oddelene?
|
|
Toto oddelenie zaručuje:
|
|
|
|
- Jasný súlad s licenciami pre komerčných používateľov
|
|
- Jadro BentoPDF zostáva pod duálnou licenciou (AGPL-3.0 / komerčná)
|
|
- WASM súbory sa načítavajú za behu, nie sú pribalené v zdrojovom kóde
|
|
:::
|
|
|
|
## Systémové požiadavky
|
|
|
|
| Požiadavka | Minimum |
|
|
| ---------- | -------------------------------- |
|
|
| Úložisko | ~100 MB (jadro bez modulov AGPL) |
|
|
| RAM | 512 MB |
|
|
| CPU | Akýkoľvek moderný procesor |
|
|
|
|
::: tip
|
|
BentoPDF je statický web, nepotrebuje žiadnu databázu ani backendový server!
|
|
:::
|