此頁面為機器翻譯。發現錯誤了嗎?協助我們改善。
Skip to content

設定

所有設定皆透過環境變數完成。每個變數都有合理的預設值,因此 SnapOtter 無需設定任何變數即可開箱即用。

環境變數

伺服器

變數預設值說明
PORT1349伺服器監聽的連接埠。
RATE_LIMIT_PER_MIN1000每個 IP 每分鐘的最大請求數。設為 0 可停用速率限制。
CORS_ORIGIN(空)CORS 允許來源的逗號分隔清單,留空則僅限同源。
LOG_LEVELinfo日誌詳細程度。可為下列其中之一:fatalerrorwarninfodebugtrace
TRUST_PROXYloopback,linklocal,uniquelocal允許哪些對端透過 X-Forwarded-For 設定用戶端 IP。預設值只相信來自私有網路的對端,因此 Docker 網路或區域網路中的反向代理會被信任,而公開用戶端偽造的標頭則不會。只有當你自己掌控的代理以公開位址位於前方時,才設為 true

驗證

下方兩個布林值只接受 truefalse。其他任何值,例如 1yeson,都會驗證失敗,伺服器會在開始監聽之前結束。

變數預設值說明
AUTH_ENABLEDtrue要求登入。設為 false 可在完全沒有帳號的情況下執行,此時每個請求都具有 admin 權限,因此請僅限於可信任的網路。
DEFAULT_USERNAMEadmin初始 admin 帳號的使用者名稱。僅於首次執行時使用。
DEFAULT_PASSWORDadmin初始 admin 帳號的密碼。請於首次登入後變更。
MAX_USERS0(無上限)註冊使用者帳號的最大數量。設為 0 為無上限。
SESSION_DURATION_HOURS168登入工作階段的存活時間(小時)(預設為 7 天)。
SKIP_MUST_CHANGE_PASSWORDfalse設為 true 可略過首次登入時強制變更密碼的提示。

儲存

變數預設值說明
STORAGE_MODElocallocals3。S3 與 MinIO 需要具備 s3_storage 功能的授權,以及下方的 S3_* 變數。
DATABASE_URLpostgres://snapotter:snapotter@localhost:5432/snapotterPostgreSQL 連線字串。Compose 堆疊會將它指向自己的 postgres 服務;把它(連同 REDIS_URL)留著不設定,即可進入內嵌模式。
REDIS_URLredis://localhost:6379Redis 連線字串(用於 BullMQ 工作佇列)。Compose 會將它指向自己的 redis 服務。
WORKSPACE_PATH./tmp/workspace處理期間暫存檔案的目錄。會自動清理。映像檔會設為 /tmp/workspace
FILES_STORAGE_PATH./data/files持久化使用者檔案(已上傳影像、已儲存結果)的目錄。映像檔會設為 /data/files

S3 物件儲存

僅在 STORAGE_MODE=s3 時才會讀取。三個必填項只要漏掉任何一個,啟動就會失敗,並指出你漏掉的變數名稱。

變數預設值說明
S3_BUCKET(空)存放上傳檔案與輸出的儲存桶。必填。
S3_ACCESS_KEY_ID(空)存取金鑰。必填。在容器中也可以改用 S3_ACCESS_KEY_ID_FILE 掛載它。
S3_SECRET_ACCESS_KEY(空)祕密金鑰。必填。同樣的檔案慣例:S3_SECRET_ACCESS_KEY_FILE
S3_REGIONus-east-1儲存桶所在區域。
S3_ENDPOINT(空)供 MinIO、R2、Backblaze 及其他 S3 相容儲存使用的自訂端點。留空表示 AWS。
S3_FORCE_PATH_STYLEfalse對 MinIO 以及其他需要 endpoint/bucket/key 而非虛擬主機定址的儲存,請設為 true
S3_PREFIX(空)金鑰前綴,可讓一個儲存桶容納多個執行個體。

靜態資料加密

變數預設值說明
DATA_ENCRYPTION_KEY(空)64 個十六進位字元(32 位元組)。用來加密資料庫中儲存的機敏設定。不是 64 個十六進位字元的值會在啟動時被拒絕。
DATA_ENCRYPTION_KEY_PREVIOUS(空)你正在輪替掉的舊金鑰,格式相同。輪替期間請同時設定兩者,讓既有資料列仍可解密,之後再移除這一個。

內嵌模式

以未設定 DATABASE_URLREDIS_URL 的方式執行映像檔,它會在容器內啟動自己的 PostgreSQL 17 與 Redis,繫結至 loopback,所有資料位於 /data 磁碟區。這重現了單一指令的 docker run 體驗,適用於快速上手、homelab 與從 1.x 升級。這是一條便利路徑,而非正式環境部署:正式環境請執行具獨立 PostgreSQL 與 Redis 的 3 容器 Compose 堆疊。內嵌模式需要以 root 執行容器,且與任意 UID 的執行環境(OpenShift、Kubernetes runAsNonRoot)不相容;在那些環境請使用 Compose。

變數預設值說明
EMBEDDEDautoDATABASE_URLREDIS_URL 皆未設定時自動啟用。設為 0 可停用它(此時若未設定外部 DATABASE_URL/REDIS_URL,app 會快速失敗,而非默默啟動容器內資料庫)。
REDIS_MAXMEMORY512mb內嵌 Redis 的記憶體上限(僅限內嵌模式)。在記憶體受限的主機(例如 Raspberry Pi)上請調低它。

