- ホーム
- マニュアル
- セットアップスクリプト
- Mattermost
Mattermostセットアップスクリプトを利用する
対象
1.Mattermostについて
1-1.Mattermostとは
Mattermostは、Slackの代替として注目されるオープンソースのビジネスチャットツールです。
セキュリティやカスタマイズ性に優れており、企業やチームでのコミュニケーションを円滑にするために、多くの機能を提供しています。
1-2.特徴
| 特徴 | 説明 |
|---|---|
| チャット+業務管理を統合 | チャットに加えて、タスク管理(Boards)や業務手順のテンプレート化(Playbooks)を標準搭載しています。 |
| 柔軟な通知設定 | メンションやキーワード、スレッドごとに通知の有無を細かく設定でき、必要な情報だけを受け取れます。 |
| 多言語対応 | 日本語を含む複数の言語に対応しており、ユーザーごとに表示言語を設定できます。 |
| マルチデバイス対応 | 専用アプリが提供されており、スマートフォンからでもアクセスできます。 |
1-3.活用例
| 活用例 | 説明 |
|---|---|
| プロジェクト単位の情報共有 | チャンネルをプロジェクトごとに分けて、進捗報告や資料共有を効率的に行えます。 |
| チームのタスク整理 | Boardsを使って、担当者や期限を明確にしたタスク管理を行い、作業の抜け漏れを防げます。 |
| 業務マニュアルの共有 | Playbooksで手順をまとめておき、メンバー全員が同じ流れで作業を進められるようにできます。 |
| チャット上での資料共有 | ファイルをそのまま投稿して、会話の中でスムーズにやり取りできます。 |
2.Mattermostセットアップスクリプトの利用手順
本手順ではサーバーを契約してMattermostの仮想マシンを構築することを前提とします。
既存のサーバーをMattermostに置き換える場合は、「OS再インストール」からMattermostのセットアップスクリプトを利用してください。
1.「お申し込み」をクリック
XServerアカウントへログインし、「お申し込み」をクリックしてください。

2.セットアップスクリプトを選択
「お申し込み」一覧の「VPS(Linux系サーバー)」をクリックしてください。

「OSを選択してインストール」をクリックし、対応する以下のOS・バージョンを選択してください。
その後、「セットアップスクリプト」から「Mattermost」を選択してください。

お申し込み・お支払いを完了することで、選択したスクリプトがサーバー構築時に自動実行されます。
本セットアップスクリプトで実行される処理は以下のとおりです。
スクリプトを表示
#Mattermost
set -euo pipefail
## Nginx
for i in {1..5}; do
DEBIAN_FRONTEND=noninteractive apt install -y nginx && break
[[ "$i" -eq 5 ]] && exit 1 || sleep 5
done
## wait for nginx install
for i in {1..10}; do
command -v nginx >/dev/null && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
systemctl --now enable nginx.service
rm -f /etc/nginx/sites-enabled/default
cat << 'EOF' > /etc/nginx/sites-available/mattermost.conf
upstream backend {
server localhost:8065;
keepalive 32;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;
server {
listen 80;
server_name localhost;
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
client_body_timeout 60;
send_timeout 300;
lingering_timeout 5;
proxy_connect_timeout 90;
proxy_send_timeout 300;
proxy_read_timeout 90s;
proxy_pass http://backend;
}
location / {
client_max_body_size 50M;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_cache mattermost_cache;
proxy_cache_revalidate on;
proxy_cache_min_uses 2;
proxy_cache_use_stale timeout;
proxy_cache_lock on;
proxy_http_version 1.1;
proxy_pass http://backend;
}
}
EOF
ln -s /etc/nginx/sites-available/mattermost.conf /etc/nginx/sites-enabled
systemctl reload nginx.service
## Postgre SQL
POSTGRES_VERSION=16
install -d /usr/share/postgresql-common/pgdg
curl -fL \
--retry 10 \
--retry-delay 5 \
--retry-connrefused \
--retry-all-errors \
-o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
. /etc/os-release
sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
for i in {1..5}; do
DEBIAN_FRONTEND=noninteractive apt update -y \
&& DEBIAN_FRONTEND=noninteractive apt install -y postgresql-${POSTGRES_VERSION} \
&& break
[[ "$i" -eq 5 ]] && exit 1 || sleep 5
done
## wait for postgresql install
for i in {1..10}; do
command -v psql >/dev/null && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
systemctl --now enable postgresql.service
PSQL_MATTERMOST_DB="mattermost"
PSQL_MATTERMOST_USER="mmuser"
PSQL_MATTERMOST_PASS=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1 || true`
PSQL_ROOT_PASS=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1 || true`
## wait for postgresql-connect succeed
for i in {1..10}; do
sudo -u postgres psql -c "select 1" >/dev/null 2>&1 && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
sudo -u postgres psql << EOF
CREATE DATABASE ${PSQL_MATTERMOST_DB} WITH ENCODING 'UTF8' LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' TEMPLATE=template0;
CREATE USER ${PSQL_MATTERMOST_USER} WITH PASSWORD '${PSQL_MATTERMOST_PASS}';
GRANT ALL PRIVILEGES ON DATABASE ${PSQL_MATTERMOST_DB} to ${PSQL_MATTERMOST_USER};
ALTER DATABASE ${PSQL_MATTERMOST_DB} OWNER TO ${PSQL_MATTERMOST_USER};
\c ${PSQL_MATTERMOST_DB}
ALTER SCHEMA public OWNER TO ${PSQL_MATTERMOST_USER};
GRANT USAGE, CREATE ON SCHEMA public TO ${PSQL_MATTERMOST_USER};
EOF
sudo -u postgres psql << EOF
ALTER USER postgres WITH PASSWORD '${PSQL_ROOT_PASS}';
EOF
## Mattermost
rm -f /usr/share/keyrings/mattermost-archive-keyring.gpg 2>/dev/null
curl -fsL \
--retry 10 \
--retry-delay 5 \
--retry-connrefused \
--retry-all-errors \
-o- https://deb.packages.mattermost.com/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/mattermost-archive-keyring.gpg > /dev/null
curl -fL \
--retry 10 \
--retry-delay 5 \
--retry-connrefused \
--retry-all-errors \
-o- https://deb.packages.mattermost.com/repo-setup.sh | bash -s mattermost
for i in {1..5}; do
DEBIAN_FRONTEND=noninteractive apt install mattermost -y && break
[[ "$i" -eq 5 ]] && exit 1 || sleep 5
done
for i in {1..10}; do
[[ -f /opt/mattermost/config/config.defaults.json ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
install -C -m 600 -o mattermost -g mattermost /opt/mattermost/config/config.defaults.json /opt/mattermost/config/config.json
sed -i "s|\"DataSource\": \"postgres://[^\"]*\"|\"DataSource\": \"postgres://${PSQL_MATTERMOST_USER}:${PSQL_MATTERMOST_PASS}@localhost/${PSQL_MATTERMOST_DB}?sslmode=disable\&connect_timeout=10\"|g" /opt/mattermost/config/config.json
systemctl --now enable mattermost
## Other
cat > /etc/motd <<EOF
================================================
Mattermost application
Setup URL: http://${IPADDR}/
PostgreSQL root password: ${PSQL_ROOT_PASS}
PostgreSQL Mattermost user name: ${PSQL_MATTERMOST_USER}
PostgreSQL Mattermost user pass: ${PSQL_MATTERMOST_PASS}
PostgreSQL Mattermost DB name: ${PSQL_MATTERMOST_DB}
To delete this message: rm -f /etc/motd
================================================
EOF
install -d /opt/auto_ssl
cat << 'EOF' > /opt/auto_ssl/setup.sh
#!/bin/bash
# check_arg
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <domain> <email>"
exit 1
fi
# parameter set
DOMAIN="$1"
EMAIL="$2"
NGINX_CONF="/etc/nginx/sites-available/mattermost.conf"
# install
apt install -y certbot python3-certbot-nginx
# Domain check
for i in {1..10}; do
curl -s -o /dev/null http://"${DOMAIN}"
if [[ $? -eq 0 ]]; then
break
fi
if [[ ${i} -lt 10 ]]; then
sleep 60
fi
done
# Config nginx
if ! grep -q "server_name $DOMAIN;" "$NGINX_CONF"; then
sed -i "s|server_name localhost;|server_name $DOMAIN;|g" "$NGINX_CONF"
echo "Added server_name $DOMAIN to $NGINX_CONF"
systemctl reload nginx
fi
# SSL cert
certbot --nginx -d "$DOMAIN" --agree-tos --email "$EMAIL" --non-interactive
if [[ $? -ne 0 ]]; then
echo "Certbot failed to get certificate." | logger -t certbot-error
exit 1
fi
# Config motd
if [ -f /etc/motd ]; then
sed -i -E "s|http://[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/|https://$DOMAIN/|g" /etc/motd
fi
EOF
# User Setting
id mattermost-ops >/dev/null 2>&1 || useradd -m -s /bin/bash mattermost-ops
3.事前準備
3-1.パケットフィルターの設定
Mattermostを利用するには、使用する機能に応じて、以下のポートを開放する必要があります。
必須ポートについては必ず開放し、任意ポートについては必要に応じて設定してください。
コントロールパネルの「パケットフィルター設定」画面から、該当のポートを許可するルールを追加してください。
必須ポート
| 用途 | ポート番号 | 目的 |
|---|---|---|
| HTTP | TCP 80 |
Webブラウザやアプリにて非暗号化通信でアクセスするため。 ※Let's EncryptでSSL/TLSを設定する場合、SSL証明書の取得・更新に使用します |
| HTTPS | TCP 443 | Webブラウザやアプリにて暗号化通信でアクセスするため。 |
任意ポート
| 用途 | ポート番号 | 目的 |
|---|---|---|
| SSH | TCP 22 | Tera TermなどのSSHクライアントを使ってサーバーに接続する場合。 |
パケットフィルターの設定は下記マニュアルからご確認ください。
パケットフィルターの設定について
3-2.セットアップURLにアクセス
4.Mattermostセットアップ手順
本手順では、SSL/TLSによる暗号化通信(HTTPS)の利用を前提とした接続手順を案内しています。
4-1.Mattermostセットアップ
1.管理者アカウントの作成
「https://<指定したドメイン>/」から管理者アカウントを作成してください。
※管理者アカウントの作成が完了するまでは、パケットフィルターでHTTP/HTTPSの接続元を作業端末のグローバルIPアドレスに制限してください。

2.組織名を入力
「Organization name」に組織名を入力して「Continue」をクリックしてください。

3.ツールの追加
ビジネスツールと連携することができます。
連携するツールを選択して「Continue」をクリック、連携しない場合は「Skip」をクリックしてください。
※後から連携することも可能です。

4.招待リンクのコピー
「Copy Link」をクリックで、メンバーを招待するためのリンクをコピーできます。
「Finish setup」をクリックし、セットアップ完了です。

5.作成完了
チームが作成され、チャット画面が表示されます。

以上でMattermostのセットアップは完了です。
4-2.言語を日本語に設定する方法
1.アカウント設定を開く
右上の歯車マークの「Account Settings」をクリックしてください。

2.「Language」を編集
「Display」をクリックして、「Language」の「Edit」をクリックしてください。

3.日本語に設定
プルダウンから「日本語」を選択してください。
「Save」をクリックすると日本語に設定ができます。

4-3.SSL/TLS設定
本手順を実施することで、通信を暗号化するSSL/TLSの設定を行うことができます。
セットアップスクリプト実行時に「/opt/auto_ssl/setup.sh」が配置されます。
ドメインとメールアドレスを指定して実行すると、Let's EncryptによるSSL設定が可能です。
bash /opt/auto_ssl/setup.sh <ドメイン> <メールアドレス>
※「<ドメイン>」「<メールアドレス>」には、AレコードにVPSのIPアドレスを設定したドメインと、証明書取得用のメールアドレスを指定してください。
ユーザー数が200名以上の場合は、NginxでSSLを設定することが推奨されます。
詳細は公式ドキュメントをご確認ください。
Mattermostの管理画面からLet's Encryptを設定する場合は、以下の手順でも設定できます。
1.「システムコンソール」を開く
画面左上のメニューボタンから「システムコンソール」を選択します。

2.設定値を入力
メニューからウェブサーバーを選択して、設定値を入力します。
| 項目 | 設定する値 |
|---|---|
| サイトURL | https://[ドメイン名] |
| 接続待ちアドレス | :443 |
| ポート80を443へ転送する | 有効 |
| 接続のセキュリティー | TLS |
| TLS証明書ファイル | 空欄 |
| TLS鍵ファイル | 空欄 |
| Let's Encryptを使用する | 有効 |

3.設定を保存
設定値を入力したら「保存する」を選択します。

4.コマンドを実行
VPSに「SSH」、または「コンソール」からログインし、下記コマンドを1行ずつ実行してください。
systemctl stop nginx
systemctl disable nginx
setcap cap_net_bind_service=+ep /opt/mattermost/bin/mattermost
systemctl restart mattermost.service
実行完了後、ドメイン名での初回アクセス時に証明書が取得されます。
Webブラウザから「https://[ドメイン名]」でアクセスしてください。
ChromeでSSL設定後の初回アクセス時にエラーが出た場合は一度ブラウザを再起動してからアクセスしてください。
4-4.mmctlによる運用操作
Mattermostでは、「mmctl」を使用してユーザー、チーム、チャンネルなどの管理操作をコマンドラインから実行できます。
1.運用ユーザーへの切り替え
VPSへ「SSH」でログイン後、以下のコマンドで運用ユーザー「mattermost-ops」に切り替えてください。
su - mattermost-ops
2.Mattermostへのログイン
運用ユーザー「mattermost-ops」へ切り替えた後、作成済みのMattermostアカウントでログインしてください。
mmctl auth login http://<VPSのIPアドレス>
※SSL/TLS設定後は、「https://<ドメイン名>」を指定してください。
以下の項目を対話形式で入力します。
| 項目 | 説明 |
|---|---|
| Connection name | 接続先を識別できる任意の名前 |
| Username | Mattermostのアカウント名 |
| Password | Mattermostのアカウントパスワード |
「Connection name」の入力例は以下のとおりです。
Connection name: xvps-mattermost
3.ログイン確認
ログインに成功すると、接続情報が保存された旨のメッセージが表示されます。
保存された接続情報は、以下のコマンドで確認できます。
mmctl auth list
以降、「mmctl」を使用してMattermostの各種管理操作を実行できます。
チーム一覧を表示する場合
mmctl team list
チャンネル一覧を表示する場合
指定したチームに所属するチャンネル一覧を表示します。
mmctl channel list <チーム名>
ユーザー一覧を表示する場合
mmctl user list
コマンドのヘルプを表示する場合
mmctl --help
サブコマンドごとのヘルプも確認できます。
mmctl team --help mmctl channel --help mmctl user --help
その他の「mmctl」コマンドについては、Mattermost公式マニュアルをご参照ください。
4.保存した接続情報の削除
最初に接続名を確認します。
mmctl auth list
保存した接続情報を削除します。
mmctl auth delete <Connection name>
実行例は以下のとおりです。
mmctl auth delete xvps-mattermost
5.SSH接続の終了
「su - mattermost-ops」で運用ユーザーに切り替えた場合は、最初の「exit」で元のユーザーへ戻り、次の「exit」でSSH接続を終了します。
mattermost-ops@x:~$ exit logout root@x:~# exit logout
以上でmmctlによる運用操作は完了です。
5.その他詳細情報
その他の詳細についてはMattermost公式ガイドからご確認ください。


