# 設定

> セルフホスティングの Nodaro のすべての環境変数を、目的別に説明します。デフォルト値、Compose スタックで .env から設定できるかどうか、変数で変わる内容をまとめています。

Source: https://nodaro.ai/ja/docs/self-hosting/configuration

このページは、セルフホスティングの Nodaro の**設定リファレンス**です。運用者が設定するすべての環境変数を、目的別に、デフォルト値とあわせて説明します。同梱の Compose スタックでは、どの変数にもそのまま動くデフォルト値があるので、変えたいものだけを設定します。Nodaro Cloud にだけ関係する変数は載せていません。

## 変数の設定方法
Compose スタックでは、変数を次の 2 か所のどちらかで設定します。

- **`.env` で設定する**：`docker-compose.community.yml` と同じ場所にある `.env` です。Compose ファイルがアプリに渡す変数には、この方法が使えます。以下の表では、そうした変数の **.env** 列が**はい**になっています。
- **Compose ファイルで設定する**：それ以外のすべての変数に使います。`nodaro` サービスの `environment:` に追加します。

```yaml
nodaro:
environment:
# ...the variables already listed...
MCP_ENABLED: "true"
MCP_PUBLIC_URL: https://mcp.nodaro.example.com
```

そのあと、変更を適用します。

```bash
docker compose -f docker-compose.community.yml up -d
```

Nodaro は、起動時に環境変数を読み込みます。唯一の例外は `/setup` で貼り付けたプロバイダーキーで、これはすぐに適用されます。Compose スタックを使わない場合は、利用しているプラットフォームの環境変数の設定で変数を設定します。

**Compose スタックを使わない場合に必須の変数**：`SUPABASE_URL`、`SUPABASE_SERVICE_ROLE_KEY`、`INTERNAL_ORCHESTRATOR_SECRET` です。これらがないと、API は起動せず、不足している変数や無効な変数を一覧表示します。

