Mattermost を Docker で試験導入する (Docker Image 版)
先日こちらの記事のとおり Mattermost Preview を試したところ良い感触だったので本番環境に近い形で Mattermost TeamEdition を WSL2 上に Docker を用いて試験導入してみます。
実際の稼働に向けては完全にオンプレミスにするか AWS を利用するかなど検討していく必要がありますが、先ずはオンプレミス環境にて問題なく運用ができるか確認したいと思います。
なお、Mattermost は次の二通りで試しました。
- Docker Image を用いる方法
- Dockerfile を用いる方法
本稿は、前者の Docker Image を用いる方法となります。
実行環境
- Windows バージョン
エディション Windows 11 Home
バージョン 21H2
インストール日 2022/07/24
OS ビルド 22000.832
エクスペリエンス Windows 機能エクスペリエンス パック 1000.22000.832.0
- Ubuntu バージョン
cat /etc/os-release
> NAME="Ubuntu"
> VERSION="20.04.4 LTS (Focal Fossa)"
> ...
- WSL2 上で Docker が利用できる状態
構築の流れ
- 事前準備
- Postgresql Dockerfile 作成
- docker-compose.yml 作成
- docker 起動
Docker サンプルが公開されているので、こちらを参考に構成していきます。
公式説明
1. 事前準備
まず作業フォルダを作成します。
mkdir mattermost-docker
cd mattermost-docker
最終的なフォルダ構成はこのようになります。
tree .
.
├── docker-compose.yml
├── initialize.sh
└── postgresql
├── Dockerfile
└── init-script
└── 01_initialize.sql
事前にホストコンピュータ (WSL2 の Ubuntu ) で下記コマンドを実行し、永続データ保存用のフォルダを作成します。
#!/bin/bash
# ./initialize.sh
sudo mkdir -p /var/postgresql/{data,data_bk}
sudo mkdir -p /var/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
sudo chown -R 2000:2000 /var/mattermost
bash ./initialize.sh
Mattermost データベース用のSQLを準備します。このファイルは、Postgresql の開始時に自動的に実行されます。
-- ./postgresql/init.script/initialize.sql
SET timezone TO 'Asia/Tokyo';
ALTER DATABASE mattermost SET timezone TO 'Asia/Tokyo';
github のサンプルを参考に、環境変数を .env に用意しておきます。
このファイルは docker compose up 時に自動的に読み込まれます。
# ./mattermost-docker/.env
# 以下、全体設定
COMPOSE_PROJECT_NAME=mmapp # Docker compose 名称
DOMAIN=mm.hoge.com # ドメイン
TZ=JP # タイムゾーン
RESTART_POLICY=unless-stopped # container 停止時挙動
# 以下、Postgresql バインド設定
POSTGRES_DATA_PATH=/var/postgresql/data
POSTGRES_DATABK_PATH=/var/postgresql/data_bk
POSTGRES_SCRIPT_PATH=/var/postgresql/init-script
# 以下、Postgresql ユーザー設定
POSTGRES_USER=mmrole
POSTGRES_PASSWORD=NYTcji9G*p($
POSTGRES_PASSWORD_ENCODED=NYTcji9G%2Ap%28%24 # URL encoded
POSTGRES_DB=mattermost
# 以下、pgAdmin 設定
PGADMIN_DEFAULT_EMAIL=hoge@hoge.com
PGADMIN_DEFAULT_PASSWORD=hoge
# 以下、Mattermost バインド設定
MM_CONFIG_PATH=/var/mattermost/config
MM_DATA_PATH=/var/mattermost/data
MM_LOGS_PATH=/var/mattermost/logs
MM_PLUGINS_PATH=/var/mattermost/plugins
MM_CLIENT_PLUGINS_PATH=/var/mattermost/client/plugins
MM_BLEVE_INDEXES_PATH=/var/mattermost/bleve-indexes
# 以下、Mattermost バージョン設定
MATTERMOST_IMAGE=mattermost-team-edition
MATTERMOST_IMAGE_TAG=7.1.2
# 以下、Mattermost 接続設定
MM_SQLSETTINGS_DRIVERNAME=postgres
MM_SQLSETTINGS_DATASOURCE=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD_ENCODED}@db:5432/${POSTGRES_DB}?sslmode=disable&connect_timeout=10
MM_SERVICESETTINGS_SITEURL=http://${DOMAIN}
2 Postgresql Dockerfile 作成
Postgresql 用の Dockerfile を作成します。
# ./mattermost-docker/postgresql/Dockerfile
FROM postgres:14
ARG DB_LANG=en_US # docker-compose.ymlから上書き
RUN localedef -i $DB_LANG -c -f UTF-8 -A /usr/share/locale/locale.alias $DB_LANG.UTF-8 # ロケール追加
ENV LANG $DB_LANG.utf8
docker-compose.yaml 部分は次のとおり。
Postgresql の管理用に pgAdmin も導入しておきます。
# docker-compose.yml (抜粋)
version: '3.9'
services:
db:
build:
context: .
dockerfile: ./postgresql/Dockerfile
args:
- DB_LANG=ja_JP
restart: ${RESTART_POLICY}
security_opt:
- no-new-privileges:true
pids_limit: 100
ports:
- 127.0.0.1:5432:5432
volumes:
- type: bind
source: ${POSTGRES_DATA_PATH}
target: /var/lib/postgresql/data
- type: bind
source: ${POSTGRES_DATABK_PATH}
target: /var/lib/postgresql/data_bk
- type: bind
source: ${POSTGRES_SCRIPT_PATH}
target: /docker-entrypoint-initdb.d
read_only: true
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
pgadmin:
depends_on:
- db
image: dpage/pgadmin4
restart: ${RESTART_POLICY}
ports:
- 127.0.0.1:8080:80
security_opt:
- no-new-privileges:true
pids_limit: 100
volumes:
- type: volume
source: pgadmin
target: /var/lib/pgadmin
environment:
- PGADMIN_DEFAULT_EMAIL
- PGADMIN_DEFAULT_PASSWORD
3. docker-compose.yml 作成
続けて Mattermost のイメージ部分も作成します。
# ./mattermost-docker/docker-compose.yml
version: '3.9'
services:
mattermost:
depends_on:
- db
image: mattermost/${MATTERMOST_IMAGE}:${MATTERMOST_IMAGE_TAG}
restart: ${RESTART_POLICY}
security_opt:
- no-new-privileges:true
pids_limit: 200
ports:
- 127.0.0.1:8065:8065
tmpfs:
- /tmp
volumes:
- type: bind
source: ${MM_CONFIG_PATH}
target: /mattermost/config
- type: bind
source: ${MM_DATA_PATH}
target: /mattermost/data
- type: bind
source: ${MM_LOGS_PATH}
target: /mattermost/logs
- type: bind
source: ${MM_PLUGINS_PATH}
target: /mattermost/plugins
- type: bind
source: ${MM_CLIENT_PLUGINS_PATH}
target: /mattermost/client/plugins
- type: bind
source: ${MM_BLEVE_INDEXES_PATH}
target: /mattermost/bleve-indexes
environment:
- TZ
- MM_SQLSETTINGS_DRIVERNAME
- MM_SQLSETTINGS_DATASOURCE
- MM_SERVICESETTINGS_SITEURL
4. docker 起動
docker を立ち上げます。
docker compose up --build
http://127.0.0.1:8065/
にアクセスすると、Mattermost が起動しています。
今はここまで。次はさらに本格的な試験導入に向けて記載していきます。
Discussion