トラブルシューティング
起動、アーティファクト、認証、権限、デプロイメントの問題を診断します。
症状から始め、最も小さな境界から確認していきます。
ObjectOS が起動しない
何よりも先に、ログの最後の数行を読んでください。 ここでの起動失敗の多くは、クラッシュではなく意図的な拒否です。ランタイムは与えられた設定を確認し、食い違っている変数を名指しした致命的エラーを表示して終了します。それらのメッセージは問題を正確に示しており、何度再起動しても結果は変わりません。
どちらのエディションでも最もよく遭遇する拒否は次のとおりです。
| ログの内容 | 意味 |
|---|---|
| データドライバーが接続できなかった | OS_DATABASE_URL のデータベース、またはアプリがオブジェクトをバインドするデータソースに到達できないか、認証情報が間違っています。すべてのリクエストでエラーを返すサーバーを提供する代わりに、起動が拒否されます。 |
| 破壊的なスキーマ変更が保留中で、各変更が示されている | 新しいアプリまたはバージョンに、データを失う変更が必要です。バックアップを取ってから、os migrate apply --allow-destructive で意図的に適用し、再起動します。 |
| アーティファクトの期待するダイジェストと実際のダイジェスト | OS_ARTIFACT_URL の完全性の固定が、取得したバイトと一致しません。後述を参照してください。 |
| ポートが使用中 | os start は別のポートに移ることはありません。ポートを解放するか、OS_PORT とプロキシのアップストリームを一緒に変更してください。 |
| マルチノードのトポロジーが宣言された | マルチノードのライセンスがない、または調整がプロセス内で行われるランタイムで、OS_CLUSTER_REPLICAS が 1 より大きくなっています。レプリカ 1 つで実行してください。Docker → マルチノードを参照してください。 |
Cannot find module 'pg' | 素の Node.js のインストールには PostgreSQL ドライバーがありません。イメージには pg と mysql2 が含まれています。イメージの外では、CLI と並べてドライバーをインストールします(npm install -g pg)。 |
ログに致命的エラーがない場合は、一般的な原因を確認します。失敗しているサービスのコンテナログと、プローブです。/api/v1/health はプロセスが HTTP を提供し始めると応答し、/api/v1/ready はデータベースが応答してから初めて応答します。
アプリが期待したものと違う
デプロイメントが提供するアプリはただ 1 つの場所から来ており、その場所はデプロイメントが宣言する判断です。起動モードを参照してください。実行中のアプリが公開したものと違う場合:
- このデプロイメントがどのモードかを確認します。 アーティファクトの参照が設定されていない場合、ランタイムはイメージが持っているものを提供しています。Community では
/srv/app/objectstack.jsonのファイル、または空のカーネルとそこにインストールされたアプリ。Enterprise では、イメージ内で作成されたメタデータとそこにインストールされたもの。新しいアーティファクトを公開しても、デプロイメントがそれを指定するまでは何も変わりません。 - 起動時のバナーを確認します。 実際に読み込まれたアプリの名前が表示されます。
- 一致しない完全性の固定は起動を拒否し、期待するダイジェストと実際のダイジェストの両方を表示します。両方が一緒に表示されることが要点です。再公開されたアーティファクトと、すり替えられたアーティファクトを区別できます。
- 固定がなく、アーティファクトのホストに到達できない場合、起動ははっきりと失敗します。 固定なしの経路にはキャッシュへのフォールバックがありません。キャッシュされたコピーを認証する手段がないからです。オーケストレーションが再試行します。ランタイムが別のアプリをでっち上げることはありません。
- 固定があり、ホストに到達できない場合、ローカルにキャッシュされたコピーが提供されることがあります。 ただし、そのバイトのハッシュが固定と一致するものに限られ、警告でその旨が表示されます。キャッシュは読み取りのたびに再ハッシュされます。ファイル名が根拠になることはありません。
- 廃止されたアーティファクトの変数を設定しても、アプリは選択されません。 Enterprise イメージでは、そのうちの 1 つは起動をその場で拒否します。その他はまったく読み取られないため、デプロイメントは何も設定しなかったかのように起動します。廃止された名前に、それらと代替となる変数の対応が一覧になっています。
誰もサインインできない
新しいデプロイメントでは、最初に登録したアカウントが管理者になります。このルールはログインではなく人を数えます。サインインアカウントなしで人のレコードを投入するアプリは、データベースにデータがあるように見せるため登録は閉じたままになり、投入された人にはサインインに使うパスワードがありません。起動ログは、これを no_sign_in_account_at_boot としてエラーレベルで報告します。復旧は帯域外で行います。招待の行を 1 つデータベースに書き込み、通常の登録を行います。手順は ObjectStack のセルフホスティングガイドで説明されています。これを防ぐには、人と一緒にサインインアカウントを投入するか、最初の管理者ができるまでディレクトリを空のままにしてください。
ログインに失敗する
確認すること:
OS_AUTH_SECRETが設定されている。これがないと、サインインエンドポイントはまったく有効になりませんOS_AUTH_URLとOS_TRUSTED_ORIGINSが公開アドレスを指している- OIDC のコールバック URL が公開アドレスと一致している
- OIDC のディスカバリー URL に ObjectOS から到達できる
- 信頼されたオリジンに公開ドメインが含まれている
- Cookie のスコープがデプロイメントの公開ホスト名になっている
ユーザーがレコードを見られない
確認すること:
- デプロイメントのホスト名が正しい。
- ユーザーが想定した組織に所属している。
- オブジェクトの
read権限。 - 行レベルセキュリティ。
- 共有ルールまたはレコードの共有。
- 一部のフィールドだけが見えない場合は、フィールドのセキュリティ。
設定を編集できない
設定は環境のオーバーライドによってロックされている場合があります。実効的な設定は次の順序で解決されます。
Environment -> Tenant -> User -> Default環境が値を提供している場合、実行時の編集は、黙って上書きするのではなく拒否されるべきです。
保存されたシークレットを読めない
暗号化された設定、secret フィールド、データソースの認証情報は、OS_SECRET_KEY で暗号化されています。再起動や復元の後に復号できなくなった場合は、キーが変わっています。キーを設定しなかったコンテナが独自のキーを生成し、ファイルシステムとともに失ったか、データベースが元のキーなしで復元されたかです。預託した元の値を設定してください。バックアップを参照してください。新しいキーで、古いキーで暗号化された値を回復することはできません。
Webhook やジョブが実行されない
確認すること:
- アーティファクトの
requiresリストに必要な機能が含まれている - ObjectOS イメージにオプションのサービスパッケージが含まれている
- キュー/ジョブサービスの設定が利用できる
- スケジュールフローと cron ジョブには
OS_AUTOMATION_SCHEDULED_WORK_ENABLED=trueが必要。未設定はオフです - 送信先へのアウトバウンドのネットワークアクセスが許可されている
- 配信ログまたはジョブの実行が Setup の診断で表示される
データベースのエラー
確認すること:
- データベース URL とドライバーの種類
- ObjectOS からデータベースへのネットワークアクセス
- 認証情報と TLS のオプション
- スキーマの同期/マイグレーションのログ
- ローカルの SQLite を使っている場合は、ストレージの永続性
Enterprise で追加されるもの
ライセンスされたイメージは、起動時にさらにいくつかの設定を拒否します。
| ログの内容 | 意味 |
|---|---|
| 2 つの設定がサポートされない組み合わせとして一緒に示されている | 両立しないライセンスモードとクラウドの姿勢です。最も多いのは、コントロールプレーンなしで設定されたデプロイメント上の、オンラインで検証される通常のライセンスです。サポートされる組み合わせの表はエアギャップにあります。 |
| 壁で区切られたデプロイメントにはライセンスが必要 | ライセンスなしでマルチ組織のテナンシーの姿勢が求められました。分離はライセンスされた機能であり、ランタイムは分離があるふりをしてトラフィックを提供することはありません。 |
| 判断が下されていない | マルチ組織の姿勢では、新規サインアップのメンバーシップのポリシーと、マウントする AI エージェントのセットに安全なデフォルトがありません。どちらの値を宣言しても受け入れられますが、未設定のままにすることは受け入れられません。 |
| 廃止された変数が設定されている | 古いアーティファクト選択の変数は起動を拒否し、代替となる変数を示します。廃止された名前を参照してください。 |
| クラスターのシークレットがない | クラスタードライバーを有効にすると、すべてのレプリカで共有する 1 つのシークレットキーが必須になります。 |