Mattermost Dockerのconfig.jsonの指定

mattermost
https://pixabay.com/images/id-1452987/
この記事は約6分で読めます。

Mattermostのdockerコンテナで、mattermostコマンドを使って設定更新操作を行なうと、あらかじめ作成しておいたconfig.jsonが何故が初期化されてしまう事象に遭遇してしまった、??。(再現性を確認できていないが、pluginをenableやdeleteして何らかのschedulerが動くタイミングで発生している?)

そこで、本記事ではMattermostの設定方法について整理する。

本動作検証バージョンはv5.37.4である。

MattermostのConfiguration

Mattermostは、設定情報をconfig.jsonファイルで管理する。通常、mattermost/configディレクトリにあるconfig.jsonファイルが対象となる。環境変数MM_CONFIGでconfig.jsonファイルのパスを指定することもできる。設定情報は、System Consoleや直接ファイルを編集することで更新できる。設定を更新するとconfigの変更を検知してリロードしてくれる。

v.5.10からはデータベースで構成管理をすることができる。

ファイルで管理する場合

環境変数MM_CONFIGにconfig.jsonファイルのパスを指定する。指定がない場合は、config/config.jsonが対象となる。

MM_CONFIG=/path/to/config.json

ローカルテスト環境で起動する場合は、以下のようにする。Dockerコンテナ環境が必要である。macであれば、Docker Desktop For Mac(個人利用は無料:ライセンスは公式を確認のこと)を使うとよいだろう。

# バックグラウンド起動(デフォルト)
$ make run-server
# バックグラウンド起動しない場合
$ make RUN_IN_BACKGROUND=false run-server

参考:Setting up Your Development Environment – Mattermost

データベースで管理する場合

MM_CONFIGにDatabase DSNを指定する。mysqlの場合は以下のようになる。

MM_CONFIG='mysql://mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s&multiStatements=true'

参考:Configuration in the Mattermost Database

起動時にカスタムのデフォルト設定を適用したい場合は、以下の環境変数を指定する。

export MM_CUSTOM_DEFAULTS_PATH=/path/to/custom.json

現在有効な設定はデーターベースに接続して確認できる。

select Id, CreateAt, Value, Active from Configurations where Active = 1 \G

mattermostコマンドでconfigを更新してみる。

./bin/mattermost config set ServiceSettings.IdleTimeout 8080

データベースのConfigurationsのレコード件数を見ると新たにレコードが増えていることが分かる。

mysql> select count(*) from Configurations; 
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from Configurations;
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.00 sec)

値も反映されている。

mysql> select Id, CreateAt, Value, Active from Configurations where Active = 1 \G
*************************** 1. row ***************************
      Id: qoo1g868jp8s58318rxeeyxr1h
CreateAt: 1639889307586
   Value: {
    "ServiceSettings": {
        "SiteURL": "",
        "WebsocketURL": "",
        "LicenseFileLocation": "",
        "ListenAddress": ":8065",
        "ConnectionSecurity": "",
        "TLSCertFile": "",
        "TLSKeyFile": "",
        "TLSMinVer": "1.2",
        "TLSStrictTransport": false,
        "TLSStrictTransportMaxAge": 63072000,
        "TLSOverwriteCiphers": [],
        "UseLetsEncrypt": false,
        "LetsEncryptCertificateCacheFile": "./config/letsencrypt.cache",
        "Forward80To443": false,
        "TrustedProxyIPHeader": [
            "X-Forwarded-For",
            "X-Real-IP"
        ],
        "ReadTimeout": 300,
        "WriteTimeout": 300,
        "IdleTimeout": 8080,

...省略

configファイルの変更検知を停止する

Mattermostでは、構成の変更を検知するconfig watcherが動いており、構成情報の変更を検知して反映する。本機能を止めるには、以下のオプションを起動時に指定する。

--disableconfigwatch

config watcherを停止して何度かmattermostコマンドでpluginのenable/deleteを繰り返した限りでは、config.jsonの予期せぬ上書きに遭遇はしなかった。

なお、v5.38からはconfig.jsonの自動リロードはDeprecatedとなっているようである。設定のリロードは、mmctlコマンドで明示的に行なう、となっている。(以下リンクより)

参考:Configuration Settings

今後は、configの変更後、mmctlコマンド(mmctl config reload)で反映という手順になるのであろう。

なお、config watcherを停止した場合、configの変更はmmctlコマンドでリロードしないと反映されなかった。これは、データベース管理でも同様であった。config watcherを停止した場合は、反映漏れがないように気をつけたい。

参考

コメント

タイトルとURLをコピーしました