mirror of
https://github.com/alam00000/bentopdf.git
synced 2026-11-05 20:02:47 +01:00
155 lines
4.3 KiB
Markdown
155 lines
4.3 KiB
Markdown
# 部署到 Cloudflare Pages
|
||
|
||
[Cloudflare Pages](https://pages.cloudflare.com) 提供快速、全球化且頻寬無上限的靜態網站託管。
|
||
|
||
## 快速部署
|
||
|
||
1. 前往 [Cloudflare Pages](https://dash.cloudflare.com/?to=/:account/pages)
|
||
2. 點選「Create a project」
|
||
3. 連結您的 GitHub 儲存庫
|
||
|
||
## 建置設定
|
||
|
||
| 設定項目 | 值 |
|
||
| ---------------------- | --------------- |
|
||
| Framework preset | None |
|
||
| Build command | `npm run build` |
|
||
| Build output directory | `dist` |
|
||
| Root directory | `/` |
|
||
|
||
## 環境變數
|
||
|
||
在 Settings → Environment variables 中加入以下項目:
|
||
|
||
| 變數 | 值 |
|
||
| ----------------------- | ----------------------------------- |
|
||
| `NODE_VERSION` | `18` |
|
||
| `SIMPLE_MODE` | `false`(選填) |
|
||
| `VITE_BRAND_NAME` | 自訂品牌名稱(選填) |
|
||
| `VITE_BRAND_LOGO` | 相對於 `public/` 的標誌路徑(選填) |
|
||
| `VITE_FOOTER_TEXT` | 自訂頁尾/版權文字(選填) |
|
||
| `VITE_DEFAULT_LANGUAGE` | 預設介面語言,例如 `fr`(選填) |
|
||
|
||
## 設定檔
|
||
|
||
在您的 `public` 資料夾中建立 `_headers`:
|
||
|
||
```
|
||
# Required security headers for SharedArrayBuffer (used by LibreOffice WASM)
|
||
/*
|
||
Cross-Origin-Embedder-Policy: require-corp
|
||
Cross-Origin-Opener-Policy: same-origin
|
||
Cross-Origin-Resource-Policy: cross-origin
|
||
|
||
# Pre-compressed LibreOffice WASM binary
|
||
/libreoffice-wasm/soffice.wasm.gz
|
||
Content-Type: application/wasm
|
||
Content-Encoding: gzip
|
||
Cache-Control: public, max-age=31536000, immutable
|
||
|
||
# Pre-compressed LibreOffice WASM data
|
||
/libreoffice-wasm/soffice.data.gz
|
||
Content-Type: application/octet-stream
|
||
Content-Encoding: gzip
|
||
Cache-Control: public, max-age=31536000, immutable
|
||
|
||
# Cache WASM files aggressively
|
||
/*.wasm
|
||
Cache-Control: public, max-age=31536000, immutable
|
||
Content-Type: application/wasm
|
||
|
||
# Service worker
|
||
/sw.js
|
||
Cache-Control: no-cache
|
||
```
|
||
|
||
::: warning 重要
|
||
Word/ODT/Excel/PowerPoint 轉 PDF 需要 `Cross-Origin-Embedder-Policy` 與 `Cross-Origin-Opener-Policy` 標頭。缺少它們時,`SharedArrayBuffer` 將無法使用,LibreOffice WASM 引擎會初始化失敗。
|
||
:::
|
||
|
||
為 SPA 路由建立 `_redirects`:
|
||
|
||
```
|
||
/* /index.html 200
|
||
```
|
||
|
||
## 自訂網域
|
||
|
||
1. 前往您的 Pages 專案
|
||
2. 點選「Custom domains」
|
||
3. 加入您的網域
|
||
4. 若網域位於 Cloudflare 上,Cloudflare 會自動設定 DNS
|
||
|
||
## 優點
|
||
|
||
- **免費且無上限的頻寬**
|
||
- **全球 CDN**,擁有 300 個以上的邊緣節點
|
||
- **自動 HTTPS**
|
||
- 針對 pull request 的**預覽部署**
|
||
- **快速建置**
|
||
|
||
## 疑難排解
|
||
|
||
### 大型檔案上傳
|
||
|
||
Cloudflare Pages 支援最大 25 MB 的檔案。WASM 模組應該沒問題,但若遇到限制,可以考慮:
|
||
|
||
```bash
|
||
# Split large files during build
|
||
npm run build
|
||
```
|
||
|
||
### Worker 大小限制
|
||
|
||
若使用 Cloudflare Workers 進行進階路由,請注意免費方案有 1 MB 的限制。
|
||
|
||
## CORS 代理 Worker(用於數位簽章)
|
||
|
||
數位簽章工具需要 CORS 代理來擷取憑證鏈。請部署內附的 worker:
|
||
|
||
```bash
|
||
cd cloudflare
|
||
npx wrangler login
|
||
npx wrangler deploy
|
||
```
|
||
|
||
### 安全功能
|
||
|
||
| 功能 | 說明 |
|
||
| ---------------- | ----------------------------- |
|
||
| **URL 限制** | 僅允許憑證 URL |
|
||
| **檔案大小限制** | 每個請求最大 10MB |
|
||
| **速率限制** | 每 IP 每分鐘 60 次(需要 KV) |
|
||
| **私人 IP 封鎖** | 封鎖 localhost 與內部 IP |
|
||
|
||
### 啟用速率限制
|
||
|
||
```bash
|
||
# Create KV namespace
|
||
npx wrangler kv namespace create "RATE_LIMIT_KV"
|
||
|
||
# Add to wrangler.toml with returned ID:
|
||
# [[kv_namespaces]]
|
||
# binding = "RATE_LIMIT_KV"
|
||
# id = "YOUR_ID"
|
||
|
||
npx wrangler deploy
|
||
```
|
||
|
||
### 以代理 URL 建置
|
||
|
||
```bash
|
||
VITE_CORS_PROXY_URL=https://your-worker.workers.dev npm run build
|
||
```
|
||
|
||
或使用 Docker:
|
||
|
||
```bash
|
||
export VITE_CORS_PROXY_URL="https://your-worker.workers.dev"
|
||
DOCKER_BUILDKIT=1 docker build \
|
||
--secret id=VITE_CORS_PROXY_URL,env=VITE_CORS_PROXY_URL \
|
||
-t your-bentopdf .
|
||
```
|
||
|
||
> **注意:** HMAC 簽章設定請參閱 [README](https://github.com/alam00000/bentopdf#digital-signature-cors-proxy-required)。
|