mirror of
https://github.com/alam00000/bentopdf.git
synced 2026-11-05 20:02:47 +01:00
123 lines
4.9 KiB
Markdown
123 lines
4.9 KiB
Markdown
# Развертывание в Vercel
|
||
|
||
[Vercel](https://vercel.com) предлагает самый простой способ развертывания статических сайтов.
|
||
|
||
## Развертывание в один клик
|
||
|
||
[](https://vercel.com/new/clone?repository-url=https://github.com/alam00000/bentopdf)
|
||
|
||
## Ручное развертывание
|
||
|
||
### Шаг 1: Сделайте форк репозитория
|
||
|
||
Сделайте форк [bentopdf/bentopdf](https://github.com/alam00000/bentopdf) в свой аккаунт GitHub.
|
||
|
||
### Шаг 2: Импортируйте в Vercel
|
||
|
||
1. Перейдите на [vercel.com/new](https://vercel.com/new)
|
||
2. Выберите свой форк репозитория
|
||
3. Настройте проект:
|
||
|
||
| Параметр | Значение |
|
||
| ---------------- | --------------- |
|
||
| Framework Preset | Vite |
|
||
| Build Command | `npm run build` |
|
||
| Output Directory | `dist` |
|
||
| Install Command | `npm install` |
|
||
|
||
### Шаг 3: Переменные окружения (необязательно)
|
||
|
||
Добавьте их при необходимости:
|
||
|
||
| Переменная | Описание |
|
||
| ----------------------- | ----------------------------------------------------------------------- |
|
||
| `SIMPLE_MODE` | Укажите `true` для минимального интерфейса |
|
||
| `VITE_BRAND_NAME` | Свое название бренда (заменяет «BentoPDF») |
|
||
| `VITE_BRAND_LOGO` | Путь к логотипу относительно `public/` (например, `images/my-logo.svg`) |
|
||
| `VITE_FOOTER_TEXT` | Свой текст подвала и авторских прав |
|
||
| `VITE_DEFAULT_LANGUAGE` | Язык интерфейса по умолчанию (например, `fr`, `de`, `es`) |
|
||
|
||
### Шаг 4: Разверните
|
||
|
||
Нажмите «Deploy» и дождитесь завершения сборки.
|
||
|
||
## Собственный домен
|
||
|
||
1. Откройте настройки проекта
|
||
2. Перейдите в раздел «Domains»
|
||
3. Добавьте свой домен
|
||
4. Настройте DNS по инструкции
|
||
|
||
## Ограничения
|
||
|
||
::: warning Большие файлы
|
||
У serverless-функций Vercel есть ограничение в 50 МБ. Поскольку BentoPDF является статическим сайтом, это не должно вас затронуть, но модули WASM велики (около 100 МБ в сумме). Убедитесь, что они раздаются из папки `/public`.
|
||
:::
|
||
|
||
## Устранение неполадок
|
||
|
||
### Тайм-аут сборки
|
||
|
||
Если сборка завершается по тайм-ауту, попробуйте:
|
||
|
||
```json
|
||
// vercel.json
|
||
{
|
||
"buildCommand": "npm run build",
|
||
"outputDirectory": "dist"
|
||
}
|
||
```
|
||
|
||
### Ошибка 404 при обновлении страницы
|
||
|
||
Добавьте `vercel.json` для маршрутизации SPA:
|
||
|
||
```json
|
||
{
|
||
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
|
||
}
|
||
```
|
||
|
||
### Конвертация Word/ODT/Excel в PDF не работает
|
||
|
||
Для конвертации через LibreOffice WASM нужен `SharedArrayBuffer`, а для него на всех страницах должны быть следующие заголовки ответа:
|
||
|
||
- `Cross-Origin-Embedder-Policy: require-corp`
|
||
- `Cross-Origin-Opener-Policy: same-origin`
|
||
|
||
Предварительно сжатым файлам `.wasm.gz` и `.data.gz` также нужен заголовок `Content-Encoding: gzip`, чтобы браузер их распаковывал.
|
||
|
||
Добавьте это в свой `vercel.json`:
|
||
|
||
```json
|
||
{
|
||
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }],
|
||
"headers": [
|
||
{
|
||
"source": "/(.*)",
|
||
"headers": [
|
||
{ "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" },
|
||
{ "key": "Cross-Origin-Opener-Policy", "value": "same-origin" },
|
||
{ "key": "Cross-Origin-Resource-Policy", "value": "cross-origin" }
|
||
]
|
||
},
|
||
{
|
||
"source": "/libreoffice-wasm/soffice.wasm.gz",
|
||
"headers": [
|
||
{ "key": "Content-Type", "value": "application/wasm" },
|
||
{ "key": "Content-Encoding", "value": "gzip" }
|
||
]
|
||
},
|
||
{
|
||
"source": "/libreoffice-wasm/soffice.data.gz",
|
||
"headers": [
|
||
{ "key": "Content-Type", "value": "application/octet-stream" },
|
||
{ "key": "Content-Encoding", "value": "gzip" }
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
Для проверки откройте консоль DevTools и выполните `console.log(window.crossOriginIsolated)`: должно вернуться `true`.
|