Ta strona została przetłumaczona maszynowo. Zauważyłeś błąd?Pomóż ją ulepszyć.
Skip to content

Konfiguracja ​

Cała konfiguracja odbywa się za pomocą zmiennych środowiskowych. Każda zmienna ma rozsądną wartość domyślną, więc SnapOtter działa od razu po zainstalowaniu bez ustawiania którejkolwiek z nich.

Zmienne środowiskowe ​

Serwer ​

ZmiennaWartość domyślnaOpis
PORT1349Port, na którym nasłuchuje serwer.
RATE_LIMIT_PER_MIN1000Maksymalna liczba żądań na minutę na adres IP. Ustaw na 0, aby wyłączyć ograniczanie liczby żądań.
CORS_ORIGIN(puste)Rozdzielona przecinkami lista dozwolonych źródeł dla CORS albo puste dla wyłącznie tego samego źródła.
LOG_LEVELinfoSzczegółowość logów. Jedno z: fatal, error, warn, info, debug, trace.
TRUST_PROXYloopback,linklocal,uniquelocalKtóre węzły mogą ustawiać IP klienta przez nagłówek X-Forwarded-For. Wartość domyślna wierzy tylko węzłowi z sieci prywatnej, więc zwrotne proxy w sieci Dockera albo w sieci LAN jest zaufane, a podrobiony nagłówek klienta z publicznego adresu już nie. Ustaw true tylko wtedy, gdy z przodu stoi kontrolowane przez ciebie proxy pod publicznym adresem.

Uwierzytelnianie ​

Poniższe dwie wartości logiczne przyjmują tylko true i false. Cokolwiek innego, 1, yes czy on, nie przechodzi walidacji, a serwer kończy działanie, zanim zacznie nasłuchiwać.

ZmiennaWartość domyślnaOpis
AUTH_ENABLEDtrueWymaga logowania. Ustaw na false, aby działać zupełnie bez kont, co przyznaje każdemu żądaniu uprawnienia administratora, więc rób tak wyłącznie w zaufanej sieci.
DEFAULT_USERNAMEadminNazwa użytkownika początkowego konta administratora. Używana tylko przy pierwszym uruchomieniu.
DEFAULT_PASSWORDadminHasło do początkowego konta administratora. Zmień je po pierwszym zalogowaniu.
MAX_USERS0 (bez ograniczeń)Maksymalna liczba zarejestrowanych kont użytkowników. Ustaw na 0 dla braku ograniczeń.
SESSION_DURATION_HOURS168Czas życia sesji logowania w godzinach (domyślnie 7 dni).
SKIP_MUST_CHANGE_PASSWORDfalseUstaw na true, aby pominąć wymuszony monit o zmianę hasła przy pierwszym zalogowaniu.

Magazyn ​

ZmiennaWartość domyślnaOpis
STORAGE_MODElocallocal lub s3. S3 i MinIO wymagają licencji z funkcją s3_storage oraz zmiennych S3_* opisanych niżej.
DATABASE_URLpostgres://snapotter:snapotter@localhost:5432/snapotterCiąg połączenia PostgreSQL. Stos Compose kieruje go na swoją usługę postgres; pozostaw nieustawiony (razem z REDIS_URL), aby uzyskać tryb wbudowany.
REDIS_URLredis://localhost:6379Ciąg połączenia Redis (używany dla kolejek zadań BullMQ). Compose kieruje go na swoją usługę redis.
WORKSPACE_PATH./tmp/workspaceKatalog na pliki tymczasowe podczas przetwarzania. Czyszczony automatycznie. Obraz ustawia /tmp/workspace.
FILES_STORAGE_PATH./data/filesKatalog na trwałe pliki użytkownika (przesłane obrazy, zapisane wyniki). Obraz ustawia /data/files.

Magazyn obiektów S3 ​

Odczytywane tylko wtedy, gdy STORAGE_MODE=s3. Jeśli pominiesz którąkolwiek z trzech wymaganych zmiennych, uruchomienie zakończy się niepowodzeniem z nazwą brakującej zmiennej.

