# 進階用法 ## 硬體加速 ### 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" ```