トップページ

stack

MMAM のスタック構成

Docker Compose が起動する各サービスの役割や接続経路、設定ファイルを把握できるようにまとめています。トラブル時の調査にも役立つ情報を含めています。

サービス一覧と代表ポート

MMAM は 4 つのコンテナで構成されています。各サービスの役割と設定場所を以下の表にまとめています。

サービス 役割と保存先 ポート / 備考
mmam FastAPI サービスです。REST エンドポイントや Scheduler、NMOS ツールを集約します。 8080 (HTTP) / 8443 (HTTPS) を待ち受けます。TLS 証明書は certs/ に保存します。
ui Vue 3 UI を nginx で配信します。frontend/dist を読み込みます。 4173 / 4174 を使用し、UI が API URL を自動判別します。
db PostgreSQL 16 です。flows や planner_buckets、scheduled_jobs(自動化設定)などを保存します。 5432 (内部) を利用します。永続化は ./pgdata に行います。
mqtt Mosquitto です。REST 更新を MQTT / MQTT-WS でブロードキャストします。 1883 / 9001 を使用します。無効化したい場合は MQTT_ENABLED=false に設定します。

HTTP(8080) と HTTPS(8443) は常に同時起動します。利用しないプロトコルがある場合は OS 側のファイアウォールで該当ポートを閉じてください。

FastAPIレイヤー

8 つのルーターをモジュール化し、APScheduler がバックグラウンドジョブを統括します。

  • routers/flows.py に REST PATCH と Checker API を集約しています。
  • NMOS 連携は routers/nmos.pyservices/nmos が担当します。
  • ログは LOG_DIR(既定では /log。権限が無い場合は ./logs にフォールバック)配下の api.logaudit.log に保存します。

PostgreSQL

schema.sql で初期化されるテーブル構造です。テキストハブ用フィールドは UTF-8 を前提にしています。

  • flows.alias_1-8 / user_field_1-8 がメモ領域です。
  • planner_buckets は再帰 CTE で階層を取得します。
  • バックアップは docker exec db pg_dump mmam > backup.sql で取得します。

通信フローの全体像

各サービスがどのように連携して動作するかを順を追って説明します。

  1. ブラウザからUIへアクセス
    https://localhost:4174(または 4173)にアクセスすると、Vue 3 で構築された UI が表示されます。UI は API ベース URL を自動的に判別します。
  2. UI から REST API へリクエスト
    ユーザーがフローを作成・更新すると、UI は FastAPI(8443)へ POST/PATCH リクエストを送信します。TLS 証明書は certs/ ディレクトリで管理されています。
  3. FastAPI が PostgreSQL を操作
    FastAPI は PostgreSQL へクエリを発行し、フローやバケット情報を保存・取得します。変更があった場合は同時に MQTT へイベントを配信します。
  4. バックグラウンドジョブの実行
    Checker や NMOS 連携ジョブは APScheduler によってスケジュールされ、定期的に実行されます。実行結果は DB の scheduled_jobs テーブルに保存され、Automation UI と /api/automation/summary から参照できます。

セキュリティのヒント: 本番環境では、UI→API 間を社内 CA の証明書で暗号化し、API→DB 間は Docker の内部ネットワークに閉じて外部からアクセスできないようにしてください。