यह पेज मशीन से अनुवादित किया गया था। कोई गलती दिखी?इसे बेहतर बनाने में मदद करें।
Skip to content

Configuration

सभी कॉन्फ़िगरेशन एनवायरनमेंट वेरिएबल्स के माध्यम से किया जाता है। हर वेरिएबल का एक उचित डिफ़ॉल्ट होता है, इसलिए SnapOtter उनमें से किसी को सेट किए बिना बॉक्स से बाहर काम करता है।

Environment variables

Server

VariableDefaultDescription
PORT1349सर्वर जिस पोर्ट पर सुनता है।
RATE_LIMIT_PER_MIN1000प्रति IP प्रति मिनट अधिकतम अनुरोध। रेट लिमिटिंग अक्षम करने के लिए 0 पर सेट करें।
CORS_ORIGIN(empty)CORS के लिए अल्पविराम-पृथक अनुमत मूल, या केवल-समान-मूल के लिए खाली।
LOG_LEVELinfoलॉग वर्बोसिटी। इनमें से एक: fatal, error, warn, info, debug, trace
TRUST_PROXYloopback,linklocal,uniquelocalX-Forwarded-For के ज़रिए क्लाइंट IP कौन से पीयर सेट कर सकते हैं। डिफ़ॉल्ट केवल किसी निजी नेटवर्क के पीयर पर भरोसा करता है, इसलिए Docker नेटवर्क या LAN पर मौजूद रिवर्स प्रॉक्सी भरोसेमंद माना जाता है, जबकि किसी सार्वजनिक क्लाइंट का जाली हेडर नहीं। true तभी सेट करें जब आपके नियंत्रण वाला कोई प्रॉक्सी सार्वजनिक पते पर आगे लगा हो।

Authentication

नीचे दिए गए दोनों बूलियन केवल true और false स्वीकार करते हैं। इसके अलावा कुछ और, जैसे 1 या yes या on, सत्यापन में विफल हो जाता है और सर्वर सुनना शुरू करने से पहले ही बाहर निकल जाता है।

VariableDefaultDescription
AUTH_ENABLEDtrueलॉगिन अनिवार्य करें। बिना किसी अकाउंट के चलाने के लिए false पर सेट करें, जो हर अनुरोध को admin अधिकार देता है, इसलिए इसे किसी भरोसेमंद नेटवर्क तक ही सीमित रखें।
DEFAULT_USERNAMEadminप्रारंभिक admin अकाउंट के लिए उपयोगकर्ता नाम। केवल पहली बार चलने पर उपयोग किया जाता है।
DEFAULT_PASSWORDadminप्रारंभिक admin अकाउंट के लिए पासवर्ड। पहली बार लॉगिन के बाद इसे बदलें।
MAX_USERS0 (unlimited)पंजीकृत उपयोगकर्ता अकाउंट की अधिकतम संख्या। असीमित के लिए 0 पर सेट करें।
SESSION_DURATION_HOURS168घंटों में लॉगिन सत्र जीवनकाल (डिफ़ॉल्ट 7 दिन है)।
SKIP_MUST_CHANGE_PASSWORDfalseपहली बार लॉगिन पर बाध्य पासवर्ड-परिवर्तन प्रॉम्प्ट को छोड़ने के लिए true पर सेट करें।

Storage

VariableDefaultDescription
STORAGE_MODElocallocal या s3। S3 और MinIO के लिए s3_storage फ़ीचर वाले लाइसेंस के साथ नीचे दिए गए S3_* वेरिएबल्स की भी आवश्यकता होती है।
DATABASE_URLpostgres://snapotter:snapotter@localhost:5432/snapotterPostgreSQL कनेक्शन स्ट्रिंग। Compose स्टैक इसे अपनी postgres सेवा की ओर इंगित करता है; embedded मोड पाने के लिए इसे (REDIS_URL के साथ) अनसेट छोड़ दें।
REDIS_URLredis://localhost:6379Redis कनेक्शन स्ट्रिंग (BullMQ जॉब क्यू के लिए उपयोग की जाती है)। Compose इसे अपनी redis सेवा की ओर इंगित करता है।
WORKSPACE_PATH./tmp/workspaceप्रोसेसिंग के दौरान अस्थायी फ़ाइलों के लिए डायरेक्टरी। स्वचालित रूप से साफ़ की जाती है। इमेज इसे /tmp/workspace पर सेट करती है।
FILES_STORAGE_PATH./data/filesस्थायी उपयोगकर्ता फ़ाइलों (अपलोड की गई इमेज, सहेजे गए परिणाम) के लिए डायरेक्टरी। इमेज इसे /data/files पर सेट करती है।

S3 object storage

ये केवल तभी पढ़े जाते हैं जब STORAGE_MODE=s3 हो। तीन आवश्यक वेरिएबल्स में से कोई भी छूट जाए तो स्टार्टअप विफल हो जाता है और जो वेरिएबल आपने छोड़ा उसका नाम बताता है।

