mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
165 lines
14 KiB
Markdown
165 lines
14 KiB
Markdown
---
|
|||
|
|
description: "Все переменные окружения SnapOtter со значениями по умолчанию. Настройте аутентификацию, хранилище, AI-модели, аналитику и не только."
|
||
|
|
i18n_source_hash: 8e9e9ca2840c
|
||
|
|
i18n_provenance: human
|
||
|
|
i18n_output_hash: 0a35f86cfc5b
|
||
|
|
---
|
||
|
|
|
||
|
|
# Конфигурация {#configuration}
|
||
|
|
|
||
|
|
Вся конфигурация выполняется через переменные окружения. У каждой переменной есть разумное значение по умолчанию, поэтому SnapOtter работает «из коробки» без задания хотя бы одной из них.
|
||
|
|
|
||
|
|
## Переменные окружения {#environment-variables}
|
||
|
|
|
||
|
|
### Сервер {#server}
|
||
|
|
|
||
|
|
| Переменная | По умолчанию | Описание |
|
||
|
|
|---|---|---|
|
||
|
|
| `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`, если прокси нет. |
|
||
|
|
|
||
|
|
### Аутентификация {#authentication}
|
||
|
|
|
||
|
|
| Переменная | По умолчанию | Описание |
|
||
|
|
|---|---|---|
|
||
|
|
| `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}
|
||
|
|
|
||
|
|
| Переменная | По умолчанию | Описание |
|
||
|
|
|---|---|---|
|
||
|
|
| `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` | Каталог для постоянных файлов пользователя (загруженные изображения, сохранённые результаты). |
|
||
|
|
|
||
|
|
### Встроенный режим {#embedded-mode}
|
||
|
|
|
||
|
|
Запустите образ без `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` или используйте отказ в интерфейсе администратора.
|
||
|
|
|
||
|
|
### Ограничения обработки {#processing-limits}
|
||
|
|
|
||
|
|
| Переменная | По умолчанию | Описание |
|
||
|
|
|---|---|---|
|
||
|
|
| `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 для отсутствия ограничений. |
|
||
|
|
|
||
|
|
### Очистка {#cleanup}
|
||
|
|
|
||
|
|
| Переменная | По умолчанию | Описание |
|
||
|
|
|---|---|---|
|
||
|
|
| `FILE_MAX_AGE_HOURS` | `72` | Как долго хранятся несохранённые результаты обработки (исходные загрузки и выводы инструментов) до автоматического удаления. Файлы, которые вы явно сохранили в библиотеку Files, не затрагиваются и хранятся, пока вы их не удалите. |
|
||
|
|
| `CLEANUP_INTERVAL_MINUTES` | `60` | Как часто выполняется задача очистки. |
|
||
|
|
|
||
|
|
### Внешний вид {#appearance}
|
||
|
|
|
||
|
|
| Переменная | По умолчанию | Описание |
|
||
|
|
|---|---|---|
|
||
|
|
| `DEFAULT_THEME` | `light` | Тема по умолчанию для новых сессий. `light` или `dark`. |
|
||
|
|
| `DEFAULT_LOCALE` | `en` | Язык интерфейса по умолчанию. |
|
||
|
|
| `DEFAULT_TOOL_VIEW` | `sidebar` | Макет инструментов по умолчанию. `sidebar` или `fullscreen`. |
|
||
|
|
|
||
|
|
### Права доступа Docker {#docker-permissions}
|
||
|
|
|
||
|
|
| Переменная | По умолчанию | Описание |
|
||
|
|
|---|---|---|
|
||
|
|
| `PUID` | `999` | Запускать процесс контейнера с этим UID. Установите в соответствии с вашим пользователем хоста для смонтированных каталогов (`id -u`). |
|
||
|
|
| `PGID` | `999` | Запускать процесс контейнера с этим GID. Установите в соответствии с вашей группой хоста для смонтированных каталогов (`id -g`). |
|
||
|
|
|
||
|
|
## Пример Docker {#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"]
|
||
|
|
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 и файлы пользователя. Смонтируйте его, чтобы сохранять загруженные файлы и установленные AI-пакеты между перезапусками.
|
||
|
|
- `/tmp/workspace` (app), временное хранилище для обрабатываемых файлов. Оно может быть эфемерным, но монтирование избавляет от заполнения записываемого слоя контейнера.
|
||
|
|
- `SnapOtter-pgdata` (postgres), каталог данных PostgreSQL. В нём хранятся все реляционные данные (пользователи, настройки, конвейеры, задачи, журнал аудита). Создавайте резервную копию через `pg_dump` или снимок тома.
|
||
|
|
- `SnapOtter-redisdata` (redis), файл Redis только для добавления (append-only) для устойчивых очередей задач.
|