Search K
設定
すべての設定は環境変数を通じて行います。各変数には妥当なデフォルト値があるため、SnapOtter は何も設定しなくてもそのまま動作します。
環境変数
サーバー
| 変数 | デフォルト | 説明 |
|---|---|---|
PORT | 1349 | サーバーがリッスンするポート。 |
RATE_LIMIT_PER_MIN | 1000 | IP ごとの 1 分あたりの最大リクエスト数。レート制限を無効にするには 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 | 初期 admin アカウントのユーザー名。初回起動時のみ使用されます。 |
DEFAULT_PASSWORD | admin | 初期 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 を起動し、ループバックにバインドして、すべてのデータを /data ボリューム上に置きます。これにより、クイックスタート、ホームラボ、1.x からのアップグレード向けに、ワンコマンドの docker run 体験が復活します。これは利便性のための手段であり、本番デプロイではありません。本番環境では、PostgreSQL と Redis を分離した 3 コンテナの Compose スタックを実行してください。組み込みモードはコンテナを 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 でビルドするか、アプリ内の admin オプトアウトを使用してください。
処理制限
| 変数 | デフォルト | 説明 |
|---|---|---|
MAX_UPLOAD_SIZE_MB | 100 | アップロードあたりの最大ファイルサイズ(メガバイト単位)。無制限にするには 0 に設定します。 |
MAX_BATCH_SIZE | 100 | 単一バッチリクエスト内の最大ファイル数。無制限にするには 0 に設定します。 |
CONCURRENT_JOBS | 0 (自動) | 並列実行されるバッチジョブの数。利用可能な CPU コア数に基づいて自動検出するには 0 に設定します。 |
MAX_MEGAPIXELS | 0 (無制限) | 許可される最大画像解像度(メガピクセル単位)。無制限にするには 0 に設定します。 |
MAX_WORKER_THREADS | 0 (自動) | 画像処理の最大ワーカースレッド数。利用可能な CPU コア数に基づいて自動検出するには 0 に設定します。 |
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-to-image 変換での 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 スタックは 4 つのボリュームを使用します:
/data(app) - AI モデル、Python venv、ユーザーファイル。アップロードしたファイルとインストール済みの AI バンドルを再起動を越えて保持するには、これをマウントします。/tmp/workspace(app) - 処理中のファイルの一時ストレージ。エフェメラルでも構いませんが、マウントするとコンテナの書き込み可能レイヤーが埋まるのを防げます。SnapOtter-pgdata(postgres) - PostgreSQL データディレクトリ。すべてのリレーショナルデータ(ユーザー、設定、パイプライン、ジョブ、監査ログ)を保持します。pg_dumpまたはボリュームスナップショットでバックアップします。SnapOtter-redisdata(redis) - 永続的なジョブキュー用の Redis 追記専用ファイル。
