プロジェクト

全般

プロフィール

Docker上にMattermostを構築

最終更新日:2021/08/21

DockerとDocker ComposeでMattermost環境を構築しよう。
もちPodmanで解説。

コンテナイメージ作成

まずはデータベースをPostgreSQL向けにしたMattermostのイメージを作成する。
今回の設定ではメール機能がないプレビュー版となる。

1.ファイル取得

公式のリポジトリをクローンして取得する、普通に圧縮ファイルで取得して解凍してもOK。
https://github.com/mattermost/mattermost-docker-preview

2.設定ファイル編集

イメージに取り込まれる設定ファイルを編集する、「config_docker.json」をエディタで開く。

まずはデータベースの接続先をMySQLからPostgreSQLに変更する。
ドライバ名を「postgres」に、データソースをPostgresのものに変更する。
データソースは「postgres://(ユーザー名):(パスワード)@(接続先):5432/(データベース名)?~」となる。
(下記だとユーザー名は「mm_user」、パスワードは「mm_password_1234」、接続先は「postgresql」、データベース名は「mattermost」)

"SqlSettings": {
    "DriverName": "postgres",
    "DataSource": "postgres://mm_user:mm_password_1234@postgresql:5432/mattermost?sslmode=disable&connect_timeout=10",
    中略
},

次に言語を日本語にする、ロケールを「en」から「ja」に変更。
言語を切り替えられる設定画面までは特に難しい英語はないので、ここはパスしてもいい。

"LocalizationSettings": {
    "DefaultServerLocale": "ja",
    "DefaultClientLocale": "ja",
    "AvailableLocales": ""
},

現行バージョンでは修正され不要(クリックで展開)

3. Dockerfile編集

デフォルトだとMySQLをベースにMattermostを合体させたイメージになるが、これをMattermost単品のイメージにする。
まずは前半のMySQLの部分を全部削除する。

# Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
FROM mysql:5.7

RUN apt-get update && apt-get install -y ca-certificates

#
# Configure SQL
#

ENV MYSQL_ROOT_PASSWORD=mostest
ENV MYSQL_USER=mmuser
ENV MYSQL_PASSWORD=mostest
ENV MYSQL_DATABASE=mattermost_tes

代わりにベースイメージ用のDebianを用意する、今回はBitnamiの最小Debianを使用。
一緒に起動スクリプトで必要なパッケージもインストールする。

#
# Base Debian
#
FROM docker.io/bitnami/minideb:buster
RUN install_packages ca-certificates

最終的にはこんな感じ、バージョンは本体が更新されるたびに変わるので注意。
(このページ作成時は5.37.1)

#
# Base Debian
#
FROM docker.io/bitnami/minideb:buster
RUN install_packages ca-certificates

#
# Configure Mattermost
#
WORKDIR /mm

# Copy over files
ADD https://releases.mattermost.com/5.37.1/mattermost-team-5.37.1-linux-amd64.tar.gz .
RUN tar -zxvf ./mattermost-team-5.37.1-linux-amd64.tar.gz
ADD config_docker.json ./mattermost/config/config_docker.json
ADD docker-entry.sh .

RUN chmod +x ./docker-entry.sh
ENTRYPOINT ./docker-entry.sh

# Mattermost environment variables
ENV PATH="/mm/mattermost/bin:${PATH}"

# Create default storage directory
RUN mkdir ./mattermost-data
VOLUME /mm/mattermost-data

# Ports
EXPOSE 8065

4.起動スクリプト修正

起動時に実行されるスクリプト(docker-entry.sh)も修正する。
そのままではMySQLの起動を待ち続けてしまうので、これを無効化する。

#!/bin/bash
# Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.

#echo "Starting MySQL"
#/entrypoint.sh mysqld &

#until mysqladmin -hlocalhost -P3306 -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" processlist &> /dev/null; do
#	echo "MySQL still not ready, sleeping"
#	sleep 5
#done

echo "Updating CA certificates"
update-ca-certificates --fresh >/dev/null

echo "Starting platform"
cd mattermost
exec ./bin/mattermost --config=config/config_docker.json

5.ビルド

ささっとビルドしちゃいましょう。

podman build ./ -t mattermost_only:1.0.0

Docker Composeで起動

使用するイメージはMattermost本体は上記で作成済みのイメージ。
データベースはBitnami製PostgreSQL、リバースプロキシとしてHttpsPortalを使用する。
こいついっつもHttpsPortal使ってんな。

Bitnami製PostgreSQL

https://github.com/bitnami/containers/tree/main/bitnami/postgresql

HttpsPortal

https://github.com/SteveLTN/https-portal

説明

コンテナごとの解説。

https-portal

基本Redmineと同じなのでそちらを参照。
redmine

WEBSOCKET: true

WebSocketを有効にする。

postgresql

- POSTGRESQL_USERNAME=mm_user
- POSTGRESQL_PASSWORD=mm_password_1234
- POSTGRESQL_DATABASE=mattermost

Mattermost用のデータベース設定。
設定ファイルで設定したユーザー名・パスワード・データベース名を設定する。

mattermost

depends_on:
  - postgresql

postgresqlコンテナが起動してからmattermostコンテナを起動させる。

docker-compose.yml

version: '3.8'
services:
  https-portal:
    container_name: 'https-portal_container'
    image: 'steveltn/https-portal:1.16'
    restart: always
    ports:
      - '80:80'
      - '443:443'
    environment:
      DOMAINS: 'example.com -> http://mattermost:8065'
      STAGE: 'production' # Don't use production until staging works
      CLIENT_MAX_BODY_SIZE: 10M
      HSTS_MAX_AGE: 15768000
      WEBSOCKET: true
    volumes:
      - 'https-portal_data:/var/www/vhosts'
      - 'https-portal_log:/var/log/nginx'
      - 'https-portal_logrotate:/var/lib/logrotate'

  postgresql:
    container_name: 'postgresql_container'
    image: 'bitnami/postgresql:13.1.0'
    restart: always
    environment:
      - POSTGRESQL_USERNAME=mm_user
      - POSTGRESQL_PASSWORD=mm_password_1234
      - POSTGRESQL_DATABASE=mattermost
    volumes:
      - 'postgresql_data:/bitnami/postgresql'

  mattermost:
    container_name: 'mattermost_container'
    image: 'localhost/mattermost_only:1.0.0'
    restart: always
    volumes:
      - 'mattermost_data:/mm/mattermost-data'
    depends_on:
      - postgresql

volumes:
  https-portal_data:
    driver: local
  https-portal_log:
    driver: local
  https-portal_logrotate:
    driver: local
  postgresql_data:
    driver: local
  mattermost_data:
    driver: local

起動

起動後HttpsPortalで設定したドメインにアクセスして画面が表示されていれば完了。

mattermost_01.png


メインページに戻る

他の形式にエクスポート: PDF HTML TXT