# ==============================================================================
# ConvertX-CN 生產環境 Docker Compose
#
# 適用情境：
#   - 透過 Reverse Proxy（Nginx / Traefik / Caddy）存取
#   - 已設定 HTTPS
#   - 需要限制註冊與存取
#
# ⚠️ 使用前請確認：
#    1. 已建立 data 資料夾
#    2. 已將 JWT_SECRET 改成你自己的值
#    3. 已設定好 Reverse Proxy
# ==============================================================================

services:
  convertx:
    image: convertx/convertx-cn:latest
    container_name: convertx-cn
    restart: unless-stopped

    # 生產環境通常只監聽 localhost，由 Reverse Proxy 轉發
    # 若需要直接對外，改為 "3000:3000"
    ports:
      - "127.0.0.1:3000:3000"

    volumes:
      - ./data:/app/data

    environment:
      # === 必填設定 ===
      # 🔐 JWT 密鑰：請務必改成你自己的隨機字串（至少 32 字元）
      # 可用 openssl rand -hex 32 產生
      - JWT_SECRET=change-me-to-a-very-long-random-string-at-least-32-characters

      # === 安全設定 ===
      # 關閉註冊（首次帳號仍可建立）
      - ACCOUNT_REGISTRATION=false

      # 不允許 HTTP（要求 HTTPS）
      - HTTP_ALLOWED=false

      # 信任 Reverse Proxy 的 X-Forwarded-* headers
      - TRUST_PROXY=true

      # 必須登入才能使用
      - ALLOW_UNAUTHENTICATED=false

      # === 時區與清理 ===
      - TZ=Asia/Taipei
      - AUTO_DELETE_EVERY_N_HOURS=24

      # === 可選：子路徑部署 ===
      # 若透過 https://example.com/convertx/ 存取，取消下行註解
      # - WEBROOT=/convertx

# ==============================================================================
# Reverse Proxy 設定範例
# ==============================================================================
#
# Nginx 範例：
# -------------
# server {
#     listen 443 ssl http2;
#     server_name example.com;
#
#     location / {
#         proxy_pass http://127.0.0.1:3000;
#         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;
#
#         # 檔案上傳大小限制
#         client_max_body_size 500M;
#     }
# }
#
# Traefik 範例（labels）：
# ------------------------
# labels:
#   - "traefik.enable=true"
#   - "traefik.http.routers.convertx.rule=Host(`convertx.example.com`)"
#   - "traefik.http.routers.convertx.tls=true"
#   - "traefik.http.routers.convertx.tls.certresolver=letsencrypt"
#   - "traefik.http.services.convertx.loadbalancer.server.port=3000"
#
# ==============================================================================
