# トラブルシューティング

> セルフホスティングの Nodaro でよくある問題を、/setup から順に解決します。起動エラー、ポート、CORS、マイグレーション、ストレージ、キュー、キーについて、症状と対処法をまとめています。

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

このページでは、セルフホスティングの Nodaro でよくある問題を、**症状**と**対処法**の組み合わせで紹介します。まずは `/setup` ページを確認してください。ほとんどの問題は、このページでひと目でわかります。

## まず /setup を確認する
セルフホスティング環境では、`http://<your-host>/setup` にリアルタイムの状態画面があります。ログインは不要で、各部分が存在し、動作しているかどうかだけを表示します。シークレットが表示されることはありません。

- **カード**：データベース、Redis、ストレージ、暗号化キー、プロバイダーキーのカードが、緑か赤で表示されます。データベースのカードには、独自の**マイグレーション未適用**の状態があります。
- **ヒント**：問題のあるカードにはそれぞれヒントが表示され、確認すべき変数を示します。
- **リアルタイムの更新**：このページは 5 秒ごとに再確認します。

ページに「**API に接続できません**」と表示される場合、Web サーバーは動いていますが、API が応答していません。`docker compose -f docker-compose.community.yml logs -f` でコンテナのログを確認し、ポート `3000` を妨げているものがないか確認してください。

## 環境が起動しない
**起動時に `Missing or invalid env vars` と表示される。**メッセージには、検証に失敗した変数が一覧表示されます。よくある原因は、`SUPABASE_SERVICE_ROLE_KEY` が空であることと、`INTERNAL_ORCHESTRATOR_SECRET` が 32 文字より短いことです。

**`docker compose up` で `port is already allocated` と表示される。**スタックが公開するホストポートは、アプリ用の `3000` と、MinIO コンソール用の `9001`（ループバックのみ）の 2 つだけです。Redis とデータベースは、ホストのポートを使いません。`docker-compose.community.yml` で、競合しているポートマッピングのホスト側を変更してください（たとえば `"3001:3000"`）。アプリのポートを変更した場合は、`PUBLIC_URL` もそれに合わせて設定します。

**起動時にマイグレーションが失敗した。**アプリのログに、失敗したファイルの名前が表示されます。API は、マイグレーションが途中までしか適用されていないデータベースでは起動しません。原因を修正して、`docker compose -f docker-compose.community.yml up` をもう一度実行してください。適用済みのファイルはスキップされます。

**ログインサービスのログに `password authentication failed for user "supabase_auth_admin"` と表示される。**`db-data` ボリュームがデータベースのロール設定より古いか、初回起動後に `POSTGRES_PASSWORD` を変更しています。ロールのパスワードが `POSTGRES_PASSWORD` に合わせて設定されるのは、初回起動時だけです。`docker compose -f docker-compose.community.yml down -v` でボリュームを削除するか（**データが削除されます**）、`supabase_admin` としてロールのパスワードを手動で変更してください。

**Docker のビルドで、ffmpeg のアーカイブのダウンロードか検証に失敗する。**これは、イメージを自分でビルドする場合にだけ起こります。レンダリングされるオーディオや動画は ffmpeg のバージョンによって変わるため、Dockerfile では `ARG FFMPEG_TARBALL_URL_*` と `ARG FFMPEG_TARBALL_SHA256_*` を使って、アーキテクチャごとに特定の静的 ffmpeg ビルドを固定しています。ダウンロードの失敗やチェックサムの不一致があると、出力が知らないうちに変わるのを防ぐため、ビルドが停止します。同じビルドの、より新しい日付のリリース（GitHub の `BtbN/FFmpeg-Builds`）を選び、**両方**のアーキテクチャについて、URL と SHA-256 の**両方**を更新してください。これは実際の ffmpeg のアップグレードとして扱い、そのあとでレンダリング結果を確認してください。

## ブラウザーにエラーが表示される
**エディターは表示されるが、空白のまま、または「読み込み中…」のまま進まない。**ブラウザーのコンソールを開いてください。

- **CORS エラーの場合**：次の項目を参照してください。
- **ログインのエラーの場合**：環境の `/config.js` を開きます。このファイルには、ブラウザーからアクセスできる Supabase の URL（同梱のスタックでは `PUBLIC_URL/supabase`）と、anon キーが記載されている必要があります。コンテナは起動時に、`PUBLIC_URL`、`FRONTEND_SUPABASE_URL`、`SUPABASE_ANON_KEY` からこのファイルを書き込みます。これらを修正して、再起動してください。

