Search K
Konfiguration
All konfiguration görs via miljövariabler. Varje variabel har ett vettigt standardvärde, så SnapOtter fungerar direkt utan att någon av dem sätts.
Miljövariabler
Server
| Variabel | Standard | Beskrivning |
|---|---|---|
PORT | 1349 | Port som servern lyssnar på. |
RATE_LIMIT_PER_MIN | 1000 | Maximalt antal förfrågningar per minut per IP. Sätt till 0 för att inaktivera hastighetsbegränsning. |
CORS_ORIGIN | (tom) | Kommaseparerade tillåtna ursprung för CORS, eller tom för endast samma ursprung. |
LOG_LEVEL | info | Loggutförlighet. En av: fatal, error, warn, info, debug, trace. |
TRUST_PROXY | loopback,linklocal,uniquelocal | Vilka motparter som får sätta klientens IP via X-Forwarded-For. Standardvärdet tror bara på en motpart i ett privat nät, så en omvänd proxy på ett Docker-nätverk eller i ett LAN är betrodd medan en publik klients förfalskade huvud inte är det. Sätt true bara när en proxy du själv styr står framför på en publik adress. |
Autentisering
De två booleska värdena nedan accepterar bara true och false. Allt annat, 1 eller yes eller on, klarar inte valideringen och servern avslutas innan den börjar lyssna.
| Variabel | Standard | Beskrivning |
|---|---|---|
AUTH_ENABLED | true | Kräver inloggning. Sätt till false för att köra helt utan konton, vilket ger varje förfrågan adminrättigheter, så håll det till ett betrott nätverk. |
DEFAULT_USERNAME | admin | Användarnamn för det initiala admin-kontot. Används endast vid första körningen. |
DEFAULT_PASSWORD | admin | Lösenord för det initiala admin-kontot. Ändra detta efter första inloggningen. |
MAX_USERS | 0 (obegränsat) | Maximalt antal registrerade användarkonton. Sätt till 0 för obegränsat. |
SESSION_DURATION_HOURS | 168 | Livslängd för inloggningssession i timmar (standard är 7 dagar). |
SKIP_MUST_CHANGE_PASSWORD | false | Sätt till true för att hoppa över den tvingade uppmaningen om lösenordsbyte vid första inloggningen. |
Lagring
| Variabel | Standard | Beskrivning |
|---|---|---|
STORAGE_MODE | local | local eller s3. S3 och MinIO kräver en licens med funktionen s3_storage plus S3_*-variablerna nedan. |
DATABASE_URL | postgres://snapotter:snapotter@localhost:5432/snapotter | PostgreSQL-anslutningssträng. Compose-stacken pekar den mot sin postgres-tjänst; lämna den osatt (tillsammans med REDIS_URL) för att få inbäddat läge. |
REDIS_URL | redis://localhost:6379 | Redis-anslutningssträng (används för BullMQ-jobbköer). Compose pekar den mot sin redis-tjänst. |
WORKSPACE_PATH | ./tmp/workspace | Katalog för tillfälliga filer under bearbetning. Rensas automatiskt. Avbildningen sätter /tmp/workspace. |
FILES_STORAGE_PATH | ./data/files | Katalog för beständiga användarfiler (uppladdade bilder, sparade resultat). Avbildningen sätter /data/files. |
S3-objektlagring
Läses bara när STORAGE_MODE=s3. Missar du någon av de tre obligatoriska misslyckas starten med namnet på variabeln du utelämnade.
| Variabel | Standard | Beskrivning |
|---|---|---|
S3_BUCKET | (tom) | Bucket som håller uppladdningar och utdata. Obligatorisk. |
S3_ACCESS_KEY_ID | (tom) | Åtkomstnyckel. Obligatorisk. I containern kan du montera den i stället, via S3_ACCESS_KEY_ID_FILE. |
S3_SECRET_ACCESS_KEY | (tom) | Hemlig nyckel. Obligatorisk. Samma filkonvention: S3_SECRET_ACCESS_KEY_FILE. |
S3_REGION | us-east-1 | Bucketens region. |
S3_ENDPOINT | (tom) | Egen endpoint för MinIO, R2, Backblaze och andra S3-kompatibla lagringar. Tom betyder AWS. |
S3_FORCE_PATH_STYLE | false | Sätt till true för MinIO och allt annat som vill ha endpoint/bucket/key i stället för adressering via virtuell värd. |
S3_PREFIX | (tom) | Nyckelprefix, så att en bucket kan rymma flera instanser. |
Kryptering i vila
| Variabel | Standard | Beskrivning |
|---|---|---|
DATA_ENCRYPTION_KEY | (tom) | 64 hexadecimala tecken (32 byte). Krypterar känsliga inställningar som lagras i databasen. Allt som inte är 64 hexadecimala tecken avvisas vid start. |
DATA_ENCRYPTION_KEY_PREVIOUS | (tom) | Nyckeln du roterar bort från, samma format. Sätt båda under en rotation så att befintliga rader fortfarande går att dekryptera, och ta sedan bort den här. |
Inbäddat läge
Kör avbildningen utan DATABASE_URL och utan REDIS_URL så startar den sin egen PostgreSQL 17 och Redis inuti containern, bundna till loopback, med all data på /data-volymen. Detta återställer docker run-upplevelsen med ett enda kommando för snabbstart, homelab och uppgraderingar från 1.x. Det är en bekvämlighetsväg, inte en produktionsdistribution: för produktion, kör Compose-stacken med 3 containrar med separat PostgreSQL och Redis. Inbäddat läge kräver att containern körs som root och är inkompatibelt med körtider med godtyckligt UID (OpenShift, Kubernetes runAsNonRoot); använd Compose där.
| Variabel | Standard | Beskrivning |
|---|---|---|
EMBEDDED | auto | Aktiveras automatiskt när både DATABASE_URL och REDIS_URL är osatta. Sätt till 0 för att inaktivera det (appen misslyckas då snabbt om ingen extern DATABASE_URL/REDIS_URL är satt, i stället för att tyst starta en databas i containern). |
REDIS_MAXMEMORY | 512mb | Minnestak för den inbäddade Redis (endast inbäddat läge). Sänk det på minnesbegränsade värdar som en Raspberry Pi. |
Uppgradering från 1.x: lägg din gamla snapotter.db på /data/snapotter.db i volymen så importerar inbäddat läge den till den inbäddade PostgreSQL vid första start. Importen körs en gång; senare starter hoppar över den.
Telemetrinotering: inbäddat läge ärver avbildningens analysstandard som all annan konfiguration. Den publicerade avbildningen levereras med analys på; bygg med --build-arg SNAPOTTER_ANALYTICS=off, eller använd admin-opt-out i appen, för att inaktivera det.
Bearbetningsgränser
| Variabel | Standard | Beskrivning |
|---|---|---|
MAX_UPLOAD_SIZE_MB | 0 (obegränsat) | Maximal filstorlek per uppladdning i megabyte. Sätt till 0 för obegränsat. Den publicerade avbildningen levereras med 0; ett bygge från källkoden börjar på 100. |
MAX_BATCH_SIZE | 0 (obegränsat) | Maximalt antal filer i en enda batchförfrågan. Sätt till 0 för obegränsat. Den publicerade avbildningen levereras med 0; ett bygge från källkoden börjar på 100. |
CONCURRENT_JOBS | 0 (auto) | Antal batchjobb som körs parallellt. Sätt till 0 för att detektera automatiskt baserat på tillgängliga CPU-kärnor. |
MAX_MEGAPIXELS | 0 (obegränsat) | Maximal bildupplösning tillåten i megapixlar. Sätt till 0 för obegränsat. |
MAX_WORKER_THREADS | 0 (auto) | Maximalt antal worker-trådar för bildbehandling. Sätt till 0 för att detektera automatiskt baserat på tillgängliga CPU-kärnor. |
PROCESSING_TIMEOUT_S | 0 (ingen gräns) | Maximal bearbetningstid per förfrågan i sekunder. Sätt till 0 för ingen timeout. |
MAX_PIPELINE_STEPS | 20 | Maximalt antal steg i en pipeline. Sätt till 0 för ingen gräns. |
MAX_CANVAS_PIXELS | 0 (ingen gräns) | Maximal arbetsytestorlek i pixlar för utdatabilder. Sätt till 0 för ingen gräns. |
MAX_SVG_SIZE_MB | 50 | Största SVG som accepteras före sanering, i megabyte. 0 beter sig annorlunda här än i raderna omkring. Det tar bort storleksgränsen före parsning helt i stället för att höja den, så låt den här vara satt. |
MAX_PDF_PAGES | 0 (obegränsat) | Maximalt antal PDF-sidor för PDF-till-bild-konvertering. Sätt till 0 för obegränsat. |
Rensning
| Variabel | Standard | Beskrivning |
|---|---|---|
FILE_MAX_AGE_HOURS | 72 | Hur länge osparade bearbetningsresultat (råa uppladdningar och verktygsutdata) behålls innan automatisk radering. Filer du uttryckligen sparar till Files-biblioteket påverkas inte och består tills du raderar dem. |
CLEANUP_INTERVAL_MINUTES | 60 | Hur ofta rensningsjobbet körs. |
Utseende
| Variabel | Standard | Beskrivning |
|---|---|---|
DEFAULT_THEME | light | Standardtema för nya sessioner. light, dark eller system. |
DEFAULT_LOCALE | en | Standardgränssnittsspråk. |
DEFAULT_TOOL_VIEW | sidebar | Standardverktygslayout. sidebar eller fullscreen. |
Docker-behörigheter
| Variabel | Standard | Beskrivning |
|---|---|---|
PUID | 999 | Kör containerprocessen som detta UID. Sätt till att matcha din värdanvändare för bind-monteringar (id -u). |
PGID | 999 | Kör containerprocessen som detta GID. Sätt till att matcha din värdgrupp för bind-monteringar (id -g). |
Docker-exempel
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 # Ändra detta för icke-lokala distributioner
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:Volymer
Docker Compose-stacken använder fyra volymer:
/data(app) - AI-modeller, Python-venv och användarfiler. Montera denna för att behålla uppladdade filer och installerade AI-paket över omstarter./tmp/workspace(app) - Tillfällig lagring för filer som bearbetas. Denna kan vara flyktig, men att montera den undviker att fylla upp containerns skrivbara lager.SnapOtter-pgdata(postgres) - PostgreSQL-datakatalog. Denna innehåller alla relationsdata (användare, inställningar, pipelines, jobb, revisionslogg). Säkerhetskopiera viapg_dumpeller volymögonblicksbild.SnapOtter-redisdata(redis) - Redis append-only-fil för beständiga jobbköer.
