Mattermost を Debian 12 にインストールする方法
このチュートリアルはこれらの OS バージョン用に存在します
- Debian 12 (本の虫)
- Debian 11 (ブルズアイ)
- Debian 10 (バスター)
このページでは
- 前提条件
- 依存関係のインストール
- PostgreSQL ユーザーとデータベースのセットアップ
- Mattermost のインストール
- Mattermost の systemd サービスの作成
- Nginx をリバース プロキシとして構成する
- Mattermost で最初のワークスペースを作成する
- 結論
Mattermost は、Slack や Microsoft Teams に代わるオープンソースのツールです。オンライン チャットをセルフホストできるほか、ファイル共有、検索、自動化、多数のサードパーティ統合などの多くの機能を提供します。
Mattermost は、組織や企業の内部チャットとして設計されたコラボレーション プラットフォームです。メッセージング システム、自動化、統合、セキュリティを組み合わせて、重要なワークフローを実現します。
このガイドでは、Mattermost を Debian 12 サーバーにインストールする方法を説明します。 Mattermost を PostgreSQL と Nginx とともにインストールし、Mattermost を SSL 証明書で保護します。
前提条件
このガイドを始めるには、次のものが揃っていることを確認してください。
- Debian 12 サーバー
- 管理者権限を持つ非 root ユーザー
- ドメイン名の準備が完了し、サーバーの IP アドレスを指すようになりました。
依存関係のインストール
Mattermost をインストールする前に、Mattermost の依存関係をインストールする必要があります。これには、PostgreSQL データベース サーバー、Nginx Web サーバー、および Certbot が含まれます。
まず、次のコマンドを実行して、Debian パッケージのインデックスを更新します。
sudo apt update
次に、以下の 'apt' コマンドを使用して、PostgreSQL、Nginx、Certbot、Gnupg、curl などの依存関係をインストールします。 「Y」を入力してインストールを確認します。
sudo apt install postgresql postgresql-contrib nginx certbot gnupg curl
インストールが完了したら、「systemctl」コマンドを使用して PostgreSQL サービスのステータスを確認します。システム上で PostgreSQL が実行されていることがわかります。
sudo systemctl is-enabled postgresql
sudo systemctl status PostgreSQL
最後に、以下のコマンドを使用して Nginx サービスのステータスを確認します。 Nginx サービスが Debian システム上で稼働している必要があります。
sudo systemctl is-enabled nginx
sudo systemctl status nginx
PostgreSQL ユーザーとデータベースのセットアップ
依存関係がインストールされたら、Mattermost の新しいデータベースとユーザーを作成します。このために、PostgreSQL サーバーのインストール時にデフォルトでインストールされる PostgreSQL シェル「psql」を利用します。
以下の「psql」コマンドを使用して PostgreSQL にログインします。
sudo -u postgres psql
次に、次のクエリを実行して、新しいデータベースとユーザー「mattermost」、パスワード「password」を作成します。
CREATE DATABASE mattermost;
CREATE USER mmuser WITH PASSWORD 'password';
GRANT ALL ON DATABASE mattermost TO mmuser;
ALTER DATABASE mattermost OWNER TO mmuser;
GRANT USAGE, CREATE ON SCHEMA PUBLIC TO mmuser;
次に、次のようにして、PostgreSQL サーバー内のデータベースとユーザーのリストを確認します。
\l
\du
以下では、データベースとユーザー「mattermost」が作成されていることがわかります。
「quit」と入力して「psql」シェルを終了します。
新しい PostgreSQL ユーザーとデータベースを作成したら、PostgreSQL ユーザーを検証して、PostgreSQL サーバーにログインできることを確認します。
次に、以下の「psql」コマンドを実行して、ユーザー「mattermost」で PostgreSQL サーバーにログインします。プロンプトが表示されたら、パスワードを入力します。
sudo -u postgres psql --host=localhost --dbname=mattermost --username=mmuser --password
ログインしたら、次のクエリを使用して接続を確認します。
\conninfo
次のように PostgreSQL への接続ステータスが表示されます。
Mattermost のインストール
この時点で、サーバーは Mattermost をインストールする準備ができています。次に、Mattermost ソース コードをダウンロードし、インストール ディレクトリを設定し、PostgreSQL で Mattermost を構成し、Mattermost ドメイン名を設定して、Mattermost インストール ディレクトリの適切な権限と所有権を設定します。
Mattermost をダウンロードする前に、次のように新しいシステム ユーザー「mattermost」を追加します。
sudo useradd --system --user-group mattermost
次に、次の「wget」コマンドを実行して Mattermost をダウンロードし、以下の「tar」コマンドを使用して抽出します。 Mattermost サーバーは、「mattermost」 ディレクトリで利用可能になります。
wget https://releases.mattermost.com/10.0.1/mattermost-10.0.1-linux-amd64.tar.gz
tar -xf mattermost-10.0.1-linux-amd64.tar.gz
次に、次のようにして「mattermost」ディレクトリを「/opt」に移動します。したがって、Mattermost インストール ディレクトリは「/opt/mattermost」で利用可能になります。
mv mattermost /opt/
次に、新しいデータ ディレクトリ '/opt/mattermost/data' を作成します。これはユーザーデータの保存に使用されます。
sudo mkdir -p /opt/mattermost/data
次に、デフォルトの Mattermost 構成「/opt/mattermost/config/config.json」を「nano」エディタで開きます。
sudo nano /opt/mattermost/config/config.json
「SiteURL」を「https://mattermost.howtoforge.local」などのドメイン名に変更します。
"ServiceSettings": {
"SiteURL": "https://mattermost.howtoforge.local",
「SqlSettings」 セクションと 「DataSource」 セクション内で、次のような詳細情報を使用してデータベース資格情報を変更します。
"SqlSettings": {
"DriverName": "postgres",
"DataSource": "postgres://mattermost:password@localhost/mattermost?sslmode=disable&connect_timeout=10&binary_parameters=yes",
ファイルを保存してエディタを終了します。
最後に、以下のコマンドを実行して、「/opt/mattermost」ディレクトリの所有権をユーザー「mattermost」に変更します。また、グループ「mattermost」が「/opt/mattermost」ディレクトリに書き込みできることを確認してください。
sudo chown -R mattermost:mattermost /opt/mattermost
sudo chmod -R g+w /opt/mattermost
Mattermost の systemd サービスの作成
このセクションでは、Mattermost 用の新しい systemd サービス ファイルを作成します。これにより、Mattermost がバックグラウンドで実行されるようになり、「systemctl」ユーティリティを使用して Mattermost プロセスを簡単に管理できるようになります。
「nano」エディターを使用して、新しい systemd サービス ファイル「/etc/systemd/system/mattermost.service」を作成します。
sudo nano /etc/systemd/system/mattermost.service
次の構成をファイルに挿入します。
[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
BindsTo=postgresql.service
[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
ファイルを保存してエディタを終了します。
次に、以下の「systemctl」コマンドを実行して、systemd マネージャーをリロードします。
sudo systemctl daemon-reload
最後に、次のコマンドを使用して、「mattermost」サービスを開始、有効化、確認できます。
sudo systemctl enable --now mattermost
sudo systemctl status mattermost
以下に示すように、「mattermost」サービスが実行されており、有効になっています。
Nginx をリバース プロキシとして構成する
この時点で、Mattermost は Debian 12 サーバー上で実行されています。このセクションでは、Letsencrypt から SSL 証明書を生成し、Mattermost のリバース プロキシとして使用される新しい Nginx サーバー ブロックを作成します。
Nginx を構成する前に、以下のコマンドを実行して Nginx サービスを停止し、Mattermost の SSL 証明書を生成します。必ずドメイン名とメールアドレスをご自身の情報に変更してください。
sudo systemctl stop nginx
sudo certbot --certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d mattermost.howtoforge.local
プロセスが完了すると、SSL/ 証明書が「/etc/letsencrypt/live/mattermost.howtoforge.local」ディレクトリで利用できるようになります。
次に、デフォルトの Nginx 設定「/etc/nginx/nginx.conf」を「nano」エディタで開きます。
sudo nano /etc/nginx/nginx.conf
「/etc/nginx/nginx.conf」行の前に次の設定を追加します。
server_names_hash_bucket_size 64;
include /etc/nginx/conf.d/*.conf;
ファイルを保存して終了します。
次に、「nano」エディターを使用して、新しい Nginx サーバー ブロック構成「/etc/nginx/sites-available/mattermost」を作成します。
sudo nano /etc/nginx/sites-available/mattermost
以下の構成を挿入し、「server_name」オプションを必ずドメイン名に変更してください。また、SSL証明書のパスも必ず調整してください。
upstream backend {
server 127.0.0.1:8065;
keepalive 32;
}
server {
listen 80;
server_name mattermost.howtoforge.local;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mattermost.howtoforge.local;
http2_push_preload on; # Enable HTTP/2 Server Push
ssl_certificate /etc/letsencrypt/live/mattermost.howtoforge.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mattermost.howtoforge.local/privkey.pem;
ssl_session_timeout 1d;
# Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
ssl_protocols TLSv1.2 TLSv1.3;
# Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
# prevent replay attacks.
#
# @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
ssl_early_data on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = six months)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
add_header X-Early-Data $tls1_3_early_data;
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 $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 60s;
send_timeout 300s;
lingering_timeout 5s;
proxy_connect_timeout 90s;
proxy_send_timeout 300s;
proxy_read_timeout 90s;
proxy_http_version 1.1;
proxy_pass http://backend;
}
location / {
client_max_body_size 100M;
proxy_set_header Connection "";
proxy_set_header Host $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_http_version 1.1;
proxy_pass http://backend;
}
}
# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the '$ssl_early_data' variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
"~." $ssl_early_data;
default "";
}
完了したら、ファイルを保存してエディタを終了します。
ここで、mattermost の Nginx サーバー ブロックをアクティブ化し、Nginx 構文を確認します。構文が正しい場合は、「構文は問題ありません - テストは成功しました」という出力が表示されます。
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/
sudo nginx -t
最後に、以下の `systemctl` コマンドを実行して Nginx サービスを再起動し、変更を適用します。これにより、Mattermost は Nginx リバース プロキシの下で実行されるようになります。
sudo systemctl restart nginx
Mattermost で最初のワークスペースを作成する
Web ブラウザを開いて、https://mattermost.howtoforge.local にアクセスします。インストールが成功すると、Mattermost の新しい管理者を作成するように求められます。
新しい管理者ユーザー、メールアドレス、パスワードを入力し、[アカウントの作成] をクリックします。
組織名を入力し、[続行] をクリックします。
GitHub、Gitlab、Jira、または Zoom との統合については、必要に応じて選択します。そして、もう一度 [続行] をクリックします。
[セットアップを完了] をクリックして設定を完了します。
プロセスが完了すると、次のような Mattermost ダッシュボードが表示されます。
結論
おめでとう! Debian 12 サーバーへの Mattermost のインストールが完了しました。これで、データベースとして PostgreSQL、リバース プロキシとして Nginx を使用して Mattermost が稼働しています。最後に、Certbot と Letsencrypt を通じて、Mattermost を HTTPS で保護しました。次のステップでは、Mattermost インストールに SMTP サーバーを追加して、電子メール通知を許可する必要がある場合があります。さらに、Mattermost をサードパーティのアプリケーションと統合することもできます。