🌊

Mattermost を Docker で試験導入する (Docker Image 版)

2022/08/02に公開

先日こちらの記事のとおり Mattermost Preview を試したところ良い感触だったので本番環境に近い形で Mattermost TeamEdition を WSL2 上に Docker を用いて試験導入してみます。
https://zenn.dev/fehde/articles/a8919efbe2efa7

実際の稼働に向けては完全にオンプレミスにするか 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 が利用できる状態

構築の流れ

  1. 事前準備
  2. Postgresql Dockerfile 作成
  3. docker-compose.yml 作成
  4. docker 起動

Docker サンプルが公開されているので、こちらを参考に構成していきます。
https://github.com/mattermost/docker

公式説明
https://docs.mattermost.com/install/install-docker.html

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