ZmiennaWartość domyślnaOpis
S3_BUCKET(puste)Bucket przechowujący przesłane pliki i wyniki. Wymagane.
S3_ACCESS_KEY_ID(puste)Klucz dostępu. Wymagane. W kontenerze możesz zamiast tego zamontować go przez S3_ACCESS_KEY_ID_FILE.
S3_SECRET_ACCESS_KEY(puste)Klucz tajny. Wymagane. Ta sama konwencja plikowa: S3_SECRET_ACCESS_KEY_FILE.
S3_REGIONus-east-1Region bucketa.
S3_ENDPOINT(puste)Własny endpoint dla MinIO, R2, Backblaze i innych magazynów zgodnych z S3. Puste oznacza AWS.
S3_FORCE_PATH_STYLEfalseUstaw na true dla MinIO i wszystkiego innego, co oczekuje endpoint/bucket/key zamiast adresowania w stylu wirtualnego hosta.
S3_PREFIX(puste)Prefiks kluczy, dzięki czemu jeden bucket może obsługiwać kilka instancji.

Szyfrowanie danych w spoczynku ​

ZmiennaWartość domyślnaOpis
DATA_ENCRYPTION_KEY(puste)64 znaki szesnastkowe (32 bajty). Szyfruje wrażliwe ustawienia przechowywane w bazie danych. Wszystko, co nie ma 64 znaków szesnastkowych, jest odrzucane przy uruchamianiu.
DATA_ENCRYPTION_KEY_PREVIOUS(puste)Klucz, z którego przechodzisz podczas rotacji, w tym samym formacie. Ustaw oba na czas rotacji, aby istniejące wiersze nadal dawały się odszyfrować, a potem usuń ten.

Tryb wbudowany ​

Uruchom obraz bez DATABASE_URL i bez REDIS_URL, a wystartuje on własny PostgreSQL 17 i Redis wewnątrz kontenera, powiązane z pętlą zwrotną (loopback), ze wszystkimi danymi na woluminie /data. Przywraca to jednopoleceniowe doświadczenie docker run na potrzeby szybkiego startu, homelaba i aktualizacji z wersji 1.x. To ścieżka dla wygody, a nie wdrożenie produkcyjne: w środowisku produkcyjnym uruchom 3-kontenerowy stos Compose z osobnymi PostgreSQL i Redis. Tryb wbudowany wymaga uruchomienia kontenera jako root i jest niezgodny ze środowiskami uruchomieniowymi o dowolnym UID (OpenShift, Kubernetes runAsNonRoot); tam użyj Compose.

ZmiennaWartość domyślnaOpis
EMBEDDEDautoWłączane automatycznie, gdy zarówno DATABASE_URL, jak i REDIS_URL są nieustawione. Ustaw na 0, aby to wyłączyć (aplikacja wtedy szybko zakończy działanie, jeśli nie ustawiono zewnętrznego DATABASE_URL/REDIS_URL, zamiast po cichu uruchamiać bazę danych wewnątrz kontenera).
REDIS_MAXMEMORY512mbLimit pamięci dla wbudowanego Redis (tylko tryb wbudowany). Obniż go na hostach z ograniczoną pamięcią, takich jak Raspberry Pi.

Aktualizacja z wersji 1.x: umieść swój stary plik snapotter.db pod /data/snapotter.db w woluminie, a tryb wbudowany zaimportuje go do wbudowanego PostgreSQL przy pierwszym uruchomieniu. Import przebiega raz; późniejsze uruchomienia go pomijają.

Uwaga o telemetrii: tryb wbudowany dziedziczy domyślne ustawienie analityki obrazu jak każda inna konfiguracja. Publikowany obraz jest dostarczany z włączoną analityką; zbuduj z --build-arg SNAPOTTER_ANALYTICS=off albo użyj wewnątrzaplikacyjnej rezygnacji dla administratora, aby ją wyłączyć.

Limity przetwarzania ​

