Search K
Конфигурация
Вся конфигурация выполняется через переменные окружения. У каждой переменной есть разумное значение по умолчанию, поэтому SnapOtter работает «из коробки» без задания хотя бы одной из них.
Переменные окружения
Сервер
| Переменная | По умолчанию | Описание |
|---|---|---|
PORT | 1349 | Порт, который прослушивает сервер. |
RATE_LIMIT_PER_MIN | 1000 | Максимум запросов в минуту с одного IP. Установите 0, чтобы отключить ограничение частоты запросов. |
CORS_ORIGIN | (пусто) | Разделённый запятыми список разрешённых источников для CORS или пусто только для того же источника. |
LOG_LEVEL | info | Подробность журнала. Одно из: fatal, error, warn, info, debug, trace. |
TRUST_PROXY | true | Доверять заголовкам X-Forwarded-For от обратного прокси. Установите false, если прокси нет. |
Аутентификация
| Переменная | По умолчанию | Описание |
|---|---|---|
AUTH_ENABLED | false | Установите true, чтобы требовать вход. Образ Docker по умолчанию использует true. |
DEFAULT_USERNAME | admin | Имя пользователя для начальной учётной записи администратора. Используется только при первом запуске. |
DEFAULT_PASSWORD | admin | Пароль для начальной учётной записи администратора. Смените его после первого входа. |
MAX_USERS | 0 (без ограничений) | Максимальное число зарегистрированных учётных записей пользователей. Установите 0 для отсутствия ограничений. |
SESSION_DURATION_HOURS | 168 | Время жизни сессии входа в часах (по умолчанию 7 дней). |
SKIP_MUST_CHANGE_PASSWORD | - | Установите любое непустое значение, чтобы обойти принудительный запрос на смену пароля при первом входе |
Хранилище
| Переменная | По умолчанию | Описание |
|---|---|---|
STORAGE_MODE | local | local или s3. S3/MinIO требует лицензию с функцией s3_storage. |
DATABASE_URL | postgres://snapotter:snapotter@postgres:5432/snapotter | Строка подключения PostgreSQL. |
REDIS_URL | redis://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.
| Переменная | По умолчанию | Описание |
|---|---|---|
EMBEDDED | auto | Включается автоматически, когда и DATABASE_URL, и REDIS_URL не заданы. Установите 0, чтобы отключить (тогда приложение сразу падает, если не задана внешняя DATABASE_URL/REDIS_URL, вместо тихого запуска базы данных внутри контейнера). |
REDIS_MAXMEMORY | 512mb | Ограничение памяти для встроенного Redis (только встроенный режим). Понизьте его на хостах с ограниченной памятью, например на Raspberry Pi. |
Обновление с 1.x: положите вашу старую snapotter.db по пути /data/snapotter.db в томе, и встроенный режим импортирует её во встроенный PostgreSQL при первом запуске. Импорт выполняется один раз; последующие запуски его пропускают.
Примечание о телеметрии: встроенный режим наследует значение аналитики по умолчанию из образа, как и любая другая конфигурация. Публикуемый образ поставляется с включённой аналитикой; чтобы отключить её, соберите с --build-arg SNAPOTTER_ANALYTICS=off или используйте отказ в интерфейсе администратора.
Ограничения обработки
| Переменная | По умолчанию | Описание |
|---|---|---|
MAX_UPLOAD_SIZE_MB | 100 | Максимальный размер файла на одну загрузку в мегабайтах. Установите 0 для отсутствия ограничений. |
MAX_BATCH_SIZE | 100 | Максимальное число файлов в одном пакетном запросе. Установите 0 для отсутствия ограничений. |
CONCURRENT_JOBS | 0 (авто) | Число пакетных задач, выполняемых параллельно. Установите 0 для автоопределения по числу доступных ядер CPU. |
MAX_MEGAPIXELS | 0 (без ограничений) | Максимальное разрешение изображения в мегапикселях. Установите 0 для отсутствия ограничений. |
MAX_WORKER_THREADS | 0 (авто) | Максимальное число потоков-воркеров для обработки изображений. Установите 0 для автоопределения по числу доступных ядер CPU. |
PROCESSING_TIMEOUT_S | 0 (без ограничения) | Максимальное время обработки на запрос в секундах. Установите 0 для отсутствия тайм-аута. |
MAX_PIPELINE_STEPS | 20 | Максимальное число шагов в конвейере. Установите 0 для отсутствия ограничения. |
MAX_CANVAS_PIXELS | 0 (без ограничения) | Максимальный размер холста в пикселях для выходных изображений. Установите 0 для отсутствия ограничения. |
MAX_SVG_SIZE_MB | 0 (без ограничений) | Максимальный размер файла SVG в мегабайтах. Установите 0 для отсутствия ограничений. |
MAX_SPLIT_GRID | 100 | Максимальная размерность сетки для инструмента разбиения изображения. |
MAX_PDF_PAGES | 0 (без ограничений) | Максимальное число страниц PDF для преобразования PDF в изображение. Установите 0 для отсутствия ограничений. |
Очистка
| Переменная | По умолчанию | Описание |
|---|---|---|
FILE_MAX_AGE_HOURS | 72 | Как долго хранятся несохранённые результаты обработки (исходные загрузки и выводы инструментов) до автоматического удаления. Файлы, которые вы явно сохранили в библиотеку Files, не затрагиваются и хранятся, пока вы их не удалите. |
CLEANUP_INTERVAL_MINUTES | 60 | Как часто выполняется задача очистки. |
Внешний вид
| Переменная | По умолчанию | Описание |
|---|---|---|
DEFAULT_THEME | light | Тема по умолчанию для новых сессий. light или dark. |
DEFAULT_LOCALE | en | Язык интерфейса по умолчанию. |
DEFAULT_TOOL_VIEW | sidebar | Макет инструментов по умолчанию. sidebar или fullscreen. |
Права доступа Docker
| Переменная | По умолчанию | Описание |
|---|---|---|
PUID | 999 | Запускать процесс контейнера с этим UID. Установите в соответствии с вашим пользователем хоста для смонтированных каталогов (id -u). |
PGID | 999 | Запускать процесс контейнера с этим 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) для устойчивых очередей задач.
