## Changes ### i18n Module Fixes - Fix import paths in service.ts, languageSelector.tsx, header.tsx, base.tsx, results.tsx - Change from '../i18n' to '../i18n/index' or './index' for proper module resolution ### Registration (Breaking Change) - Change ACCOUNT_REGISTRATION default from false to true (out-of-box ready) - Login and Register pages now both visible by default ### Version Bump - Update package.json to v0.1.4 - Update CHANGELOG.md with v0.1.4 release notes - Update README.md and docs with new version numbers ### Build Verification - bun run build: PASSED - Docker build: PASSED - TypeScript compilation: PASSED (no errors)
277 lines
5 KiB
Markdown
277 lines
5 KiB
Markdown
# 進階用法
|
||
|
||
## 硬體加速
|
||
|
||
### NVIDIA GPU (CUDA/NVENC)
|
||
|
||
#### 1. 安裝 NVIDIA Container Toolkit
|
||
|
||
```bash
|
||
# Ubuntu/Debian
|
||
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
|
||
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
|
||
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
|
||
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
|
||
sudo apt-get update
|
||
sudo apt-get install -y nvidia-container-toolkit
|
||
sudo nvidia-ctk runtime configure --runtime=docker
|
||
sudo systemctl restart docker
|
||
```
|
||
|
||
#### 2. Docker Compose 配置
|
||
|
||
```yaml
|
||
services:
|
||
convertx:
|
||
image: convertx/convertx-cn:latest
|
||
deploy:
|
||
resources:
|
||
reservations:
|
||
devices:
|
||
- driver: nvidia
|
||
count: all
|
||
capabilities: [gpu]
|
||
environment:
|
||
- FFMPEG_ARGS=-hwaccel cuda -hwaccel_output_format cuda
|
||
- FFMPEG_OUTPUT_ARGS=-c:v h264_nvenc -preset fast
|
||
```
|
||
|
||
---
|
||
|
||
### Intel Quick Sync Video (QSV)
|
||
|
||
```yaml
|
||
services:
|
||
convertx:
|
||
image: convertx/convertx-cn:latest
|
||
devices:
|
||
- /dev/dri:/dev/dri
|
||
environment:
|
||
- FFMPEG_ARGS=-hwaccel qsv
|
||
- FFMPEG_OUTPUT_ARGS=-c:v h264_qsv -preset faster
|
||
```
|
||
|
||
---
|
||
|
||
### AMD VAAPI
|
||
|
||
```yaml
|
||
services:
|
||
convertx:
|
||
image: convertx/convertx-cn:latest
|
||
devices:
|
||
- /dev/dri:/dev/dri
|
||
environment:
|
||
- FFMPEG_ARGS=-hwaccel vaapi -hwaccel_device /dev/dri/renderD128
|
||
- FFMPEG_OUTPUT_ARGS=-c:v h264_vaapi
|
||
```
|
||
|
||
---
|
||
|
||
## 反向代理
|
||
|
||
### Nginx
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name convert.example.com;
|
||
return 301 https://$server_name$request_uri;
|
||
}
|
||
|
||
server {
|
||
listen 443 ssl http2;
|
||
server_name convert.example.com;
|
||
|
||
ssl_certificate /etc/nginx/ssl/cert.pem;
|
||
ssl_certificate_key /etc/nginx/ssl/key.pem;
|
||
|
||
client_max_body_size 0; # 無檔案大小限制
|
||
|
||
location / {
|
||
proxy_pass http://localhost:3000;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection 'upgrade';
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
proxy_cache_bypass $http_upgrade;
|
||
|
||
# 長時間連線支援(大檔案轉換)
|
||
proxy_read_timeout 3600s;
|
||
proxy_send_timeout 3600s;
|
||
}
|
||
}
|
||
```
|
||
|
||
### Caddy
|
||
|
||
```
|
||
convert.example.com {
|
||
reverse_proxy localhost:3000 {
|
||
header_up X-Real-IP {remote_host}
|
||
header_up X-Forwarded-Proto {scheme}
|
||
}
|
||
|
||
request_body {
|
||
max_size 0 # 無限制
|
||
}
|
||
}
|
||
```
|
||
|
||
### Traefik
|
||
|
||
參考 [docker.md](docker.md#使用-traefik-反向代理) 中的 Traefik 配置。
|
||
|
||
---
|
||
|
||
## 子路徑部署
|
||
|
||
如果需要在子路徑部署(如 `https://example.com/convertx`):
|
||
|
||
### 1. 設定環境變數
|
||
|
||
```yaml
|
||
environment:
|
||
- WEBROOT=/convertx
|
||
```
|
||
|
||
### 2. Nginx 配置
|
||
|
||
```nginx
|
||
location /convertx/ {
|
||
proxy_pass http://localhost:3000/;
|
||
# ... 其他 proxy 設定
|
||
}
|
||
```
|
||
|
||
### 3. Caddy 配置
|
||
|
||
```
|
||
example.com {
|
||
handle_path /convertx/* {
|
||
reverse_proxy localhost:3000
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 限制同時轉換數
|
||
|
||
防止伺服器過載:
|
||
|
||
```yaml
|
||
environment:
|
||
- MAX_CONVERT_PROCESS=4 # 最多同時 4 個轉換任務
|
||
```
|
||
|
||
---
|
||
|
||
## 匿名模式
|
||
|
||
允許不登入即可使用:
|
||
|
||
```yaml
|
||
environment:
|
||
- ALLOW_UNAUTHENTICATED=true
|
||
- HIDE_HISTORY=true # 建議同時隱藏歷史
|
||
- AUTO_DELETE_EVERY_N_HOURS=1 # 快速清理
|
||
```
|
||
|
||
---
|
||
|
||
## 高可用部署
|
||
|
||
### 多容器部署
|
||
|
||
ConvertX-CN 支援多容器部署,但需注意:
|
||
|
||
1. **共享儲存**:所有容器需存取相同的 `/app/data` 目錄
|
||
2. **資料庫鎖定**:SQLite 在高併發下可能有問題
|
||
3. **JWT Secret**:所有容器需使用相同的 `JWT_SECRET`
|
||
|
||
```yaml
|
||
services:
|
||
convertx-1:
|
||
image: convertx/convertx-cn:latest
|
||
volumes:
|
||
- shared-data:/app/data
|
||
environment:
|
||
- JWT_SECRET=${JWT_SECRET}
|
||
|
||
convertx-2:
|
||
image: convertx/convertx-cn:latest
|
||
volumes:
|
||
- shared-data:/app/data
|
||
environment:
|
||
- JWT_SECRET=${JWT_SECRET}
|
||
|
||
nginx:
|
||
image: nginx:alpine
|
||
ports:
|
||
- "80:80"
|
||
volumes:
|
||
- ./nginx.conf:/etc/nginx/nginx.conf
|
||
|
||
volumes:
|
||
shared-data:
|
||
driver: local
|
||
driver_opts:
|
||
type: nfs
|
||
o: addr=nfs-server,rw
|
||
device: ":/path/to/shared/data"
|
||
```
|
||
|
||
---
|
||
|
||
## 效能調優
|
||
|
||
### 記憶體限制
|
||
|
||
```yaml
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
memory: 8G
|
||
reservations:
|
||
memory: 2G
|
||
```
|
||
|
||
### CPU 限制
|
||
|
||
```yaml
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: "4"
|
||
reservations:
|
||
cpus: "1"
|
||
```
|
||
|
||
---
|
||
|
||
## 日誌管理
|
||
|
||
### 查看日誌
|
||
|
||
```bash
|
||
docker logs convertx-cn
|
||
docker logs -f convertx-cn # 即時追蹤
|
||
docker logs --tail 100 convertx-cn # 最後 100 行
|
||
```
|
||
|
||
### 日誌輪轉
|
||
|
||
```yaml
|
||
services:
|
||
convertx:
|
||
# ...
|
||
logging:
|
||
driver: "json-file"
|
||
options:
|
||
max-size: "10m"
|
||
max-file: "3"
|
||
```
|