VariableDefaultDescription
S3_BUCKET(empty)वह बकेट जो अपलोड और आउटपुट रखता है। आवश्यक।
S3_ACCESS_KEY_ID(empty)एक्सेस की। आवश्यक। कंटेनर में आप इसके बजाय इसे S3_ACCESS_KEY_ID_FILE के माध्यम से माउंट कर सकते हैं।
S3_SECRET_ACCESS_KEY(empty)सीक्रेट की। आवश्यक। वही फ़ाइल परिपाटी: S3_SECRET_ACCESS_KEY_FILE
S3_REGIONus-east-1बकेट का क्षेत्र।
S3_ENDPOINT(empty)MinIO, R2, Backblaze, और अन्य S3-संगत स्टोर के लिए कस्टम एंडपॉइंट। खाली का अर्थ है AWS।
S3_FORCE_PATH_STYLEfalseMinIO और ऐसी किसी भी अन्य चीज़ के लिए true पर सेट करें जो वर्चुअल-होस्ट एड्रेसिंग के बजाय endpoint/bucket/key चाहती है।
S3_PREFIX(empty)की प्रीफ़िक्स, ताकि एक ही बकेट कई इंस्टेंस रख सके।

Encryption at rest

VariableDefaultDescription
DATA_ENCRYPTION_KEY(empty)64 हेक्स वर्ण (32 बाइट)। डेटाबेस में संग्रहीत संवेदनशील सेटिंग्स को एन्क्रिप्ट करता है। जो कुछ भी 64 हेक्स वर्ण नहीं है उसे स्टार्टअप पर अस्वीकार कर दिया जाता है।
DATA_ENCRYPTION_KEY_PREVIOUS(empty)वह की जिससे आप रोटेट होकर दूर जा रहे हैं, वही फ़ॉर्मैट। रोटेशन के दौरान दोनों सेट करें ताकि मौजूदा पंक्तियाँ अब भी डिक्रिप्ट हों, फिर इसे हटा दें।

Embedded mode

इमेज को बिना किसी DATABASE_URL और बिना किसी REDIS_URL के चलाएँ और यह कंटेनर के अंदर अपना स्वयं का PostgreSQL 17 और Redis शुरू करता है, जो लूपबैक से बंधा हुआ है, सारा डेटा /data वॉल्यूम पर। यह त्वरित शुरुआत, होमलैब, और 1.x से अपग्रेड के लिए एकल-कमांड docker run अनुभव को बहाल करता है। यह एक सुविधा पथ है, न कि एक प्रोडक्शन परिनियोजन: प्रोडक्शन के लिए, अलग PostgreSQL और Redis के साथ 3-कंटेनर Compose स्टैक चलाएँ। Embedded मोड को कंटेनर को रूट के रूप में चलाने की आवश्यकता होती है और यह मनमाने-UID रनटाइम (OpenShift, Kubernetes runAsNonRoot) के साथ असंगत है; वहाँ Compose का उपयोग करें।

VariableDefaultDescription
EMBEDDEDautoतब स्वतः-सक्षम होता है जब DATABASE_URL और REDIS_URL दोनों अनसेट हों। इसे अक्षम करने के लिए 0 पर सेट करें (तब ऐप तेज़ी से विफल हो जाता है यदि कोई बाहरी DATABASE_URL/REDIS_URL सेट नहीं है, बजाय चुपचाप एक इन-कंटेनर डेटाबेस शुरू करने के)।
REDIS_MAXMEMORY512mbएम्बेडेड Redis के लिए मेमोरी कैप (केवल embedded मोड)। Raspberry Pi जैसे मेमोरी-सीमित होस्ट पर इसे कम करें।

1.x से अपग्रेड करना: अपनी पुरानी snapotter.db को वॉल्यूम में /data/snapotter.db पर रखें और embedded मोड इसे पहली बार बूट होने पर एम्बेडेड PostgreSQL में आयात करता है। आयात एक बार चलता है; बाद के बूट इसे छोड़ देते हैं।

टेलीमेट्री नोट: embedded मोड किसी भी अन्य कॉन्फ़िगरेशन की तरह इमेज के एनालिटिक्स डिफ़ॉल्ट को विरासत में लेता है। प्रकाशित इमेज एनालिटिक्स चालू के साथ शिप होती है; इसे अक्षम करने के लिए --build-arg SNAPOTTER_ANALYTICS=off के साथ बिल्ड करें, या इन-ऐप admin ऑप्ट-आउट का उपयोग करें।

Processing limits