**ブラウザーに CORS エラーが表示される。**`http://localhost:3000` と `PUBLIC_URL` は常に許可されているため、LAN のアドレスや別のポートなど、ほかのオリジンでアプリを開いています。`PUBLIC_URL` をそのオリジンに設定するか、追加のオリジンをカンマ区切りで `CORS_ORIGIN` に列挙してください（たとえば `CORS_ORIGIN=http://192.168.1.20:3000`）。そのあと、`docker compose -f docker-compose.community.yml up -d` を実行します。

**動画編集（Edit video）で、エディターの代わりにパネルが表示される。**ホスティング版の動画エディターは、`http://localhost:3000` からの埋め込みしか受け付けません。ほかのオリジンでは、自分でエディターを運用して `FREECUT_URL` を設定してください。[動画とオーディオのエディター](https://nodaro.ai/docs/self-hosting/configuration#video-and-audio-editors)を参照してください。

**オーディオ編集（Edit audio）で、エディターの代わりにパネルが表示される。**ホスティング版のオーディオエディターはありません。自分で AudioMass を運用して、`AUDIOMASS_URL` を設定してください。

## データベース
**マイグレーションが「relation … does not exist」で失敗する。**マイグレーションが順番どおりに実行されませんでした。Supabase の SQL エディターなどで、`supabase/migrations/` のファイルをファイル名の順に適用してください。各ファイルは、すでに適用済みのデータベースで再実行しても問題ありません。

**OAuth のコールバックが `500` を返す。**マイグレーションが適用されていないため、OAuth アプリ用のテーブルがありません。すべてのマイグレーションを、ファイル名の順に適用してください。[データベース](https://nodaro.ai/docs/self-hosting/database#apply-the-migrations-to-a-managed-project)を参照してください。

**API が再起動を繰り返す。**API が Postgres に接続できていません。データベースが停止している間は、この動作は想定どおりです。Postgres が復旧したら、`docker compose -f docker-compose.community.yml restart nodaro` を実行してください。

## ストレージ
**同梱のスタックで、アップロードが失敗する。**`http://localhost:9001` で MinIO コンソールを開きます。デフォルトの認証情報は、Compose ファイルに記載されています。

**Cloudflare R2 へのアップロードが `401` か `403` を返す。**API トークンに、そのバケットに対する **Object Read & Write** の権限があることを確認してください。R2 の前段にカスタムドメインを置いている場合は、バケットの公開アクセスの設定も確認します。Nodaro はブラウザーに公開のメディア URL を渡すため、認証なしで読み取れる必要があります。

**ストレージへのリクエストが、すべて認可のエラーかエンドポイントのエラーで失敗する。**`R2_REGION` に、ストレージのリージョンを設定してください。AWS、DigitalOcean Spaces、ローカルの Supabase はデフォルトの `auto` を受け付けず、そのエラーメッセージにはリージョンのことが書かれていません。

**`STORAGE_OBJECT_ACL` を設定したあと、すべてのアップロードが失敗する。**ストレージのキーに、オブジェクトの ACL を設定する権限がありません。ストレージがバケットポリシーを受け付けない場合を除き、この変数は空のままにしてください。

**R2 を使っていて、起動ログに `[storage] failed to create bucket` と表示される。**問題はありません。R2 のトークンはバケットを作成できませんが、バケットはすでに存在しています。

## 実行とノード
**ワークフローがキューに入ったまま、実行が始まらない。**`docker compose -f docker-compose.community.yml logs nodaro` でログを確認します。オーケストレーターは Redis から処理を受け取るため、Redis に接続できないと何も実行されません。`REDIS_URL` を確認し、`docker compose -f docker-compose.community.yml exec redis redis-cli ping` を実行してください。`PONG` と返れば正常です。

**ノードが `Missing API key` で失敗する。**ノードが、キーのないプロバイダーを呼び出しています。`/setup` か `.env` でキーを追加してください。[プロバイダーキー](https://nodaro.ai/docs/self-hosting/provider-keys)を参照してください。

**画像と動画は動くが、テキストの機能がすべて失敗する。**`KIE_API_BASE_URL` に、メディアのパスだけを転送するプロキシが指定されています。[プロバイダーへの通信を自前のプロキシ経由にする](https://nodaro.ai/docs/self-hosting/provider-keys#send-provider-traffic-through-your-own-proxy)を参照してください。

**キーの貼り付けや Nodaro Cloud への接続が `EncryptionKeyMissingError` で失敗する。**環境に暗号化キーがありません。マネージドの Supabase プロジェクトを使う場合は、`NODARO_ENCRYPTION_KEY` に、`openssl rand -hex 32` で生成した 64 文字の 16 進数を設定してください。

**復元後に、プロバイダーキーが `missing` と表示される。**対応する暗号化キーなしで、データベースが復元されています。[バックアップと復元](https://nodaro.ai/docs/self-hosting/backups#troubleshooting)を参照してください。

**ノードが `503 nodaro_connection_required` で失敗する。**このノードは Nodaro 専用ノードで、Nodaro Cloud への接続が必要です。[Nodaro Cloud への接続](https://nodaro.ai/docs/self-hosting/cloud-connect)を参照してください。

**Cloud 経由の実行が `Token expired` で失敗する。**接続の 90 日間有効なトークンが期限切れになりました。**接続を解除**をクリックしてから、**接続**をクリックします。

**Cloud 経由の実行が `402 instance_cap_reached` で失敗する。**環境が月間の使用上限に達しました。app.nodaro.ai の**請求 › 接続済みのインスタンス**で、上限を引き上げてください。

**正常な実行が `Execution orphaned` として扱われる。**2 つの環境が、別々の Redis を使いながら 1 つのデータベースを共有しています。環境ごとに固有の `RUNTIME_ENV` を設定してください。[スケーリング](https://nodaro.ai/docs/self-hosting/scaling#two-installs-one-database)を参照してください。

**3D レンダリング Pro（3D Render Pro）が `503 SCENE_CAPABILITY_UNAVAILABLE` を返す。**[3D レンダリング Pro](https://nodaro.ai/docs/nodes/video/pro-3d-render) はホスティングされたビルドサービス上で動作し、セルフホスティング型のエディションには含まれません。ほかのレンダラーに黙って切り替わることはありません。自分のサーバーで動作する [**3D シーン生成**（Generate 3D Scene）](https://nodaro.ai/docs/nodes/video/generate-3d-scene)と[**動画レンダリング**（Render Video）](https://nodaro.ai/docs/nodes/video/render-video)を使ってください。

## ログインと MCP
**SSO のルートが `404 unknown_provider` を返す。**プロバイダーが設定されていません。`EXTERNAL_SSO_PROVIDERS` を確認してください。Compose スタックでは、この変数を `nodaro` サービスの `environment:` に追加します。[シングルサインオン](https://nodaro.ai/docs/self-hosting/sso)を参照してください。

**すべての API 呼び出しが `403 sso_required` を返す。**サーフェスプロファイルで SSO だけが許可されていて、アカウントが SSO を通じて作成またはリンクされていません。[ログイン方法](https://nodaro.ai/docs/self-hosting/editions-and-profiles#sign-in-methods)を参照してください。

**MCP クライアントが `405 wrong_mcp_host` を受け取る。**クライアントが、アプリのメインのアドレスを使っています。代わりに、MCP ホストのアドレスを指定してください。[MCP](https://nodaro.ai/docs/self-hosting/mcp) を参照してください。

## アップデート
**バージョン表示に組み込みのバージョンしか表示されず、リリースノートが空になっている。**更新チェックが GitHub を読み取れていません。ログに `[update-check] … read failed: HTTP 403 (rate limit: 0 of 60 left…)` という行がある場合は、送信元アドレスが GitHub の匿名リクエストの上限を使い切っています。`NODARO_UPDATE_CHECK_TOKEN` を設定してください。[アップデート](https://nodaro.ai/docs/self-hosting/updating#which-version-you-run)を参照してください。

## サポートを受ける
それでも解決しない場合は、アプリのコンテナの Docker ログを添えて、[GitHub](https://github.com/nodaroai/app.nodaro.ai/issues) で Issue を作成してください。

## Frequently asked questions

### セルフホスティングの Nodaro が正常に動かないとき、どこから確認すればよいですか？

環境の /setup を開きます。データベース、Redis、ストレージ、暗号化キー、プロバイダーキーの状態が、緑か赤のカードでリアルタイムに表示され、問題のあるカードにはそれぞれヒントが付きます。ログインは必要ありません。

### docker compose up で「port is already allocated」と表示されるのは、どういう意味ですか？

マシン上の別のプログラムが、ポート 3000 か 9001 を使っています。docker-compose.community.yml で、そのポートマッピングのホスト側を変更し（たとえば「3001:3000」）、PUBLIC_URL もそれに合わせて設定してください。

### エディターが空白のままになったり、「読み込み中…」のまま進まなかったりするのはなぜですか？

ブラウザーのコンソールを開いてください。CORS エラーは、開いたオリジンが許可されていないことを示すため、PUBLIC_URL か CORS_ORIGIN を設定します。ログインのエラーは、/config.js に記載された Supabase の URL か anon キーを、ブラウザーが使えないことを示します。

### ワークフローの実行がまったく始まらないのはなぜですか？

オーケストレーターは、Redis から処理を受け取ります。docker compose logs nodaro でログを確認し、REDIS_URL を確認したうえで、docker compose exec redis redis-cli ping を実行してください。PONG と返れば正常です。

### セルフホスティング環境について、どこでサポートを受けられますか？

github.com/nodaroai/app.nodaro.ai で、アプリのコンテナの Docker ログを添えて Issue を作成してください。