從 1.x 升級:將你的舊 snapotter.db 放在磁碟區中的 /data/snapotter.db,內嵌模式會在首次啟動時將它匯入內嵌的 PostgreSQL。匯入僅執行一次;後續啟動會略過。

遙測注意事項:內嵌模式與其他任何設定一樣,會繼承映像檔的分析預設值。已發布的映像檔預設開啟分析;以 --build-arg SNAPOTTER_ANALYTICS=off 建置,或使用 app 內的管理員退出選項,即可停用它。

處理限制

變數預設值說明
MAX_UPLOAD_SIZE_MB0(無上限)每次上傳的最大檔案大小(MB)。設為 0 為無上限。已發布的映像檔出廠即為 0;從原始碼建置則是從 100 開始。
MAX_BATCH_SIZE0(無上限)單一批次請求中的最大檔案數。設為 0 為無上限。已發布的映像檔出廠即為 0;從原始碼建置則是從 100 開始。
CONCURRENT_JOBS0(自動)平行執行的批次工作數。設為 0 可根據可用 CPU 核心自動偵測。
MAX_MEGAPIXELS0(無上限)允許的最大影像解析度(百萬像素)。設為 0 為無上限。
MAX_WORKER_THREADS0(自動)影像處理的最大工作執行緒。設為 0 可根據可用 CPU 核心自動偵測。
PROCESSING_TIMEOUT_S0(無限制)每個請求的最大處理時間(秒)。設為 0 為無逾時。
MAX_PIPELINE_STEPS20管線中的最大步驟數。設為 0 為無限制。
MAX_CANVAS_PIXELS0(無限制)輸出影像的最大畫布尺寸(像素)。設為 0 為無限制。
MAX_SVG_SIZE_MB50淨化處理之前可接受的最大 SVG 大小(MB)。這裡的 0 與前後各列的含義不同:它不是把上限調高,而是完全移除解析前的大小限制,因此這一項請保持設定。
MAX_PDF_PAGES0(無上限)PDF 轉影像時的最大 PDF 頁數。設為 0 為無上限。

清理

變數預設值說明
FILE_MAX_AGE_HOURS72未儲存的處理結果(原始上傳與工具輸出)在自動刪除前保留多久。你明確儲存至 Files 資料庫的檔案不受影響,會保留至你刪除它們為止。
CLEANUP_INTERVAL_MINUTES60清理工作的執行頻率。

外觀

變數預設值說明
DEFAULT_THEMElight新工作階段的預設主題。lightdarksystem
DEFAULT_LOCALEen預設介面語言。
DEFAULT_TOOL_VIEWsidebar預設工具版面。sidebarfullscreen

Docker 權限

變數預設值說明
PUID999以此 UID 執行容器程序。設為與你的主機使用者相符以供 bind mount 使用(id -u)。
PGID999以此 GID 執行容器程序。設為與你的主機群組相符以供 bind mount 使用(id -g)。

Docker 範例

yaml
services:
  SnapOtter:
    image: snapotter/snapotter:latest
    ports:
      - "1349:1349"
    volumes:
      - SnapOtter-data:/data
      - SnapOtter-workspace:/tmp/workspace
    environment:
      - AUTH_ENABLED=true
      - DEFAULT_USERNAME=admin
      - DEFAULT_PASSWORD=changeme
      - DATABASE_URL=postgres://snapotter:snapotter@postgres:5432/snapotter
      - REDIS_URL=redis://redis:6379
      - MAX_UPLOAD_SIZE_MB=200
      - CONCURRENT_JOBS=4
      - FILE_MAX_AGE_HOURS=12
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    restart: unless-stopped

  postgres:
    image: postgres:17-alpine
    environment:
      POSTGRES_USER: snapotter
      POSTGRES_PASSWORD: snapotter     # 針對非本地部署更改此設置
      POSTGRES_DB: snapotter
    volumes:
      - SnapOtter-pgdata:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U snapotter -d snapotter"]
      interval: 10s
      timeout: 5s
      retries: 12

  redis:
    image: redis:8-alpine
    command: ["redis-server", "--maxmemory-policy", "noeviction", "--appendonly", "yes"]
    volumes:
      - SnapOtter-redisdata:/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 12

volumes:
  SnapOtter-data:
  SnapOtter-workspace:
  SnapOtter-pgdata:
  SnapOtter-redisdata:

磁碟區

Docker Compose 堆疊使用四個磁碟區:

  • /data(app)- AI 模型、Python venv 與使用者檔案。掛載此磁碟區以在重新啟動後保留已上傳的檔案與已安裝的 AI 套件包。
  • /tmp/workspace(app)- 處理中檔案的暫存空間。這可以是暫時性的,但掛載它可避免填滿容器的可寫入層。
  • SnapOtter-pgdata(postgres)- PostgreSQL 資料目錄。這保存所有關聯式資料(使用者、設定、管線、工作、稽核日誌)。透過 pg_dump 或磁碟區快照備份。
  • SnapOtter-redisdata(redis)- 用於持久化工作佇列的 Redis append-only 檔案。