設定
セルフホスティングの Nodaro のすべての環境変数を、目的別に説明します。デフォルト値、Compose スタックで .env から設定できるかどうか、変数で変わる内容をまとめています。
このページは、セルフホスティングの Nodaro の設定リファレンスです。運用者が設定するすべての環境変数を、目的別に、デフォルト値とあわせて説明します。同梱の Compose スタックでは、どの変数にもそのまま動くデフォルト値があるので、変えたいものだけを設定します。Nodaro Cloud にだけ関係する変数は載せていません。
変数の設定方法
Compose スタックでは、変数を次の 2 か所のどちらかで設定します。
.envで設定する:docker-compose.community.ymlと同じ場所にある.envです。Compose ファイルがアプリに渡す変数には、この方法が使えます。以下の表では、そうした変数の .env 列がはいになっています。- Compose ファイルで設定する:それ以外のすべての変数に使います。
nodaroサービスのenvironment:に追加します。
nodaro:
environment:
# ...the variables already listed...
MCP_ENABLED: "true"
MCP_PUBLIC_URL: https://mcp.nodaro.example.comそのあと、変更を適用します。
docker compose -f docker-compose.community.yml up -dNodaro は、起動時に環境変数を読み込みます。唯一の例外は /setup で貼り付けたプロバイダーキーで、これはすぐに適用されます。Compose スタックを使わない場合は、利用しているプラットフォームの環境変数の設定で変数を設定します。
Compose スタックを使わない場合に必須の変数:SUPABASE_URL、SUPABASE_SERVICE_ROLE_KEY、INTERNAL_ORCHESTRATOR_SECRET です。これらがないと、API は起動せず、不足している変数や無効な変数を一覧表示します。
インスタンス
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
EDITION | community | いいえ | community、business、cloud のいずれかです。Compose ファイルでは community に固定されています。エディションとサーフェスプロファイルを参照してください。 |
PUBLIC_URL | http://localhost:3000 | はい | 環境の公開オリジンです。ログインと OAuth のコールバック、メディアの URL、CORS のチェックに使われます。 |
PUBLIC_URL_SAME_ORIGIN | 未設定 | いいえ | true にすると、ブラウザーに渡す API のアドレスが PUBLIC_URL ではなく / になり、ストリームが、訪問者が開いたホスト名のまま維持されます。複数のホスト名で応答する環境向けです。有効になるのは、厳密に true という値だけです。 |
CORS_ORIGIN | 空 | はい | 追加で許可するブラウザーのオリジンを、カンマ区切りで指定します。PUBLIC_URL は常に許可されます。これらのホストでは、SSO のランディングのリダイレクトが相対パスになります。 |
DEFAULT_LOCALE | 空(ブラウザーの言語) | はい | 新しい訪問者が最初に使う言語です。デフォルトの言語を参照してください。 |
NODARO_SURFACE_PROFILE | 空(すべてのインターフェース) | はい | Business エディションの環境で、インターフェースを絞り込みます。サーフェスプロファイルを参照してください。 |
NODARO_TUTORIAL_PACKS | 空(組み込みのチュートリアルのみ) | はい | 追加のチュートリアルパックのディレクトリを、カンマ区切りで指定します。チュートリアルパックを参照してください。 |
RUNTIME_ENV | local | いいえ | 2 つの環境が 1 つのデータベースを共有し、Redis は共有しない場合に、環境を区別する名前です。スケーリングを参照してください。Railway では、RAILWAY_ENVIRONMENT_NAME がこの値を設定します。 |
PORT, HOST | 8000、0.0.0.0 | いいえ | API が待ち受ける場所です。イメージの中では、API は 9000 で待ち受け、その前段で Web サーバーが 3000 で待ち受けます。 |
NODE_ENV | development | いいえ | どのイメージでも production です。 |
シークレット
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
INTERNAL_ORCHESTRATOR_SECRET | Compose スタックでは起動時に生成 | はい | オーケストレーターを API に対して認証します。32 文字以上が必要です。Compose スタックを使わない場合は必須です。 |
NODARO_ENCRYPTION_KEY | Compose スタックでは初回起動時に生成し、app-data ボリュームに保持 | はい | 保存する認証情報を暗号化する、64 文字の 16 進数のキーです。対象は、貼り付けたプロバイダーキー、SNS のログイントークン、Webhook 出力(Webhook Output)用に保存した HTTP の認証情報です。 |
SOCIAL_ENCRYPTION_KEY | 空 | はい | NODARO_ENCRYPTION_KEY の以前の名前です。どちらでも動作します。 |
シークレットは openssl rand -hex 32 で生成します。暗号化キーは、データベースと一緒にバックアップしてください。バックアップとリストアを参照してください。
データベースとログイン
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
SUPABASE_URL | Compose スタックでは http://localhost:3000/supabase | はい | API が使う Supabase の URL です。Compose スタックを使わない場合は必須です。 |
SUPABASE_SERVICE_ROLE_KEY | Compose スタックでは公開済みのデフォルトキー | はい | API が使う service-role キーです。Compose スタックを使わない場合は必須です。 |
SUPABASE_ANON_KEY | Compose スタックでは公開済みのデフォルトキー | はい | ブラウザーとログインサービスに渡す anon キーです。 |
FRONTEND_SUPABASE_URL | 同梱のスタックでは PUBLIC_URL/supabase | はい | ブラウザーが使う Supabase の URL で、起動時に /config.js に書き込まれます。マネージドの Supabase プロジェクトを使う場合に設定します。 |
SUPABASE_JWT_SECRET | 公開済みのデフォルトのシークレット | はい | 同梱のスタックで、anon キーと service-role キーに署名するシークレットです。3 つとも node tools/generate-selfhost-keys.mjs で生成します。 |
POSTGRES_PASSWORD | nodaro-postgres-pw | はい | 同梱のデータベースのパスワードです。内部ロールのパスワードがこの値に合わせられるのは、データベースの初回起動時だけです。 |
DATABASE_URL | postgres://postgres:nodaro-postgres-pw@db:5432/postgres | はい | Postgres に直接接続する URL で、起動時にマイグレーションを適用するためだけに使います。パスワードは POSTGRES_PASSWORD と一致させてください。 |
RUN_MIGRATIONS_ON_BOOT | false(Compose スタックでは true) | はい | API の起動前に supabase/migrations/ を適用します。マネージドの Supabase プロジェクトを使う場合は false にします。 |
SUPABASE_MANAGED_PROXY | 未設定 | いいえ | true にすると、マネージドの Supabase プロジェクトを、アプリ自身のオリジン経由で提供します。データベースを参照してください。 |
SUPABASE_PROXY_UPSTREAM | 未設定 | いいえ | 上記のプロキシで使う、マネージドプロジェクトのオリジンです。パスは含めません。 |
キュー
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
REDIS_URL | redis://localhost:6379(Compose スタックでは redis://redis:6379) | いいえ | キューと共有キャッシュに使う Redis です。クラスターや Sentinel の URL も使えます。 |
ストレージ
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
R2_ENDPOINT | Compose スタックでは http://minio:9000 | はい | ストレージの S3 API の URL です。Compose スタックでは、空の値は MinIO にフォールバックします。 |
R2_FORCE_PATH_STYLE | Compose スタックでは true | はい | パス形式のアドレス指定です。セルフホスティングのストレージの多くで必要です。 |
R2_ACCOUNT_ID | 空 | はい | Cloudflare のアカウント ID です。Compose スタックを使わない場合、R2_ENDPOINT が未設定なら、R2 のエンドポイントはこの値から決まります。 |
R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY | 同梱の MinIO の認証情報 | はい | ストレージの認証情報です。Compose スタックでは、MinIO の root の認証情報も兼ねます。 |
R2_BUCKET_NAME | Compose スタックでは nodaro-assets | はい | バケットです。Compose スタックを使わない場合のデフォルトは scenenode-assets なので、必ず設定してください。 |
R2_PUBLIC_URL | Compose スタックでは http://localhost:3000/storage/nodaro-assets | はい | バケットの公開 URL です。 |
R2_REGION | auto | はい | S3 のリージョンです。AWS、DigitalOcean Spaces(nyc3 など)、ローカルの Supabase(local)では、実際のリージョンを設定します。 |
STORAGE_OBJECT_ACL | 空(ACL ヘッダーなし) | はい | アップロードするすべてのオブジェクトに付ける既定 ACL(canned ACL)です。バケットポリシーを受け付けないストレージ向けです。インストールを参照してください。 |
R2_PUBLIC_FALLBACK_DOMAIN | 空 | いいえ | メディア用の 2 つ目の公開ホストです。たとえば、CDN のドメインと並べて使う、r2.dev の生のアドレスです。 |
R2_SHARED_WITH_RELAY_TARGET | false | いいえ | R2_PUBLIC_URL が、Nodaro Cloud のホストが書き込むのと同じバケットを指している場合にだけ true にします。Nodaro Cloud に接続するを参照してください。 |
モデルプロバイダー
これらのキーは、どれも /setup で貼り付けることもできます。環境変数で設定したキーが優先されます。プロバイダーキーを参照してください。
| 変数 | デフォルト | .env | 用途 |
|---|---|---|---|
NODARO_API_KEY | 空 | はい | 個人用 API トークンを使った、プロバイダーとしての Nodaro Cloud です。 |
KIE_API_KEY | 空 | はい | メディアとテキストのモデルを、最も幅広くカバーします。 |
KIE_API_BASE_URL | プロバイダー自身の API ホスト | はい | そのプロバイダーへの通信を、自分のプロキシ経由にします。KIE_API_KEY で動く Claude と Gemini のテキストの通信も、プロキシ経由になります。 |
REPLICATE_API_TOKEN | 空 | はい | 別のカタログです。Flux 2 のモデルも含まれます。 |
ANTHROPIC_API_KEY | 空 | はい | テキストノード用に、Claude を直接使います。 |
GEMINI_API_KEY | 空 | はい | Gemini を直接使います。Gemini のモデルを参照してください。 |
ELEVENLABS_API_KEY | 空 | はい | 音声、ボイス、吹き替えです。 |
ELEVENLABS_BASE_URL | https://api.elevenlabs.io | はい | ElevenLabs への通信を、自分のプロキシ経由にします。 |
FAL_KEY | 空 | はい | Sync Lipsync v3 などのモデルです。 |
HEYGEN_API_KEY | 空 | はい | AI アバター(AI Avatar)とシネマティックアバター(Cinematic Avatar)です。 |
BEEBLE_API_KEY | 空 | はい | リライティングと差し替え(Relight & Switch)です。 |
APIFY_API_TOKEN | 空 | はい | Web スクレイピング(Web Scrape)です。 |
HEYGEN_CATALOG_REFRESH_HOURS | 24 | いいえ | HeyGen のアバターとボイスの共有リストを更新する間隔です。 |
Nodaro Cloud への接続
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
NODARO_CLOUD_URL | https://app.nodaro.ai | はい | nodaro.ai を接続で登録する先の Nodaro Cloud のホストで、NODARO_API_KEY を使った呼び出しの送信先でもあります。変更するのは、環境が Nodaro の専用デプロイメントに属している場合だけです。起動時に読み込まれます。 |
NODARO_API_KEY と R2_SHARED_WITH_RELAY_TARGET も、接続に関わる変数です。Nodaro Cloud に接続するを参照してください。
ワーカーとパフォーマンス
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
MAX_CONCURRENT_NODES_PER_EXECUTION | 6(最大 20) | いいえ | 1 回のワークフローの実行で、同時に実行できるノードの数です。 |
VIDEO_WORKER_CONCURRENCY | 50 | いいえ | メディアワーカーの並列ジョブ数です。メディアワーカーは、主にプロバイダーの応答を待っています。 |
ORCHESTRATOR_CONCURRENCY | 20 | いいえ | オーケストレーターの並列ジョブ数です。 |
RENDER_WORKER_CONCURRENCY | 2(最大 10) | いいえ | 並列のレンダリング数です。各レンダリングは、ヘッドレス Chrome を 1 つ動かします。 |
REMOTION_CONCURRENCY | 3D シーンでは 2、それ以外のレンダリングでは CPU コア数の半分 | いいえ | 1 回のレンダリングで使うブラウザーのタブ数です。値を設定すると、両方に適用されます。複数の 3D ジョブを実行するときは、低い値にしてください。WebGL のタブはそれぞれスレッドを増やし、コンテナのプロセス数の上限に数えられます。 |
FFMPEG_CONCURRENCY | 4(最大 32) | いいえ | すべての動画とオーディオの編集ノードを通じて、同時に動かす ffmpeg のプロセス数です。 |
RAILWAY_DEPLOYMENT_DRAINING_SECONDS | 未設定 | いいえ | Railway でのみ使います。置き換えるコンテナに停止シグナルを送ってから、強制停止するまでの時間です。メディアワーカーは、この時間から 5 秒を引いた時間だけドレインします。未設定の場合は、25 秒ドレインします。 |
これらの値を上げる前に、スケーリングを読んでください。
エディター
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
FREECUT_URL | 空(ホスティング版のエディター) | はい | Edit video で開く動画エディターです。off にすると、この操作がなくなります。 |
AUDIOMASS_URL | 空(オーディオエディターなし) | はい | Edit audio で開くオーディオエディターです。off は空と同じ動作です。 |
動画とオーディオのエディターを参照してください。
アップデート
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
NODARO_IMAGE | ghcr.io/nodaroai/nodaro-community:latest | はい | Compose ファイルが実行するアプリのイメージです。リリースのタグは、ここで固定します。 |
NODARO_UPDATE_CHECK | オン | いいえ | off にすると、毎日のアップデートの確認が止まり、環境から外部へのリクエストがなくなります。エアギャップ環境向けです。 |
NODARO_UPDATE_CHECK_TOKEN | 空(匿名) | いいえ | アップデートの確認に使う GitHub トークンです。スコープは不要です。 |
アップデートを参照してください。
MCP
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
MCP_ENABLED | オフ | いいえ | true または 1 にすると、MCP エンドポイントを提供します。 |
MCP_PUBLIC_URL | 空(Nodaro Cloud の MCP ホスト) | いいえ | 自分の MCP ホストの公開アドレスです。 |
MCP_DYNAMIC_REGISTRATION | allowlist | いいえ | MCP クライアントの動的クライアント登録です。allowlist、open、off のいずれかです。 |
MCP_DCR_ALLOWLIST | 既知のクライアント 14 個 | いいえ | allowlist モードで登録を許可するクライアント名です。 |
MCP を参照してください。
ログインとロール
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
EXTERNAL_SSO_PROVIDERS | 空(SSO はオフ) | いいえ | 信頼する ID プロバイダーです。インラインの JSON か、@/path/to/file.json で指定します。形式が正しくない値の場合、起動が止まります。 |
EXTERNAL_SSO_LINK_EXISTING | false | いいえ | シングルサインオンを、既存のローカルアカウントにリンクできるかどうかです。 |
PLATFORM_OWNER_EMAIL | 空 | いいえ | Business エディション:オーナーのアカウントです。このアカウントのロールは、ほかの管理者には変更できません。 |
シングルサインオンと最初のユーザーと管理者を参照してください。
連携
| 変数 | デフォルト | .env | 内容 |
|---|---|---|---|
FIGMA_PLUGIN_OAUTH_CLIENT_ID | 空(プラグインの接続はオフ) | いいえ | Figma プラグインが接続に使う開発者アプリのクライアント ID です。 |
| SNS の変数 | 空 | いいえ | SNS のアプリを参照してください。 |
Figma プラグインを使うには、環境に開発者アプリを登録します。リダイレクト URI には <PUBLIC_URL>/v1/oauth/plugin/callback を、スコープには jobs:read、assets:read、assets:write、credits:read を指定します。そのあと、アプリのクライアント ID をこの変数に設定します。この変数が空の場合、プラグインの接続用ルートは 503 を返し、それ以外に変わることはありません。OAuth アプリを参照してください。
ビルド時の設定
これらの設定は、イメージのビルド時に決まります。Compose ファイルの build: args: で変更し、ビルドし直してください。
| ビルド引数 | デフォルト | 内容 |
|---|---|---|
VITE_EDITION | Compose ファイルでは community | エディターが表示するエディションです。空の値や不明な値では、ビルドが失敗します。 |
VITE_STUDIO_URL | https://studio.nodaro.ai | Studio で開くリンクのアドレスです。 |
VITE_PERSON_URL | https://person.nodaro.ai | ホーム画面の Person を開くカードのアドレスです。 |
動画とオーディオのエディター
動画の結果で Edit video を使うと NodarCut 動画エディターが、オーディオの結果で Edit audio を使うと AudioMass エディターが開きます。メディアがエディターのサーバーに送られることはありません。アプリが自分のストレージからファイルを読み込み、ブラウザーの中でエディターに渡します。編集と書き出しも、ブラウザーの中で行われます。
- 動画:
FREECUT_URLが空の場合、エディターはfreecut.nodaro.aiから読み込まれます。freecut.nodaro.aiは、http://localhost:3000からの埋め込みしか許可していません。LAN のアドレスやドメインなど、ほかのオリジンではブラウザーが埋め込みを拒否し、パネルにその理由が表示されます。許可してもらうには、配信している URL を添えて GitHub で issue を作成してください。または、自分で FreeCut を運用します。FreeCut は MIT ライセンスで公開されており、Dockerfile も含まれています。そのあと、FREECUT_URL=https://freecut.example.internalを設定します。 - オーディオ:公開されているホスティング版の AudioMass はないため、設定するまで、Edit audio には設定内容を説明するパネルだけが表示されます。Nodaro のフォーク版 AudioMass を運用してください。フォーク版は、オリジナルの AudioMass にはない、ブラウザー内での受け渡しに対応しています。そのあと、
AUDIOMASS_URL=https://audiomass.example.internalを設定します。
変更したら、スタックを再起動します。ビルドし直す必要はありません。
デフォルトの言語
DEFAULT_LOCALE は、新しい訪問者が最初に使う言語を設定します。値は he、ar、de、fr、es、hi、ja、ko、pt-BR、ru、zh-CN、en のいずれかです。ユーザー自身が保存した選択が、常に優先されます。値が空、空白のみ、または不明な場合は、訪問者のブラウザーの言語にフォールバックします。適用するには再起動します。言語を参照してください。
チュートリアルパック
セルフホスティング環境では、ビルドし直さずに、組み込みのチュートリアルに独自のチュートリアルを追加できます。各パックは 1 つのディレクトリで、次のものを含みます。
manifest.json:パックのnameと、そのチュートリアルが使うcategoriesです。各カテゴリーにはslugとnameがあり、任意でsortOrderとdescriptionも指定できます。任意のキーはlocale、version、forbiddenPromptTerms、creatorDisplayNameです。creatorDisplayNameは、パックのすべてのカードに表示される作成者名です。- チュートリアルごとに 1 つの
*.jsonファイル:ノード、接続、作成済みの結果を含むワークフローのスナップショットです。そのため、複製すると、実行が完了した状態で開きます。カードの任意のデータとして、カードのチップに表示するestimatedCredits、nodeTypesUsed、providersUsed、チュートリアルごとのcreatorDisplayName、listedInを指定できます。listedInは、チュートリアルタブ用の["tutorial"](デフォルト)か、テンプレートのマーケットプレイス用の["marketplace"]です。この値が反映されるのは、最初のシード時だけです。
チュートリアルで使うメディアファイルは、すべて公開された https:// の URL にする必要があります。各チュートリアルのカテゴリーはマニフェストで宣言する必要があり、カテゴリーは初回起動時に作成されます。
パックのディレクトリを読み取り専用でコンテナにマウントし、コンテナ内でのパスを列挙します。
nodaro:
volumes:
- ./tutorials/acme:/data/tutorials/acme:roNODARO_TUTORIAL_PACKS=/data/tutorials/acmeパックはチュートリアルを追加するだけで、組み込みのチュートリアルを変更することはありません。検証に失敗したパックは丸ごとスキップされ、ログに記録されます。検証が失敗するのは、JSON が無効な場合、宣言されていないカテゴリーがある場合、メディアの URL が公開されていない場合、スラッグが既存のチュートリアルと重複する場合です。変更したパックを読み込むには、コンテナを再起動します。
SNS のアプリ
SNS への公開は、ネットワークごとに動作します。各ネットワークは、その OAuth アプリの認証情報を設定すると使えるようになります。認証情報がない場合も、ネットワークは設定 › 連携に利用不可として表示され、不足している変数の名前も表示されます。
| ネットワーク | 変数 |
|---|---|
META_APP_ID、META_APP_SECRET。任意:Facebook Login for Business 用の META_INSTAGRAM_CONFIG_ID。 | |
| Instagram(Facebook ページなし) | INSTAGRAM_APP_ID、INSTAGRAM_APP_SECRET。Meta は、これらを Facebook アプリとは別に発行します。トークンは約 60 日ごとに自動で更新されます。 |
META_APP_ID、META_APP_SECRET。任意:META_FACEBOOK_CONFIG_ID。 | |
| TikTok | TIKTOK_CLIENT_KEY、TIKTOK_CLIENT_SECRET |
| YouTube | GOOGLE_CLIENT_ID、GOOGLE_CLIENT_SECRET |
LINKEDIN_CLIENT_ID、LINKEDIN_CLIENT_SECRET | |
| X | X_CLIENT_ID、X_CLIENT_SECRET |
REDDIT_CLIENT_ID、REDDIT_CLIENT_SECRET | |
PINTEREST_CLIENT_ID、PINTEREST_CLIENT_SECRET | |
| Discord | DISCORD_CLIENT_ID、DISCORD_CLIENT_SECRET、DISCORD_BOT_TOKEN |
| Twitch | TWITCH_CLIENT_ID、TWITCH_CLIENT_SECRET |
| Threads | THREADS_APP_ID、THREADS_APP_SECRET |
| Mastodon | MASTODON_CLIENT_ID、MASTODON_CLIENT_SECRET。任意:MASTODON_URL(デフォルトは mastodon.social)。 |
| Telegram | 不要です。ユーザーが自分のボットトークンを貼り付けます。 |
| Bluesky | 不要です。ユーザーがハンドルとアプリパスワードで接続します。 |
| Dev.to、Hashnode、Medium | 不要です。ユーザーが自分の API キーまたはトークンで接続します。 |
| WordPress | 不要です。ユーザーがサイトの URL とアプリケーションパスワードで接続します。 |
| Lemmy | 不要です。ユーザーがインスタンス、ログイン情報、コミュニティを指定して接続します。 |
どの OAuth アプリでも、リダイレクト URI https://<your-domain>/v1/social/callback/<network> を許可する必要があります。Facebook や Instagram のログインで複数のページやアカウントを管理している場合は、接続ウィンドウで、どれを接続するかをユーザーに確認します。SNS への公開を参照してください。
よくある質問
関連ページ
インストール
プロバイダーキー
エディションとサーフェスプロファイル
データベース
トラブルシューティング
最終更新