Skip to content

feat(matrix): homeserver を Conduit から Synapse に替える - #516

Merged
gapul merged 1 commit into
mainfrom
feat/matrix-synapse
Aug 30, 2026
Merged

feat(matrix): homeserver を Conduit から Synapse に替える#516
gapul merged 1 commit into
mainfrom
feat/matrix-synapse

Conversation

@gapul

@gapul gapul commented Aug 30, 2026

Copy link
Copy Markdown
Owner

なぜ

ブリッジを 2 本から 10 本規模に増やすことにした。Conduit はその規模を載せる場所として向いていない。

問題 中身
本家が止まっている Conduit → conduwuit (アーカイブ) → continuwuity。動いていたのは 0.10.12
まさにその不具合が直っている 2026 年中頃の continuwuity で「暗号化ブリッジが起動できない」「指定した localpart でユーザーが作られず mautrix-telegram が落ちる」を修正
continuwuity への移行も素直でない RocksDB のスキーマが分岐後。移行は一方通行
決め手 Conduit は appservice の登録を RocksDB に持ち admin room 経由でしか変えられない

最後の一点が大きい。matrix.nix は自分で「ブリッジは宣言できない」と書いてコンテナのまま置いていた。Synapse は登録を設定ファイルで読むので、そこが解ける。 実際 nixpkgs にモジュールがある:

mautrix-discord mautrix-meta mautrix-signal mautrix-telegram mautrix-whatsapp

移行のコストはゼロ

まだ誰も使っていない。RocksDB は 4MB で、部屋も履歴も無い。使い始めてからでは同じ判断はできないので、ここで替える。

server_namegapul.net のまま。well-known と CNAME はそのまま通る。

このコミットの範囲

土台だけ。 使っていない Discord/Telegram のコンテナは一旦外し、次から services.mautrix-* で宣言的に戻す。1 つの変更に土台の入れ替えとブリッジの載せ替えを混ぜない。

細かいところ

  • DB は自分で作る。 Synapse は C 以外の照合順序を拒否するが、このクラスタは atuin が database.createLocally で生やしたもので既定が ja_JP.UTF-8ensureDatabases では作れず、initialScript はクラスタ初回作成時にしか走らない
  • registration_shared_secret は無いと起動しないので、無ければ生成する
  • ブリッジは大量のイベントを短時間に流すので rc_* を緩めてある
  • cloudflared の向き先を 6167 → 8008

古い Conduit のデータ (/var/lib/private/matrix-conduit) は消していない。戻したくなったときの保険。

ブリッジを 2 本から 10 本規模に増やすことにしたが、Conduit はその規模を載せる
場所として向いていない:

  - Conduit 本家は止まっている。系譜は Conduit -> conduwuit (アーカイブ) ->
    continuwuity で、動いていたのは 0.10.12。しかも 2026 年中頃の continuwuity で
    「暗号化ブリッジが起動できない」「指定した localpart でユーザーが作られず
    mautrix-telegram が落ちる」が修正されている。まさに踏みに行く場所だった。
  - continuwuity への載せ替えも素直ではない。RocksDB のスキーマが分岐後で、
    移行は一方通行。
  - 決め手は登録方式。Conduit は appservice の登録を RocksDB に持ち admin room
    経由でしか変えられない。だから matrix.nix は「ブリッジは宣言できない」と
    書いてコンテナのまま置いていた。Synapse は登録を設定ファイルで読むので、
    nixpkgs の services.mautrix-* モジュールがそのまま使えるようになる。

移行のコストはゼロだった。まだ誰も使っていない (RocksDB は 4MB、部屋も履歴も無い)。
使い始めてからでは同じ判断はできないので、ここで替える。

このコミットは土台だけ。使っていない Discord/Telegram のコンテナは一旦外し、
次から services.mautrix-* で宣言的に戻す。

細かいところ:
  - DB は自分で作る。Synapse は C 以外の照合順序を拒否するが、このクラスタは
    atuin が生やしたもので既定が ja_JP.UTF-8。ensureDatabases では作れないし、
    initialScript はクラスタ初回作成時にしか走らない。
  - registration_shared_secret は無いと起動しないので、無ければ生成する。
  - ブリッジは大量のイベントを短時間に流すので rc_* を緩めてある。
  - cloudflared の向き先を 6167 から 8008 へ。
@gapul
gapul merged commit 6877bdb into main Aug 30, 2026
5 checks passed
@gapul
gapul deleted the feat/matrix-synapse branch August 30, 2026 17:16
gapul added a commit that referenced this pull request Aug 30, 2026
* feat(matrix): ブリッジ第1陣 (Discord/Signal/Instagram/Messenger)

Synapse に替えた (#516) ので services.mautrix-* が使える。登録ファイルの生成と
app_service_config_files への追加までモジュールがやるので、書くのは「誰がどこに
繋ぐか」だけでよい。Conduit のままならこの形にはできなかった。

評価で配線を確認:
  /var/lib/mautrix-discord/discord-registration.yaml
  /var/lib/mautrix-meta-instagram/meta-registration.yaml
  /var/lib/mautrix-meta-messenger/meta-registration.yaml
  /var/lib/mautrix-signal/signal-registration.yaml

Instagram と Messenger は同じ mautrix-meta の別インスタンス。network.mode で
分かれる。ポート・appservice.id・bot 名は必ずずらす (揃えると片方の登録が
もう片方を上書きする)。

permissions の既定は { "*" = "relay" } で誰でも relay として使えるので閉じた。

libolm を許可した。非推奨で insecure の印が付いているが、使われるのは
ブリッジ側の E2EE だけで、そこは有効にしていない。goolm への逃げ道は
mautrix-discord のパッケージが 0.7.7 と古くフラグを持たないので通らず、
discord のためにどのみち許可が要る。E2EE を有効にするときに判断をやり直す。

この陣に入れていないもの:
  telegram — api_id/api_hash が要る。nix の settings に書くと store が誰でも
             読めるので、sops から environmentFile で渡す形にしてから足す。
  twitter/linkedin/gmessages/slack/line/imessage — モジュールが無い。第2陣以降。
  teams    — 個人アカウント向けの実験実装しか無く、会社テナントは Azure の
             アプリ登録が要る (許可の話になる)。
  simplex  — 構造的に無理。識別子を持たない設計なので puppeting が成立しない。

* style(matrix): statix に合わせて `{ ... }:` を `_:` にする

pre-commit は statix を除外していて CI の ci-lint.sh だけで走るので、
ローカルをすり抜ける。既知の罠。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant