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
が対象となる。
1 |
MM_CONFIG=/path/to/config.json |
ローカルテスト環境で起動する場合は、以下のようにする。Dockerコンテナ環境が必要である。macであれば、Docker Desktop For Mac(個人利用は無料:ライセンスは公式を確認のこと)を使うとよいだろう。
1 2 3 4 |
# バックグラウンド起動(デフォルト) $ make run-server # バックグラウンド起動しない場合 $ make RUN_IN_BACKGROUND=false run-server |
参考:Setting up Your Development Environment – Mattermost
データベースで管理する場合
MM_CONFIG
にDatabase DSNを指定する。mysqlの場合は以下のようになる。
1 |
MM_CONFIG='mysql://mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s&multiStatements=true' |
参考:Configuration in the Mattermost Database
起動時にカスタムのデフォルト設定を適用したい場合は、以下の環境変数を指定する。
1 |
export MM_CUSTOM_DEFAULTS_PATH=/path/to/custom.json |
現在有効な設定はデーターベースに接続して確認できる。
1 |
select Id, CreateAt, Value, Active from Configurations where Active = 1 \G |
mattermostコマンドでconfigを更新してみる。
1 |
./bin/mattermost config set ServiceSettings.IdleTimeout 8080 |
データベースのConfigurationsのレコード件数を見ると新たにレコードが増えていることが分かる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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) |
値も反映されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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が動いており、構成情報の変更を検知して反映する。本機能を止めるには、以下のオプションを起動時に指定する。
1 |
--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(最新情報は公式を参照のこと)
コメント