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で設定したドメインにアクセスして画面が表示されていれば完了。