convertor/compose.yaml

332 lines
13 KiB
YAML
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 Docker Compose 教學版範例
#
# 📚 這份範例的設計理念:
# - 刻意保留完整註解,讓第一次用 Docker 的人也能成功部署
# - 每個設定都有說明其用途與風險
# - 如果你是 Docker 老手,可以自行精簡
#
# 🎉 這是完整版 image已內建所有轉換依賴
# - LibreOffice (headless) - 文件轉換
# - TexLive Full - LaTeX 完整版(含 CJK、阿拉伯、希伯來語支援
# - Tesseract OCR + 中日韓英德法語言包
# - CJK 字型Noto CJK、標楷體、微軟核心字型
# - Pandoc、FFmpeg、ImageMagick、Calibre 等所有轉換器
#
# ✅ 使用者不需要自己寫 Dockerfile
# ✅ 直接 docker compose up -d 即可使用
#
# ⚠️ 部署前必做:
# 1. 先建立 data 資料夾(見 README.md 步驟 2
# 2. 修改 JWT_SECRET 為你自己的隨機字串
#
# ==============================================================================
# 🆕 API Server選用功能
# ==============================================================================
#
# ConvertX 現在提供獨立的 REST / GraphQL API Server
#
# ⚠️ 預設不啟動 API Server
# 一般使用者只需要 Web UI不需要啟動 API
#
# 🚀 如何啟用 API Server
# 使用 profile 功能:
#
# # 只啟動 Web UI預設行為
# docker compose up -d
#
# # 同時啟動 Web UI + API Server
# docker compose --profile api up -d
#
# 📖 API 文件請參考api-server/README.md
#
# ==============================================================================
services:
convertx:
# =========================================================================
# 映像檔設定
# =========================================================================
# convertx-cn 是完整版,已內建所有轉換工具
# ⚠️ 首次下載約 4-6 GB請耐心等待
image: convertx/convertx-cn:latest
# 容器名稱,方便識別與管理
container_name: convertx-cn
# 重啟策略:
# - unless-stopped除非手動停止否則自動重啟推薦
# - always永遠自動重啟
# - no不自動重啟
restart: unless-stopped
# =========================================================================
# 連接埠設定
# =========================================================================
# 格式:「主機埠號:容器埠號」
#
# 範例:
# - "3000:3000" → http://localhost:3000
# - "8080:3000" → http://localhost:8080
# - "80:3000" → http://localhost需要 root 權限)
#
# 💡 若 3000 埠被佔用,改第一個數字即可
ports:
- "3000:3000"
# =========================================================================
# 資料儲存設定(⚠️ 非常重要)
# =========================================================================
# 格式:「主機路徑:容器路徑」
#
# ./data 是你主機上的實體資料夾(相對於 docker-compose.yml 的位置)
# /app/data 是容器內的路徑
#
# 這裡存放:
# 📁 上傳的檔案
# 📁 轉換後的結果
# 📁 使用者帳號資料SQLite 資料庫)
#
# 🚨 重要提醒:
# 1. 請務必先建立 data 資料夾再啟動容器!
# 若資料夾不存在Docker 可能會建立「匿名 volume」
# 這會導致容器刪除後資料全部遺失,且難以找回。
#
# 2. 如果你想用 Docker named volume 取代本地資料夾:
# - convertx_data:/app/data
# 但資料會存在 Docker 內部,較難直接存取與備份。
#
# 3. 建議定期備份 data 資料夾!
volumes:
- ./data:/app/data
# =========================================================================
# 環境變數設定
# =========================================================================
environment:
# -----------------------------------------------------------------------
# 時區設定
# -----------------------------------------------------------------------
# 影響檔案時間戳記與日期顯示格式
# 常用值Asia/Taipei, Asia/Shanghai, America/New_York, Europe/London
- TZ=Asia/Taipei
# -----------------------------------------------------------------------
# JWT 密鑰(🔐 強烈建議設定)
# -----------------------------------------------------------------------
# 用於使用者登入驗證的加密金鑰
#
# ⚠️ 若不設定會怎樣?
# 系統會使用 randomUUID() 產生臨時金鑰,
# 但每次容器重啟後金鑰會改變,導致:
# → 所有使用者的登入狀態失效
# → 所有人都需要重新登入
#
# ✅ 正確做法:
# 設定一個長且隨機的字串(建議 32 字元以上)
# 可以用 openssl rand -hex 32 產生
#
# 🚨 請務必將下面的值改成你自己的!
- JWT_SECRET=請改成你自己的長隨機字串-至少32個字元-不要用這個預設值
# -----------------------------------------------------------------------
# 帳號註冊設定
# -----------------------------------------------------------------------
# true = 允許任何人註冊新帳號
# false = 關閉註冊功能
#
# 💡 注意:首次註冊的帳號不受此限制
# 即使設為 false仍可註冊第一個帳號管理員
#
# 📌 建議:
# - 首次部署時設為 true註冊好帳號後改為 false
# - 或者直接設為 false只用第一個註冊的帳號
- ACCOUNT_REGISTRATION=true
# -----------------------------------------------------------------------
# HTTP 存取設定(🔒 安全性相關)
# -----------------------------------------------------------------------
# true = 允許非 HTTPS 連線
# false = 必須 HTTPS 連線Cookie 設定 Secure 屬性)
#
# ⚠️ 這個設定影響登入功能是否正常運作!
#
# 📌 設定指南:
# 🏠 本地測試http://localhost → true
# 🌐 遠端部署且有 HTTPS → false
# 🌐 遠端部署但沒有 HTTPS不建議 → true但不安全
#
# 🚨 常見問題:
# 若設為 false 但實際用 HTTP 存取,
# 會導致「登入後又被導回登入頁」的問題
- HTTP_ALLOWED=true
# -----------------------------------------------------------------------
# Reverse Proxy 信任設定
# -----------------------------------------------------------------------
# 若你透過 Nginx / Traefik / Cloudflare / Caddy 等存取,設為 true
#
# 作用:讓應用程式信任 X-Forwarded-Proto 等 header
# 正確判斷連線是否為 HTTPS
#
# 📌 設定指南:
# 直接存取容器(無 proxy → false
# 透過 reverse proxy 存取 → true
- TRUST_PROXY=false
# -----------------------------------------------------------------------
# 未登入存取設定
# -----------------------------------------------------------------------
# true = 允許未登入的訪客使用轉換功能
# false = 必須登入才能使用
#
# ⚠️ 設為 true 的風險:
# - 任何人都可以使用你的服務器資源
# - 可能被濫用(大量轉換、儲存空間耗盡)
#
# 📌 建議:除非你明確要提供公開服務,否則設為 false
- ALLOW_UNAUTHENTICATED=false
# -----------------------------------------------------------------------
# 自動清理設定
# -----------------------------------------------------------------------
# 自動刪除超過 N 小時的轉換檔案
# 設為 0 = 停用自動刪除
#
# 💡 建議設定適當的值,避免磁碟空間被轉換檔案塞滿
- AUTO_DELETE_EVERY_N_HOURS=24
# -----------------------------------------------------------------------
# 進階設定(可選,需要時取消註解)
# -----------------------------------------------------------------------
# 子路徑部署(例如 https://example.com/convertx/
# - WEBROOT=/convertx
# 隱藏歷史紀錄頁面
# - HIDE_HISTORY=true
# 日期格式語言(影響時間顯示格式)
# - LANGUAGE=zh-TW
# FFmpeg 硬體加速參數
# - FFMPEG_ARGS=-hwaccel vaapi
# 最大同時轉換數0 = 無限制)
# - MAX_CONVERT_PROCESS=4
# ===========================================================================
# ConvertX API Server選用服務
# ===========================================================================
#
# 🆕 REST + GraphQL API 伺服器
#
# ⚠️ 這是選用服務,預設不啟動!
# 使用 --profile api 才會啟動
#
# 🚀 啟動方式:
# docker compose --profile api up -d
#
# 📖 API 端點:
# - REST API: http://localhost:3001/api/v1/
# - GraphQL: http://localhost:3001/graphql
# - 健康檢查: http://localhost:3001/health
#
# 🔐 認證方式:
# 所有 API除健康檢查都需要 JWT Bearer Token
# Token 需由外部認證服務產生
#
# ===========================================================================
convertx-api:
# 使用 profile 使其成為選用服務
profiles:
- api
# 使用本地 Dockerfile 建置
build:
context: ./api-server
dockerfile: Dockerfile
# 或使用預建的 image取消下面的註解
# image: convertx/convertx-api:latest
container_name: convertx-api
restart: unless-stopped
# =========================================================================
# 連接埠設定
# =========================================================================
# API Server 預設使用 3001 埠,避免與 Web UI (3000) 衝突
ports:
- "3001:3001"
# =========================================================================
# 資料儲存設定
# =========================================================================
# 與 Web UI 共用相同的 data 目錄
# API Server 會在 data/uploads 和 data/output 下建立子目錄
volumes:
- ./data:/app/data
# =========================================================================
# 環境變數設定
# =========================================================================
# 可使用 env_file 載入 .env.api 檔案
env_file:
- path: .env.api
required: false
environment:
# 時區設定
- TZ=Asia/Taipei
# -----------------------------------------------------------------------
# API Server 專用設定
# -----------------------------------------------------------------------
# API 監聽地址與埠
- API_HOST=0.0.0.0
- API_PORT=3001
# -----------------------------------------------------------------------
# JWT 密鑰(🔐 必須設定)
# -----------------------------------------------------------------------
# ⚠️ 這是 API Server 驗證 Token 用的密鑰
# 必須與產生 Token 的認證服務使用相同的密鑰
#
# 🚨 請務必修改為你自己的密鑰!
- JWT_SECRET=${API_JWT_SECRET:-請設定你的API專用JWT密鑰}
# -----------------------------------------------------------------------
# 檔案儲存路徑
# -----------------------------------------------------------------------
- UPLOAD_DIR=/app/data/api-uploads
- OUTPUT_DIR=/app/data/api-output
# -----------------------------------------------------------------------
# 其他設定
# -----------------------------------------------------------------------
# 最大檔案大小(預設 100MB
- MAX_FILE_SIZE=104857600
# 日誌級別
- RUST_LOG=convertx_api=info,tower_http=info
# =========================================================================
# 健康檢查
# =========================================================================
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
# =========================================================================
# 資源限制(可選)
# =========================================================================
# deploy:
# resources:
# limits:
# memory: 2G
# reservations:
# memory: 512M