## インスタンス
| 変数 | デフォルト | .env | 内容 |
| --- | --- | --- | --- |
| `EDITION` | `community` | いいえ | `community`、`business`、`cloud` のいずれかです。Compose ファイルでは `community` に固定されています。[エディションとサーフェスプロファイル](https://nodaro.ai/docs/self-hosting/editions-and-profiles)を参照してください。 |
| `PUBLIC_URL` | `http://localhost:3000` | はい | 環境の公開オリジンです。ログインと OAuth のコールバック、メディアの URL、CORS のチェックに使われます。 |
| `PUBLIC_URL_SAME_ORIGIN` | 未設定 | いいえ | `true` にすると、ブラウザーに渡す API のアドレスが `PUBLIC_URL` ではなく `/` になり、ストリームが、訪問者が開いたホスト名のまま維持されます。複数のホスト名で応答する環境向けです。有効になるのは、厳密に `true` という値だけです。 |
| `CORS_ORIGIN` | 空 | はい | 追加で許可するブラウザーのオリジンを、カンマ区切りで指定します。`PUBLIC_URL` は常に許可されます。これらのホストでは、SSO のランディングのリダイレクトが相対パスになります。 |
| `DEFAULT_LOCALE` | 空（ブラウザーの言語） | はい | 新しい訪問者が最初に使う言語です。[デフォルトの言語](#default-language)を参照してください。 |
| `NODARO_SURFACE_PROFILE` | 空（すべてのインターフェース） | はい | Business エディションの環境で、インターフェースを絞り込みます。[サーフェスプロファイル](https://nodaro.ai/docs/self-hosting/editions-and-profiles#surface-profiles)を参照してください。 |
| `NODARO_TUTORIAL_PACKS` | 空（組み込みのチュートリアルのみ） | はい | 追加のチュートリアルパックのディレクトリを、カンマ区切りで指定します。[チュートリアルパック](#tutorial-packs)を参照してください。 |
| `RUNTIME_ENV` | `local` | いいえ | 2 つの環境が 1 つのデータベースを共有し、Redis は共有しない場合に、環境を区別する名前です。[スケーリング](https://nodaro.ai/docs/self-hosting/scaling#two-installs-one-database)を参照してください。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` で生成します。暗号化キーは、データベースと一緒にバックアップしてください。[バックアップとリストア](https://nodaro.ai/docs/self-hosting/backups)を参照してください。

## データベースとログイン
| 変数 | デフォルト | .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 プロジェクトを、アプリ自身のオリジン経由で提供します。[データベース](https://nodaro.ai/docs/self-hosting/database#serve-a-managed-project-through-your-own-origin)を参照してください。 |
| `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）です。バケットポリシーを受け付けないストレージ向けです。[インストール](https://nodaro.ai/docs/self-hosting/install#make-the-media-publicly-readable)を参照してください。 |
| `R2_PUBLIC_FALLBACK_DOMAIN` | 空 | いいえ | メディア用の 2 つ目の公開ホストです。たとえば、CDN のドメインと並べて使う、`r2.dev` の生のアドレスです。 |
| `R2_SHARED_WITH_RELAY_TARGET` | `false` | いいえ | `R2_PUBLIC_URL` が、Nodaro Cloud のホストが書き込むのと同じバケットを指している場合にだけ `true` にします。[Nodaro Cloud に接続する](https://nodaro.ai/docs/self-hosting/cloud-connect#configuration-reference)を参照してください。 |

## モデルプロバイダー
これらのキーは、どれも `/setup` で貼り付けることもできます。環境変数で設定したキーが優先されます。[プロバイダーキー](https://nodaro.ai/docs/self-hosting/provider-keys)を参照してください。

| 変数 | デフォルト | .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 のモデル](https://nodaro.ai/docs/self-hosting/provider-keys#gemini-models)を参照してください。 |
| `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 に接続する](https://nodaro.ai/docs/self-hosting/cloud-connect)を参照してください。

## ワーカーとパフォーマンス
| 変数 | デフォルト | .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 秒ドレインします。 |

これらの値を上げる前に、[スケーリング](https://nodaro.ai/docs/self-hosting/scaling)を読んでください。

## エディター
| 変数 | デフォルト | .env | 内容 |
| --- | --- | --- | --- |
| `FREECUT_URL` | 空（ホスティング版のエディター） | はい | **Edit video** で開く動画エディターです。`off` にすると、この操作がなくなります。 |
| `AUDIOMASS_URL` | 空（オーディオエディターなし） | はい | **Edit audio** で開くオーディオエディターです。`off` は空と同じ動作です。 |

[動画とオーディオのエディター](#video-and-audio-editors)を参照してください。

## アップデート
| 変数 | デフォルト | .env | 内容 |
| --- | --- | --- | --- |
| `NODARO_IMAGE` | `ghcr.io/nodaroai/nodaro-community:latest` | はい | Compose ファイルが実行するアプリのイメージです。リリースのタグは、ここで固定します。 |
| `NODARO_UPDATE_CHECK` | オン | いいえ | `off` にすると、毎日のアップデートの確認が止まり、環境から外部へのリクエストがなくなります。エアギャップ環境向けです。 |
| `NODARO_UPDATE_CHECK_TOKEN` | 空（匿名） | いいえ | アップデートの確認に使う GitHub トークンです。スコープは不要です。 |

[アップデート](https://nodaro.ai/docs/self-hosting/updating#which-version-you-run)を参照してください。

## 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](https://nodaro.ai/docs/self-hosting/mcp) を参照してください。

## ログインとロール
| 変数 | デフォルト | .env | 内容 |
| --- | --- | --- | --- |
| `EXTERNAL_SSO_PROVIDERS` | 空（SSO はオフ） | いいえ | 信頼する ID プロバイダーです。インラインの JSON か、`@/path/to/file.json` で指定します。形式が正しくない値の場合、起動が止まります。 |
| `EXTERNAL_SSO_LINK_EXISTING` | `false` | いいえ | シングルサインオンを、既存のローカルアカウントにリンクできるかどうかです。 |
| `PLATFORM_OWNER_EMAIL` | 空 | いいえ | Business エディション：オーナーのアカウントです。このアカウントのロールは、ほかの管理者には変更できません。 |

[シングルサインオン](https://nodaro.ai/docs/self-hosting/sso)と[最初のユーザーと管理者](https://nodaro.ai/docs/self-hosting/first-admin)を参照してください。

## 連携
| 変数 | デフォルト | .env | 内容 |
| --- | --- | --- | --- |
| `FIGMA_PLUGIN_OAUTH_CLIENT_ID` | 空（プラグインの接続はオフ） | いいえ | Figma プラグインが接続に使う開発者アプリのクライアント ID です。 |
| SNS の変数 | 空 | いいえ | [SNS のアプリ](#social-network-apps)を参照してください。 |

Figma プラグインを使うには、環境に開発者アプリを登録します。リダイレクト URI には `<PUBLIC_URL>/v1/oauth/plugin/callback` を、スコープには `jobs:read`、`assets:read`、`assets:write`、`credits:read` を指定します。そのあと、アプリのクライアント ID をこの変数に設定します。この変数が空の場合、プラグインの接続用ルートは `503` を返し、それ以外に変わることはありません。[OAuth アプリ](https://nodaro.ai/docs/developers/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](https://github.com/nodaroai/freecut) を運用します。FreeCut は MIT ライセンスで公開されており、Dockerfile も含まれています。そのあと、`FREECUT_URL=https://freecut.example.internal` を設定します。
- **オーディオ**：公開されているホスティング版の AudioMass はないため、設定するまで、**Edit audio** には設定内容を説明するパネルだけが表示されます。Nodaro のフォーク版 [AudioMass](https://github.com/nodaroai/audiomass) を運用してください。フォーク版は、オリジナルの AudioMass にはない、ブラウザー内での受け渡しに対応しています。そのあと、`AUDIOMASS_URL=https://audiomass.example.internal` を設定します。

変更したら、スタックを再起動します。ビルドし直す必要はありません。

## デフォルトの言語
`DEFAULT_LOCALE` は、新しい訪問者が最初に使う言語を設定します。値は `he`、`ar`、`de`、`fr`、`es`、`hi`、`ja`、`ko`、`pt-BR`、`ru`、`zh-CN`、`en` のいずれかです。ユーザー自身が保存した選択が、常に優先されます。値が空、空白のみ、または不明な場合は、訪問者のブラウザーの言語にフォールバックします。適用するには再起動します。[言語](https://nodaro.ai/docs/concepts/languages)を参照してください。

## チュートリアルパック
セルフホスティング環境では、ビルドし直さずに、組み込みのチュートリアルに独自のチュートリアルを追加できます。各パックは 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 にする必要があります。各チュートリアルのカテゴリーはマニフェストで宣言する必要があり、カテゴリーは初回起動時に作成されます。

パックのディレクトリを読み取り専用でコンテナにマウントし、コンテナ内でのパスを列挙します。

```yaml
nodaro:
volumes:
      - ./tutorials/acme:/data/tutorials/acme:ro
```

```bash
NODARO_TUTORIAL_PACKS=/data/tutorials/acme
```

パックはチュートリアルを追加するだけで、組み込みのチュートリアルを変更することはありません。検証に失敗したパックは丸ごとスキップされ、ログに記録されます。検証が失敗するのは、JSON が無効な場合、宣言されていないカテゴリーがある場合、メディアの URL が公開されていない場合、スラッグが既存のチュートリアルと重複する場合です。変更したパックを読み込むには、コンテナを再起動します。

## SNS のアプリ
SNS への公開は、ネットワークごとに動作します。各ネットワークは、その OAuth アプリの認証情報を設定すると使えるようになります。認証情報がない場合も、ネットワークは**設定 › 連携**に利用不可として表示され、不足している変数の名前も表示されます。

| ネットワーク | 変数 |
| --- | --- |
| Instagram | `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 日ごとに自動で更新されます。 |
| Facebook | `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 | `LINKEDIN_CLIENT_ID`、`LINKEDIN_CLIENT_SECRET` |
| X | `X_CLIENT_ID`、`X_CLIENT_SECRET` |
| Reddit | `REDDIT_CLIENT_ID`、`REDDIT_CLIENT_SECRET` |
| Pinterest | `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 への公開](https://nodaro.ai/docs/guides/publishing-to-social)を参照してください。

## Frequently asked questions

### .env ファイルに書いた変数が反映されないのはなぜですか？

Compose ファイルは、nodaro サービスの environment ブロックに列挙された変数だけをアプリに渡します。それ以外の変数は、docker-compose.community.yml のそのブロックに追加してから、docker compose up -d を実行してください。

### 必須の環境変数はどれですか？

同梱の Compose スタックでは、必須の変数はありません。スタックが設定または生成するためです。それ以外の構成では、SUPABASE_URL、SUPABASE_SERVICE_ROLE_KEY、32 文字以上の INTERNAL_ORCHESTRATOR_SECRET がないと、API は起動しません。

### 変数を変更したら、再起動が必要ですか？

はい。Nodaro は起動時に環境変数を読み込むので、docker compose up -d を実行して、新しい値でコンテナを作り直してください。例外は /setup で貼り付けたプロバイダーキーで、再起動しなくても適用されます。

### 環境のデフォルトの言語を変えるには、どうすればよいですか？

DEFAULT_LOCALE を設定して（たとえば DEFAULT_LOCALE=de）、再起動します。新しい訪問者は、その言語で使い始めます。ユーザー自身が保存した選択が常に優先され、不明な値の場合はブラウザーの言語にフォールバックします。

### セルフホスティング環境に独自のチュートリアルを追加するには、どうすればよいですか？

チュートリアルパックごとに、manifest.json と、チュートリアルごとに 1 つの JSON ファイルを入れたディレクトリを用意します。そのディレクトリをコンテナにマウントし、NODARO_TUTORIAL_PACKS に列挙します。読み込むには再起動します。