ZmiennaWartość domyślnaOpis
MAX_UPLOAD_SIZE_MB0 (bez ograniczeń)Maksymalny rozmiar pliku na jedno przesłanie w megabajtach. Ustaw na 0 dla braku ograniczeń. Publikowany obraz jest dostarczany z 0; kompilacja ze źródeł zaczyna od 100.
MAX_BATCH_SIZE0 (bez ograniczeń)Maksymalna liczba plików w pojedynczym żądaniu wsadowym. Ustaw na 0 dla braku ograniczeń. Publikowany obraz jest dostarczany z 0; kompilacja ze źródeł zaczyna od 100.
CONCURRENT_JOBS0 (auto)Liczba zadań wsadowych uruchamianych równolegle. Ustaw na 0, aby automatycznie wykryć na podstawie dostępnych rdzeni CPU.
MAX_MEGAPIXELS0 (bez ograniczeń)Maksymalna dozwolona rozdzielczość obrazu w megapikselach. Ustaw na 0 dla braku ograniczeń.
MAX_WORKER_THREADS0 (auto)Maksymalna liczba wątków roboczych do przetwarzania obrazów. Ustaw na 0, aby automatycznie wykryć na podstawie dostępnych rdzeni CPU.
PROCESSING_TIMEOUT_S0 (bez limitu)Maksymalny czas przetwarzania na żądanie w sekundach. Ustaw na 0 dla braku limitu czasu.
MAX_PIPELINE_STEPS20Maksymalna liczba kroków w potoku. Ustaw na 0 dla braku limitu.
MAX_CANVAS_PIXELS0 (bez limitu)Maksymalny rozmiar płótna w pikselach dla obrazów wyjściowych. Ustaw na 0 dla braku limitu.
MAX_SVG_SIZE_MB50Największy plik SVG akceptowany przed oczyszczaniem, w megabajtach. 0 działa tutaj inaczej niż w sąsiednich wierszach. Całkowicie usuwa limit rozmiaru sprawdzany przed parsowaniem, zamiast go podnosić, więc zostaw tę zmienną ustawioną.
MAX_PDF_PAGES0 (bez ograniczeń)Maksymalna liczba stron PDF dla konwersji PDF na obraz. Ustaw na 0 dla braku ograniczeń.

Czyszczenie ​

ZmiennaWartość domyślnaOpis
FILE_MAX_AGE_HOURS72Jak długo niezapisane wyniki przetwarzania (surowe przesłania i wyjścia narzędzi) są przechowywane przed automatycznym usunięciem. Pliki, które jawnie zapiszesz w bibliotece Files, nie są objęte tym mechanizmem i pozostają, dopóki ich nie usuniesz.
CLEANUP_INTERVAL_MINUTES60Jak często uruchamiane jest zadanie czyszczenia.

Wygląd ​

ZmiennaWartość domyślnaOpis
DEFAULT_THEMElightDomyślny motyw dla nowych sesji. light, dark lub system.
DEFAULT_LOCALEenDomyślny język interfejsu.
DEFAULT_TOOL_VIEWsidebarDomyślny układ narzędzi. sidebar lub fullscreen.

Uprawnienia Docker ​

ZmiennaWartość domyślnaOpis
PUID999Uruchom proces kontenera jako ten UID. Ustaw tak, aby pasował do Twojego użytkownika hosta dla montowań bind (id -u).
PGID999Uruchom proces kontenera jako ten GID. Ustaw tak, aby pasował do Twojej grupy hosta dla montowań bind (id -g).

Przykład 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     # Zmień to w przypadku wdrożeń nielokalnych
      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:

Woluminy ​

Stos Docker Compose używa czterech woluminów:

  • /data (app) - modele AI, środowisko venv Pythona i pliki użytkownika. Zamontuj to, aby zachować przesłane pliki i zainstalowane pakiety AI między ponownymi uruchomieniami.
  • /tmp/workspace (app) - tymczasowy magazyn na pliki będące w trakcie przetwarzania. Może być efemeryczny, ale zamontowanie go pozwala uniknąć zapełnienia zapisywalnej warstwy kontenera.
  • SnapOtter-pgdata (postgres) - katalog danych PostgreSQL. Przechowuje wszystkie dane relacyjne (użytkownicy, ustawienia, potoki, zadania, dziennik audytu). Wykonaj kopię zapasową przez pg_dump lub migawkę woluminu.
  • SnapOtter-redisdata (redis) - plik append-only Redis dla trwałych kolejek zadań.