ディーメイクAdvent Calendar 2023 12/06の記事です。
こんにちは、CTOのsakasaiです。
今回はディーメイクでも利用しているチャットツールMattermostをAmazon EC2上で起動して、プラグイン「Mattermost AI Plugin」をインストールして試してみたいと思います。
Amazon EC2起動
最初にEC2を起動します。
以下の構成で起動します。(スペック等にとくに意味はありませんが、少し大きめにしています)
- AMI:Amazon Linux 2023
- インスタンスタイプ:t3.xlarge
- ストレージ:30GiB,gp3




セキュリティグループはMattermostで使用する8065番を開放しておきます。
必要に応じてSSHやEC2 Instance Connectエンドポイントなどを許可設定してください。
EC2セットアップ
EC2が起動できたらSSH等でEC2に接続し、事前準備を行います。

最初にdocker等のインストールを行います。
# update
sudo dnf -y update
# dockerとgitをインストール
sudo dnf -y install git docker
インストールが出来たらdockerの有効化とdocker-composeを使用できるようにします。
# dockerの有効化
sudo systemctl enable --now docker
sudo systemctl status docker
sudo usermod -aG docker ec2-user
sudo chmod 666 /var/run/docker.sock
# docker-composeインストール
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf --releasever=36 install docker-compose-plugin
確認します。
$ sudo docker version
Client:
Version: 24.0.5
API version: 1.43
Go version: go1.20.10
Git commit: ced0996
Built: Fri Oct 13 00:00:00 2023
OS/Arch: linux/amd64
Context: default
Server:
Engine:
Version: 24.0.5
API version: 1.43 (minimum version 1.12)
Go version: go1.20.10
Git commit: a61e2b4
Built: Fri Oct 13 00:00:00 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.2
GitCommit: 0cae528dd6cb557f7201036e9f43420650207b58
runc:
Version: 1.1.7
GitCommit: f19387a6bec4944c770f7668ab51c4348d9c2f38
docker-init:
Version: 0.19.0
GitCommit: de40ad0
$ sudo docker info
Client:
Version: 24.0.5
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.0.0+unknown
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.18.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 24.0.5
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 0cae528dd6cb557f7201036e9f43420650207b58
runc version: f19387a6bec4944c770f7668ab51c4348d9c2f38
init version: de40ad0
Security Options:
seccomp
Profile: builtin
cgroupns
Kernel Version: 6.1.61-85.141.amzn2023.x86_64
Operating System: Amazon Linux 2023
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 15.41GiB
Name: ip-XXX-XXX-XXX-XXX.ec2.internal
ID: ce75be51-8d92-47d2-ae24-efcb63dcf99b
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
$ sudo docker compose version
Docker Compose version v2.18.1
Mattermostのインストールと起動
次にMattermostをインストールします。
今回はMattermot公式GitHubのdockerリポジトリをcloneしてdockerで起動します。
以下の手順に沿って行っていきます
pwd # /home/ec2-user
git clone https://github.com/mattermost/docker
cd docker/
環境設定を行います。
cp env.example .env
vi .env
以下を変更しました。(変更点のみ抜粋)
# ドメイン設定
DOMAIN=123.456.789.000:8065 # 123.456.789.000は起動したEC2のパブリックIP
# タイムゾーン
TZ=Asia/Tokyo
# postgresバージョン
POSTGRES_IMAGE_TAG=16-alpine # 執筆時点の最新に変更(元は13-alpineでした)
# Mattermostバージョン
MATTERMOST_IMAGE=mattermost-team-edition
MATTERMOST_IMAGE_TAG=release-9.2
# MattermostのURL
MM_SERVICESETTINGS_SITEURL=http://${DOMAIN} # 元はhttps
必要なディレクトリの作成
mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
sudo chown -R 2000:2000 ./volumes/app/mattermost
ここでMattermostの起動を行います。
sudo docker compose -f docker-compose.yml -f docker-compose.without-nginx.yml up
正常に起動したらブラウザからアクセスします。
http://123.456.789.000:8065/ # 123.456.789.000は起動したEC2のパブリックIP

