This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

Конфигурация

Вся конфигурация выполняется через переменные окружения. У каждой переменной есть разумное значение по умолчанию, поэтому SnapOtter работает «из коробки» без задания хотя бы одной из них.

Переменные окружения

Сервер

ПеременнаяПо умолчаниюОписание
PORT1349Порт, который прослушивает сервер.
RATE_LIMIT_PER_MIN1000Максимум запросов в минуту с одного IP. Установите 0, чтобы отключить ограничение частоты запросов.
CORS_ORIGIN(пусто)Разделённый запятыми список разрешённых источников для CORS или пусто только для того же источника.
LOG_LEVELinfoПодробность журнала. Одно из: fatal, error, warn, info, debug, trace.
TRUST_PROXYtrueДоверять заголовкам X-Forwarded-For от обратного прокси. Установите false, если прокси нет.

Аутентификация

ПеременнаяПо умолчаниюОписание
AUTH_ENABLEDfalseУстановите true, чтобы требовать вход. Образ Docker по умолчанию использует true.
DEFAULT_USERNAMEadminИмя пользователя для начальной учётной записи администратора. Используется только при первом запуске.
DEFAULT_PASSWORDadminПароль для начальной учётной записи администратора. Смените его после первого входа.
MAX_USERS0 (без ограничений)Максимальное число зарегистрированных учётных записей пользователей. Установите 0 для отсутствия ограничений.
SESSION_DURATION_HOURS168Время жизни сессии входа в часах (по умолчанию 7 дней).
SKIP_MUST_CHANGE_PASSWORD-Установите любое непустое значение, чтобы обойти принудительный запрос на смену пароля при первом входе

Хранилище

ПеременнаяПо умолчаниюОписание
STORAGE_MODElocallocal или s3. S3/MinIO требует лицензию с функцией s3_storage.
DATABASE_URLpostgres://snapotter:snapotter@postgres:5432/snapotterСтрока подключения PostgreSQL.
REDIS_URLredis://redis:6379Строка подключения Redis (используется для очередей задач BullMQ).
WORKSPACE_PATH./tmp/workspaceКаталог для временных файлов во время обработки. Очищается автоматически.
FILES_STORAGE_PATH./data/filesКаталог для постоянных файлов пользователя (загруженные изображения, сохранённые результаты).

Встроенный режим

Запустите образ без DATABASE_URL и без REDIS_URL, и он запустит собственные PostgreSQL 17 и Redis внутри контейнера, привязанные к loopback, со всеми данными на томе /data. Это восстанавливает опыт запуска одной командой docker run для быстрого старта, домашней лаборатории и обновлений с 1.x. Это путь для удобства, а не продакшн-развёртывание: для продакшена запускайте стек из 3 контейнеров Compose с отдельными PostgreSQL и Redis. Встроенный режим требует запуска контейнера от root и несовместим со средами с произвольным UID (OpenShift, Kubernetes runAsNonRoot); там используйте Compose.

ПеременнаяПо умолчаниюОписание
EMBEDDEDautoВключается автоматически, когда и DATABASE_URL, и REDIS_URL не заданы. Установите 0, чтобы отключить (тогда приложение сразу падает, если не задана внешняя DATABASE_URL/REDIS_URL, вместо тихого запуска базы данных внутри контейнера).
REDIS_MAXMEMORY512mbОграничение памяти для встроенного Redis (только встроенный режим). Понизьте его на хостах с ограниченной памятью, например на Raspberry Pi.

Обновление с 1.x: положите вашу старую snapotter.db по пути /data/snapotter.db в томе, и встроенный режим импортирует её во встроенный PostgreSQL при первом запуске. Импорт выполняется один раз; последующие запуски его пропускают.

Примечание о телеметрии: встроенный режим наследует значение аналитики по умолчанию из образа, как и любая другая конфигурация. Публикуемый образ поставляется с включённой аналитикой; чтобы отключить её, соберите с --build-arg SNAPOTTER_ANALYTICS=off или используйте отказ в интерфейсе администратора.

Ограничения обработки

ПеременнаяПо умолчаниюОписание
MAX_UPLOAD_SIZE_MB100Максимальный размер файла на одну загрузку в мегабайтах. Установите 0 для отсутствия ограничений.
MAX_BATCH_SIZE100Максимальное число файлов в одном пакетном запросе. Установите 0 для отсутствия ограничений.
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_MB0 (без ограничений)Максимальный размер файла SVG в мегабайтах. Установите 0 для отсутствия ограничений.
MAX_SPLIT_GRID100Максимальная размерность сетки для инструмента разбиения изображения.
MAX_PDF_PAGES0 (без ограничений)Максимальное число страниц PDF для преобразования PDF в изображение. Установите 0 для отсутствия ограничений.

Очистка

ПеременнаяПо умолчаниюОписание
FILE_MAX_AGE_HOURS72Как долго хранятся несохранённые результаты обработки (исходные загрузки и выводы инструментов) до автоматического удаления. Файлы, которые вы явно сохранили в библиотеку Files, не затрагиваются и хранятся, пока вы их не удалите.
CLEANUP_INTERVAL_MINUTES60Как часто выполняется задача очистки.

Внешний вид

ПеременнаяПо умолчаниюОписание
DEFAULT_THEMElightТема по умолчанию для новых сессий. light или dark.
DEFAULT_LOCALEenЯзык интерфейса по умолчанию.
DEFAULT_TOOL_VIEWsidebarМакет инструментов по умолчанию. sidebar или fullscreen.

Права доступа Docker

ПеременнаяПо умолчаниюОписание
PUID999Запускать процесс контейнера с этим UID. Установите в соответствии с вашим пользователем хоста для смонтированных каталогов (id -u).
PGID999Запускать процесс контейнера с этим GID. Установите в соответствии с вашей группой хоста для смонтированных каталогов (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"]
      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 и файлы пользователя. Смонтируйте его, чтобы сохранять загруженные файлы и установленные AI-пакеты между перезапусками.
  • /tmp/workspace (app), временное хранилище для обрабатываемых файлов. Оно может быть эфемерным, но монтирование избавляет от заполнения записываемого слоя контейнера.
  • SnapOtter-pgdata (postgres), каталог данных PostgreSQL. В нём хранятся все реляционные данные (пользователи, настройки, конвейеры, задачи, журнал аудита). Создавайте резервную копию через pg_dump или снимок тома.
  • SnapOtter-redisdata (redis), файл Redis только для добавления (append-only) для устойчивых очередей задач.