コミュニティソリューション

CasaOSでMatrix Synapseが異常状態になる場合のDocker修正ガイド

A CasaOS user could not get a Matrix Synapse container healthy and had no clear diagnostic path; current Synapse docs provide an official Docker workflow.

CasaOS上のMatrix Synapseに「container is unhealthy」と表示された場合は、無闇に再インストールするのではなく、まずコンテナのログと生成されたhomeserver.yamlを確認してください。Synapseには公式Dockerイメージがありますが、本番用のホームサーバーには、永続的な設定・データ、適切なサーバー名、PostgreSQL、HTTPSとフェデレーションの計画も必要です。

SQLiteはテストには使用できますが、現在のSynapseドキュメントでは、ほぼすべての実運用インストールでPostgreSQLが推奨されています。設定、データベース、権限、または起動時のマイグレーションに失敗すると、コンテナが起動していてもunhealthyのままになることがあります。

公式Synapseイメージを使用する

現在のSynapseインストールガイドでは、ghcr.io/element-hq/synapseが公式コンテナイメージとして案内されています。

初期設定を生成する

永続ディレクトリを作成し、通常の起動前に一度設定を生成します。

mkdir -p /DATA/AppData/synapse
docker run --rm -it   -v /DATA/AppData/synapse:/data   -e SYNAPSE_SERVER_NAME=matrix.example.com   -e SYNAPSE_REPORT_STATS=no   ghcr.io/element-hq/synapse:latest generate

例のドメインを、今後使用するMatrixサーバー名に置き換えてください。

コンテナがunhealthyになっている理由を確認する

docker ps -a | grep synapse
docker inspect synapse --format '{{json .State.Health}}'
docker logs --tail 200 synapse

YAMLエラー、ファイル不足、権限エラー、データベース接続エラー、または完了していないマイグレーションがないか確認してください。

本番環境ではPostgreSQLを使用する

現在のSynapse PostgreSQLガイドでは、サポートされているデータベース設定が説明されています。PostgreSQLのデータを永続化し、Synapseの状態と併せてバックアップしてください。

計画なしにserver_nameを後から変更しない

Matrix IDは、@user:example.comのようにサーバー名から生成されます。ユーザーを招待する前に、長期的に使用するドメインを決めてください。

実用上はHTTPSが必要

Synapseは通常、HTTP(一般的にはポート8008)で内部的に待ち受けます。コンテナの生のポートを公開するのではなく、クライアントとフェデレーションにはHTTPS対応のリバースプロキシを使用してください。

フェデレーションには追加のDNSとプロキシ設定が必要

他のMatrixサーバーと通信する場合は、公開サーバー名、HTTPS、フェデレーションのディスカバリーを正しく設定してください。ローカル限定のテストなら、構成ははるかに簡単です。

コンテナ以外もバックアップする

homeserver.yaml、署名キー、アップロード済みメディア、PostgreSQLデータベースを保持してください。イメージを再取得しても、ホームサーバーのIDは復元されません。

Dockerトラブルシューティングガイドでは、コンテナをデバッグするための一般的な考え方を説明しています。

永続データフォルダーの所有者を確認する

コンテナログにhomeserver.yaml、署名キー、またはメディアの読み取り時にpermission deniedと表示される場合は、イメージが想定するUID/GIDに合わせて、Synapseのデータディレクトリをマウントしているフォルダーの所有者を修正してください。CasaOSのデータツリー全体を誰でも書き込み可能にすることは避けてください。

ヘルス状態を判断する前にデータベースのマイグレーションを待つ

アップグレード後やPostgreSQLへの初回接続時には、Synapseがスキーマのマイグレーションを実行するために時間がかかる場合があります。コンテナを何度も再起動するのではなく、ログを確認してください。マイグレーションが中断されると、診断が難しくなることがあります。

リバースプロキシの前にローカルAPIをテストする

HTTPS、DNS、フェデレーションを追加する前に、CasaOSホストから内部のSynapse HTTPエンドポイントが応答することを確認してください。ローカルAPIがunhealthyなら、リバースプロキシで修復することはできません。

よくある質問

Synapseがunhealthyになるのはなぜですか?

ログとヘルス出力を確認し、設定、権限、データベース、またはマイグレーションのエラーを探してください。元のスレッドには、検証済みの単一の原因は示されていません。

SQLiteは使用できますか?

テスト用途なら使用できます。現在のSynapseドキュメントでは、ほぼすべての本番インストールでPostgreSQLが推奨されています。

Synapseは内部でどのポートを使用しますか?

一般的なDocker構成では、リバースプロキシの背後でクライアント/サーバーAPIにポート8008を使用します。

Elementは必要ですか?

いいえ。Synapseはホームサーバーであり、Elementは利用可能なクライアント/Webフロントエンドの一つです。