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コマンドで明示的に行なう、となっている。(以下リンクより)
今後は、configの変更後、mmctlコマンド(mmctl config reload)で反映という手順になるのであろう。
なお、config watcherを停止した場合、configの変更はmmctlコマンドでリロードしないと反映されなかった。これは、データベース管理でも同様であった。config watcherを停止した場合は、反映漏れがないように気をつけたい。
参考
- https://developers.mattermost.com/contribute/server/developer-setup/
- https://github.com/mattermost/mattermost-server/blob/v5.37.4/config/store.go#L94
- config.jsonの上書きに関連するissue(最新情報は公式を参照のこと)


コメント