今回はブラウザのまま続けます。
ユーザーを作成します。

初期設定を行います。



不要な箇所はスキップでOKです。
設定が終わるとMattermostのチャット画面になります。

最初に日本語化だけ行っておきます。
システムコンソール画面でデフォルトの言語を日本語にします。


設定できたらチャット画面に戻ってユーザーの設定で言語を日本語にします。


日本語化出来ました。

一応チャットができるか確認しておきます。

問題なさそうです。
Mattermost AI Pluginの設定
それではAIプラグインのインストールを行っていきます。
最初にMattermostのシステムコンソールでプラグインをインストールするために、プラグインのアップロード許可設定を行います。
一度Ctrl+Cでdockerコンテナを停止し、configを編集します。
sudo vi volumes/app/mattermost/config/config.json
以下を変更しました。
"PluginSettings": {
"Enable": true,
"EnableUploads": true, // falseからtrueに変更
次に以下のGitHubリリースページから最新のプラグイン(tar.gzファイル)をダウンロードしておきます。
https://github.com/mattermost/mattermost-plugin-ai/releases
再度、Mattermostを起動します。
sudo docker compose -f docker-compose.yml -f docker-compose.without-nginx.yml up
起動できたらシステムコンソールを開き、プラグイン管理を開きます。

「プラグインをアップロードする」でダウンロードしたプラグインをアップロードします。

完了すると左メニューに「Mattermost AI Plugin」が出てきます。

「Mattermost AI Plugin」を開き、有効化します。

保存するとプラグインの設定ができるようになります。

Add AI Serviceをクリックし使用するAIを追加します。

今回はOpenAIのAPIを使って、モデルにgpt-3.5-turboを使用する設定にしました。
完了したら保存して、次にチーム設定でAIプラグインのユーザーをチームに加えます。

完了したら保存してチャット画面に戻ります。
Mattermost AI Pluginを使ってみる
まずはチャンネル内で使ってみます。
チームに追加したメンバーにメンションする形で使用することが出来ます。

スレッドで返信が返ってきます。

日本語で話しかけてみます。

ちゃんと返ってきますね。
注意点としては、チャンネル内で会話する場合、必ずメンションをつけないといけないようです。

次にプラグインのもう一つの機能、スレッドの要約をしてもらいます。

Summarize Threadをクリックするとユーザーからダイレクトメッセージで要約が返ってきます。

日本語にしてもらいました。

DMの場合はメンションなしでも会話を続けることができるようです。
その他プラグインでできることなどはGitHubページのREADMEを参照してください。
https://github.com/mattermost/mattermost-plugin-ai/blob/master/README.md
また、MattermostではOpenOpsというフレームワークでMattermostでAIを利用する環境がセットアップできるものも用意されています。
https://github.com/mattermost/openops
https://mattermost.com/blog/open-source-ai-framework/
・このプラグインは現在実験段階です。利用は自己責任でお願いします。
・現時点ではデータベースにMySQLを使用している場合、Mattermost AI Pluginを利用できないようです。
https://github.com/mattermost/mattermost-plugin-ai/issues/19
・OpenAIを利用する場合、別途APIの利用料が発生しますのでご注意ください。
最後に
MattermostをAmazon EC2上で立ち上げて利用する方法と、Mattermost AI Pluginについて確認しました。
今回は簡単に確認するために環境を作ったので、実際にチャットツールとして使うにはサーバー設定含め考慮しなくてはいけない箇所がありますが、一旦試すだけなら簡単に環境ができることがわかったと思います。
今回は確認しませんでしたが、Mattermost AI PluginではOpenAIの他にもローカルLLMなども使用できるようなので、そちらを試してみるのもいいかと思います。
Mattermostも他のチャットツールと同様にAIを使った機能が今後も充実していくと思うのでチェックしていきたいと思います。
宣伝
ちゃんとしたMattermost環境を利用したいという方はディーメイクでも導入支援サービスを行っていますので、チェックしてみてください。
https://chat.remocla.online/lp/