convertor/docs/03-環境變數與設定.md

444 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 環境變數與設定
本文件詳細說明 ConvertX-CN 所有可用的環境變數與配置選項。
---
## 目錄
- [必填設定](#必填設定)
- [網路與安全](#網路與安全)
- [一般設定](#一般設定)
- [轉換設定](#轉換設定)
- [PDF 翻譯設定](#pdf-翻譯設定)
- [推薦配置範例](#推薦配置範例)
- [安全性建議](#安全性建議)
---
## 快速參考表
### 🔒 安全性設定
| 變數 | 必要性 | 說明 | 預設值 | 範例 |
|------|--------|------|--------|------|
| `JWT_SECRET` | **必須** | Token 驗證密鑰 | 隨機(每次重啟變) | `Xk9mPqL2vN7wR4tY6uI8...` |
| `HTTP_ALLOWED` | 否 | 是否允許 HTTP 連線 | `false` | `true` / `false` |
| `TRUST_PROXY` | 否 | 是否信任反向代理 | `false` | `true` / `false` |
| `ACCOUNT_REGISTRATION` | 否 | 是否允許註冊新帳號 | `true` | `true` / `false` |
| `ALLOW_UNAUTHENTICATED` | 否 | 是否允許匿名使用 | `false` | `true` / `false` |
### 🌐 一般設定
| 變數 | 必要性 | 說明 | 預設值 | 範例 |
|------|--------|------|--------|------|
| `TZ` | 否 | 系統時區 | `UTC` | `Asia/Taipei` |
| `LANGUAGE` | 否 | 介面語言 | `auto` | `zh-TW` |
| `WEBROOT` | 否 | 子路徑前綴 | 空 | `/convertx` |
| `HIDE_HISTORY` | 否 | 隱藏轉換歷史 | `false` | `true` / `false` |
### ⚙️ 轉換設定
| 變數 | 必要性 | 說明 | 預設值 | 範例 |
|------|--------|------|--------|------|
| `AUTO_DELETE_EVERY_N_HOURS` | 否 | 自動刪除間隔(小時) | `24` | `12` |
| `MAX_CONVERT_PROCESS` | 否 | 最大同時轉換數 | `0`(無限制) | `4` |
| `FFMPEG_ARGS` | 否 | FFmpeg 輸入參數 | 空 | `-hwaccel cuda` |
| `FFMPEG_OUTPUT_ARGS` | 否 | FFmpeg 輸出參數 | 空 | `-c:v h264_nvenc` |
### 📄 PDF 翻譯設定
| 變數 | 必要性 | 說明 | 預設值 | 範例 |
|------|--------|------|--------|------|
| `PDFMATHTRANSLATE_SERVICE` | 否 | 翻譯服務 | `google` | `deepl` |
| `PDFMATHTRANSLATE_MODELS_PATH` | 否 | 模型路徑 | `/models` | `/app/models` |
---
## 必填設定
### JWT_SECRET
用於簽署登入驗證的密鑰,**強烈建議在正式環境中設定**。
| 項目 | 說明 |
|------|------|
| **類型** | 字串 |
| **預設值** | 每次重啟隨機產生 |
| **建議值** | 至少 32 字元的隨機字串 |
| **必要性** | ⭐ 強烈建議 |
**問題**:若不設定,每次容器重啟後所有使用者都需要重新登入。
**產生方式**
```bash
# Linux / macOS
openssl rand -hex 32
# Windows PowerShell
-join ((1..32) | ForEach-Object { '{0:x2}' -f (Get-Random -Max 256) })
# 線上工具
# 使用任何密碼產生器產生 32 字元以上的隨機字串
```
**使用範例**
```yaml
environment:
- JWT_SECRET=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
```
---
## 網路與安全
### HTTP_ALLOWED
控制是否允許非 HTTPS 連線。
| 項目 | 說明 |
|------|------|
| **類型** | 布林值 |
| **預設值** | `false` |
| **可選值** | `true` / `false` |
**使用情境**
| 情境 | 建議設定 |
|------|---------|
| 本地測試 (localhost) | `true` |
| 已設定 HTTPS | `false` |
| 無 HTTPS 但需遠端存取 | `true` |
> ⚠️ **注意**:設為 `false` 但用 HTTP 存取會導致「登入後又被導回登入頁」
```yaml
environment:
- HTTP_ALLOWED=true # 本地開發時使用
```
### TRUST_PROXY
控制是否信任反向代理的 X-Forwarded-* headers。
| 項目 | 說明 |
|------|------|
| **類型** | 布林值 |
| **預設值** | `false` |
| **可選值** | `true` / `false` |
**使用情境**
| 情境 | 建議設定 |
|------|---------|
| 直接存取容器 | `false` |
| 透過 Nginx / Traefik / Caddy | `true` |
```yaml
environment:
- TRUST_PROXY=true # 使用反向代理時
```
### ACCOUNT_REGISTRATION
控制是否允許新使用者註冊。
| 項目 | 說明 |
|------|------|
| **類型** | 布林值 |
| **預設值** | `true` |
| **可選值** | `true` / `false` |
```yaml
environment:
- ACCOUNT_REGISTRATION=false # 關閉公開註冊
```
### ALLOW_UNAUTHENTICATED
控制是否允許未登入的匿名使用者使用轉換功能。
| 項目 | 說明 |
|------|------|
| **類型** | 布林值 |
| **預設值** | `false` |
| **可選值** | `true` / `false` |
```yaml
environment:
- ALLOW_UNAUTHENTICATED=true # 允許匿名使用
```
---
## 一般設定
### TZ
設定系統時區,影響日誌時間顯示與自動清理排程。
| 項目 | 說明 |
|------|------|
| **類型** | 時區字串 |
| **預設值** | `UTC` |
| **可選值** | [時區列表](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) |
**常用時區**
| 地區 | 時區值 |
|------|--------|
| 台灣 | `Asia/Taipei` |
| 香港 | `Asia/Hong_Kong` |
| 中國大陸 | `Asia/Shanghai` |
| 日本 | `Asia/Tokyo` |
| 美國東部 | `America/New_York` |
```yaml
environment:
- TZ=Asia/Taipei
```
### LANGUAGE
設定介面預設語言。
| 項目 | 說明 |
|------|------|
| **類型** | 語言代碼 |
| **預設值** | `auto`(自動偵測) |
| **可選值** | `zh-TW`, `zh-CN`, `en`, `ja` 等 65 種 |
```yaml
environment:
- LANGUAGE=zh-TW
```
### WEBROOT
設定子路徑前綴,用於反向代理配置。
| 項目 | 說明 |
|------|------|
| **類型** | 路徑字串 |
| **預設值** | 空(根路徑) |
```yaml
environment:
- WEBROOT=/convertx # 訪問路徑變為 http://example.com/convertx
```
### HIDE_HISTORY
控制是否隱藏轉換歷史紀錄。
| 項目 | 說明 |
|------|------|
| **類型** | 布林值 |
| **預設值** | `false` |
```yaml
environment:
- HIDE_HISTORY=true # 隱藏歷史紀錄
```
---
## 轉換設定
### AUTO_DELETE_EVERY_N_HOURS
設定自動刪除轉換檔案的間隔時間(小時)。
| 項目 | 說明 |
|------|------|
| **類型** | 數字 |
| **預設值** | `24` |
| **建議範圍** | `1` - `168` |
```yaml
environment:
- AUTO_DELETE_EVERY_N_HOURS=12 # 每 12 小時清理一次
```
### MAX_CONVERT_PROCESS
設定最大同時轉換任務數量。
| 項目 | 說明 |
|------|------|
| **類型** | 數字 |
| **預設值** | `0`(無限制) |
| **建議值** | CPU 核心數 |
```yaml
environment:
- MAX_CONVERT_PROCESS=4 # 最多同時 4 個轉換任務
```
### FFMPEG_ARGS 與 FFMPEG_OUTPUT_ARGS
設定 FFmpeg 的全域參數。
| 變數 | 說明 |
|------|------|
| `FFMPEG_ARGS` | 輸入參數(套用於輸入檔案) |
| `FFMPEG_OUTPUT_ARGS` | 輸出參數(套用於輸出檔案) |
**GPU 加速範例**
```yaml
environment:
# NVIDIA GPU 加速
- FFMPEG_ARGS=-hwaccel cuda
- FFMPEG_OUTPUT_ARGS=-c:v h264_nvenc
```
---
## PDF 翻譯設定
### PDFMATHTRANSLATE_SERVICE
設定 PDF 翻譯使用的服務。
| 項目 | 說明 |
|------|------|
| **類型** | 字串 |
| **預設值** | `google` |
| **可選值** | `google`, `deepl`, `azure` 等 |
```yaml
environment:
- PDFMATHTRANSLATE_SERVICE=google
```
### PDFMATHTRANSLATE_MODELS_PATH
設定 PDF 翻譯模型的存放路徑。
| 項目 | 說明 |
|------|------|
| **類型** | 路徑字串 |
| **預設值** | `/models` |
```yaml
environment:
- PDFMATHTRANSLATE_MODELS_PATH=/app/models
```
---
## 推薦配置範例
### 本地開發環境
```yaml
services:
convertx:
image: convertx/convertx-cn:latest
ports:
- "3000:3000"
volumes:
- ./data:/app/data
environment:
- TZ=Asia/Taipei
- JWT_SECRET=dev-secret-key-for-local-testing
- HTTP_ALLOWED=true
- ACCOUNT_REGISTRATION=true
```
### 正式生產環境
```yaml
services:
convertx:
image: convertx/convertx-cn:latest
ports:
- "3000:3000"
volumes:
- ./data:/app/data
environment:
- TZ=Asia/Taipei
- JWT_SECRET=${JWT_SECRET} # 使用環境變數或 secrets
- HTTP_ALLOWED=false
- TRUST_PROXY=true # 如果使用反向代理
- ACCOUNT_REGISTRATION=false # 關閉公開註冊
- AUTO_DELETE_EVERY_N_HOURS=12
- MAX_CONVERT_PROCESS=4
deploy:
resources:
limits:
cpus: '4'
memory: 8G
```
### 公開服務(允許匿名)
```yaml
services:
convertx:
image: convertx/convertx-cn:latest
ports:
- "3000:3000"
volumes:
- ./data:/app/data
environment:
- TZ=Asia/Taipei
- JWT_SECRET=${JWT_SECRET}
- TRUST_PROXY=true
- ALLOW_UNAUTHENTICATED=true
- ACCOUNT_REGISTRATION=false
- AUTO_DELETE_EVERY_N_HOURS=1 # 頻繁清理
- MAX_CONVERT_PROCESS=2 # 限制資源使用
```
---
## 安全性建議
### ✅ 必做事項
1. **設定固定的 JWT_SECRET**
- 至少 32 字元
- 使用隨機產生的字串
- 不要使用範例中的值
2. **正式環境關閉 HTTP**
```yaml
- HTTP_ALLOWED=false
```
3. **使用反向代理處理 HTTPS**
```yaml
- TRUST_PROXY=true
```
4. **限制註冊功能**
```yaml
- ACCOUNT_REGISTRATION=false
```
### ⚠️ 注意事項
1. **不要在公開網路暴露管理介面**
2. **定期更新 Docker 映像檔**
3. **定期備份 data 目錄**
4. **監控磁碟空間使用**
### 🔐 進階安全設定
```yaml
environment:
- JWT_SECRET=${JWT_SECRET}
- HTTP_ALLOWED=false
- TRUST_PROXY=true
- ACCOUNT_REGISTRATION=false
- ALLOW_UNAUTHENTICATED=false
- AUTO_DELETE_EVERY_N_HOURS=6
```
---
[⬆️ 回到頂部](#環境變數與設定) | [📚 回到目錄](00-專案總覽.md)