VariableDefaultDescription
MAX_UPLOAD_SIZE_MB0 (unlimited)मेगाबाइट में प्रति अपलोड अधिकतम फ़ाइल आकार। असीमित के लिए 0 पर सेट करें। प्रकाशित इमेज 0 के साथ शिप होती है; सोर्स से बिल्ड 100 से शुरू होता है।
MAX_BATCH_SIZE0 (unlimited)एकल बैच अनुरोध में फ़ाइलों की अधिकतम संख्या। असीमित के लिए 0 पर सेट करें। प्रकाशित इमेज 0 के साथ शिप होती है; सोर्स से बिल्ड 100 से शुरू होता है।
CONCURRENT_JOBS0 (auto)समानांतर में चलने वाले बैच जॉब की संख्या। उपलब्ध CPU कोर के आधार पर स्वतः-पहचान के लिए 0 पर सेट करें।
MAX_MEGAPIXELS0 (unlimited)मेगापिक्सेल में अनुमत अधिकतम इमेज रिज़ॉल्यूशन। असीमित के लिए 0 पर सेट करें।
MAX_WORKER_THREADS0 (auto)इमेज प्रोसेसिंग के लिए अधिकतम वर्कर थ्रेड। उपलब्ध CPU कोर के आधार पर स्वतः-पहचान के लिए 0 पर सेट करें।
PROCESSING_TIMEOUT_S0 (no limit)सेकंड में प्रति अनुरोध अधिकतम प्रोसेसिंग समय। बिना टाइमआउट के लिए 0 पर सेट करें।
MAX_PIPELINE_STEPS20एक पाइपलाइन में अधिकतम चरणों की संख्या। बिना सीमा के लिए 0 पर सेट करें।
MAX_CANVAS_PIXELS0 (no limit)आउटपुट इमेज के लिए पिक्सेल में अधिकतम कैनवास आकार। बिना सीमा के लिए 0 पर सेट करें।
MAX_SVG_SIZE_MB50सैनिटाइज़ करने से पहले स्वीकार किया जाने वाला सबसे बड़ा SVG, मेगाबाइट में। यहाँ 0 आसपास की पंक्तियों से अलग व्यवहार करता है। यह पार्स-पूर्व आकार सीमा को बढ़ाने के बजाय पूरी तरह हटा देता है, इसलिए इसे सेट ही रहने दें।
MAX_PDF_PAGES0 (unlimited)PDF-to-image रूपांतरण के लिए PDF पृष्ठों की अधिकतम संख्या। असीमित के लिए 0 पर सेट करें।

Cleanup

VariableDefaultDescription
FILE_MAX_AGE_HOURS72बिना सहेजे प्रोसेसिंग परिणाम (कच्चे अपलोड और टूल आउटपुट) स्वचालित हटाने से पहले कितने समय तक रखे जाते हैं। जिन फ़ाइलों को आप स्पष्ट रूप से Files लाइब्रेरी में सहेजते हैं वे प्रभावित नहीं होतीं और तब तक बनी रहती हैं जब तक आप उन्हें हटा नहीं देते।
CLEANUP_INTERVAL_MINUTES60क्लीनअप जॉब कितनी बार चलता है।

Appearance

VariableDefaultDescription
DEFAULT_THEMElightनए सत्रों के लिए डिफ़ॉल्ट थीम। light, dark, या system
DEFAULT_LOCALEenडिफ़ॉल्ट इंटरफ़ेस भाषा।
DEFAULT_TOOL_VIEWsidebarडिफ़ॉल्ट टूल लेआउट। sidebar या fullscreen

Docker permissions

VariableDefaultDescription
PUID999कंटेनर प्रक्रिया को इस UID के रूप में चलाएँ। बाइंड माउंट के लिए अपने होस्ट उपयोगकर्ता से मिलान करने के लिए सेट करें (id -u)।
PGID999कंटेनर प्रक्रिया को इस GID के रूप में चलाएँ। बाइंड माउंट के लिए अपने होस्ट समूह से मिलान करने के लिए सेट करें (id -g)।

Docker example

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:

Volumes

Docker Compose स्टैक चार वॉल्यूम का उपयोग करता है:

  • /data (app) - AI मॉडल, Python venv, और उपयोगकर्ता फ़ाइलें। अपलोड की गई फ़ाइलों और इंस्टॉल किए गए AI बंडलों को पुनरारंभ के दौरान रखने के लिए इसे माउंट करें।
  • /tmp/workspace (app) - प्रोसेस की जा रही फ़ाइलों के लिए अस्थायी स्टोरेज। यह क्षणिक हो सकता है, लेकिन इसे माउंट करने से कंटेनर की लिखने योग्य लेयर भरने से बचती है।
  • SnapOtter-pgdata (postgres) - PostgreSQL डेटा डायरेक्टरी। यह सभी रिलेशनल डेटा (users, settings, pipelines, jobs, audit log) रखती है। pg_dump या वॉल्यूम स्नैपशॉट के माध्यम से बैकअप लें।
  • SnapOtter-redisdata (redis) - टिकाऊ जॉब क्यू के लिए Redis append-only फ़ाइल।