Ubuntu 16.04でMattermostをPostgreSQL+Nginxで構築

要点
- 対象: Ubuntu 16.04(64bit)、root 権限があること
- データベース: PostgreSQL を使用
- リバースプロキシ: Nginx(自己署名証明書での例)
- Mattermost を systemd で常時稼働させる方法を含む
重要: この手順は Mattermost 3.4.0 を例にしています。実運用では最新の Mattermost パッケージと最新の TLS 設定(TLS1.2 以上、弱い暗号の無効化)を使用してください。
前提条件
- Ubuntu 16.04 - 64bit
- root 権限(または sudo 権限)
準備チェックリスト
- SSH でサーバーに接続できること
- 公開ドメイン名を取得している(例: mattermost.example.com)
- DNS が設定済みでサーバーのパブリック IP を指していること
- セキュリティポリシーに基づく強力なパスワードを用意
ステップ1 - PostgreSQL のインストールと設定
Mattermost は MySQL と PostgreSQL の両方をサポートします。このチュートリアルでは PostgreSQL を使用します。サーバーに SSH ログインしてリポジトリを更新してください。
サーバーに接続してリポジトリを更新します。
ssh [email protected]
sudo apt-get update
root(または sudo)で PostgreSQL をインストールします。
sudo apt-get install postgresql postgresql-contrib
インストールが完了したら、postgres ユーザーに切り替えて psql シェルに入ります。
su - postgres
psql
postgres ユーザーのパスワードを変更します。
\password postgres
Enter new password:
次に、Mattermost 用のデータベースとユーザーを作成します。ここでは例としてデータベース名を “mattermostdb”、ユーザー名を “matteruser”、パスワードを “matterpassword” とします。実運用では必ず強力なパスワードに置き換えてください。
PostgreSQL の SQL クエリでデータベースとユーザーを作成します。
CREATE DATABASE mattermostdb;
CREATE USER matteruser WITH PASSWORD 'matterpassword';
作成したユーザーにデータベースの権限を付与して終了します。
GRANT ALL PRIVILEGES ON DATABASE mattermostdb TO matteruser;
\q
ノート: データベース名とユーザー名、パスワードは後の Mattermost 設定で使用します。パスワードは安全に保管してください。
ステップ2 - Mattermost のインストールと基本設定
Mattermost は通常の Linux ユーザーで実行します。ここでは専用ユーザー matter
を作成してそこにインストールします。
新しい Linux ユーザーを作成します。
useradd -m -s /bin/bash matter
passwd matter
matter
ユーザーに切り替えて、Mattermost のアーカイブをダウンロードします(この例では v3.4.0)。URL は公式リリースページで最新を確認してください。
su - matter
wget https://releases.mattermost.com/3.4.0/mattermost-3.4.0-linux-amd64.tar.gz
アーカイブを展開して、ディレクトリに入ります。
tar -xzvf mattermost-3.4.0-linux-amd64.tar.gz
cd mattermost/
ユーザーファイル用の data ディレクトリを作成し、設定ファイルを編集します。
mkdir data/
vim config/config.json
※ この時点で config/config.json 内の ServiceSettings と SqlSettings を編集します。
ServiceSettings の ListenAddress をローカルに設定します(Nginx の背後で動かすため)。
"ListenAddress": "127.0.0.1:8065",
次に SqlSettings を PostgreSQL 用に変更します(行番号は例示のため元ファイルと差が出る場合があります)。
"DriverName": "postgres",
"DataSource": "postgres://matteruser:[email protected]:5432/mattermostdb?sslmode=disable&connect_timeout=10",
Note:
- matteruser = PostgreSQL のユーザー名
- matterpassword = そのパスワード
- mattermostdb = 作成したデータベース名
保存して終了します。
動作確認のため、Mattermost のバイナリを実行してサーバーが起動するか確認します。
cd bin/
./platform
実行中は localhost の 8065 ポートでリッスンしているはずです。確認後、Ctrl+C で終了します。
ステップ3 - systemd サービスとして登録
常時稼働させるために systemd ユニットを作成します。
cd /etc/systemd/system/
vim mattermost.service
以下のユニットファイルを貼り付けます。
[Unit]
Description=Mattermost is an open source, self-hosted Slack-alternative
After=syslog.target network.target
[Service]
Type=simple
User=matter
Group=matter
ExecStart=/home/matter/mattermost/bin/platform
PrivateTmp=yes
WorkingDirectory=/home/matter/mattermost
Restart=always
RestartSec=30
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
保存して終了したら systemd をリロードし、サービスを開始します。
systemctl daemon-reload
systemctl start mattermost
エラーがないことを確認し、サービスが稼働しているか確認します。
netstat -plntu
systemctl status mattermost
運用メモ: サービスを自動起動させる場合は systemctl enable mattermost
を実行してください。
ステップ4 - Nginx のインストールとリバースプロキシ設定
Nginx をリバースプロキシとして設定し、外部からは標準の HTTP/HTTPS でアクセスできるようにします。
sudo apt-get install nginx
Nginx の設定ディレクトリに移動し、SSL 用のディレクトリを作成します(この例は自己署名証明書)。実運用では Let’s Encrypt などの正式な証明書を推奨します。
cd /etc/nginx/
mkdir ssl/; cd ssl/
OpenSSL で自己署名証明書を生成し、秘密鍵のパーミッションを設定します。
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/mattermost.crt -keyout /etc/nginx/ssl/mattermost.key
chmod 400 mattermost.key
Nginx の virtual host(サーバーブロック)を作成します。
cd /etc/nginx/sites-available/
vim mattermost
以下を貼り付け、mattermost.mydomain.com
をあなたのドメイン名に置き換えてください。
server {
listen 80;
server_name mattermost.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name mattermost.mydomain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/mattermost.crt;
ssl_certificate_key /etc/nginx/ssl/mattermost.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
location / {
gzip off;
proxy_set_header X-Forwarded-Ssl on;
client_max_body_size 50M;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_pass http://127.0.0.1:8065;
}
}
ドメイン名を自分のものに変更して保存します。
有効化のため sites-enabled にシンボリックリンクを作成します。
ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/
設定をテストして Nginx を再起動します。
nginx -t
systemctl restart nginx
運用アドバイス: 実運用では TLS 設定から TLSv1 および TLSv1.1 を無効化し、HSTS の活用や HTTP/2 の検討を行ってください。また、クライアント証明書を使った社内アクセス制御なども検討できます。
ステップ5 - 動作確認と初期セットアップ
ブラウザでドメインにアクセスします(例: https://mattermost.mydomain.com)。自動的に HTTPS にリダイレクトされるはずです。
最初にアカウントを作成します。「Create Account」をクリックしてアカウント作成を行ってください。
作成後、新しいチームの作成やシステムコンソールへのアクセスリンクが表示されます。
「Go to System Console」でシステムコンソールに入り、初期設定を行います。
「Create New Team」でチームを作成し、チーム名と URL を設定して完了してください。
作成するとチームダッシュボードとチャット画面が表示されます。
これで、Ubuntu 16.04 上に PostgreSQL と Nginx を用いた Mattermost の基本構成は完了です。
運用上の注意とセキュリティ強化
- TLS 設定: 自己署名証明書はテスト用途のみ。本番環境では Let’s Encrypt や商用 CA の証明書を使用する。
- TLS プロトコル: TLSv1 と TLSv1.1 は廃止し、TLS1.2 以上を有効にする。
- ファイアウォール: 外部からの 22, 80, 443 ポートのみ許可し、その他は制限する(例: UFW の利用)。
- バックアップ: PostgreSQL の定期的なバックアップと Mattermost の data ディレクトリのバックアップを検討する。
- アップデートポリシー: Mattermost と依存ソフトウェア(OS、PostgreSQL、Nginx)を定期的に更新する。
トラブルシューティング(よくある問題と対処)
- サービスが起動しない:
systemctl status mattermost
とjournalctl -u mattermost
を確認。権限やパスが正しいかチェック。 - Nginx 経由で接続できない:
nginx -t
で設定テスト、systemctl status nginx
、curl -v https://your-domain
でレスポンス確認。 - DB 接続エラー: config/config.json の DataSource の文字列(ユーザー、パス、ホスト、DB 名)を確認。PostgreSQL のリスニング設定やファイアウォールをチェック。
- アップロードに失敗する: Nginx の
client_max_body_size
と Mattermost の設定を確認。
役割別チェックリスト
- 管理者(Admin)
- システムコンソールにログインしてセキュリティ設定を確認
- チームとユーザーの初期設定を行う
- インフラ担当(DevOps)
- systemd ユニットの有効化と監視設定(Prometheus, systemd timers など)
- TLS 証明書の自動更新(Certbot など)の導入
- バックアップと復元手順の検証
- セキュリティ担当
- TLS 設定の監査
- 監査ログやアクセス制御の設定を確認
受け入れ基準
- ブラウザで https://
にアクセスして Mattermost のログインページが表示される - systemd サービスが有効で、再起動後も自動的に稼働する
- PostgreSQL に接続していることがログで確認できる
- 管理者アカウントでシステムコンソールへログインできる
ミニ手順(実行順の要約)
- サーバーを更新して PostgreSQL をインストール
- PostgreSQL に DB とユーザーを作成
- matter ユーザーを作成し Mattermost をダウンロード・展開
- config/config.json を編集して ListenAddress と DataSource を設定
- systemd ユニットを作成して Mattermost をデーモン化
- Nginx をインストールし SSL/リバースプロキシを設定
- ブラウザでアクセスしてアカウントとチームを作成
短い用語集
- Mattermost: オープンソースのチームメッセージングサーバー
- PostgreSQL: リレーショナルデータベース管理システム
- Nginx: 高性能な HTTP サーバー/リバースプロキシ
- systemd: Linux の init システムとサービスマネージャ
参考
- https://docs.mattermost.com/install/prod-ubuntu.html
- https://docs.mattermost.com/install/prod-debian.html
まとめ
このガイドでは、Ubuntu 16.04 上に Mattermost をインストールし、PostgreSQL と Nginx を組み合わせて安全に公開するまでの基本手順を示しました。実運用では TLS の強化、証明書自動更新、定期的なバックアップとアップデート計画を追加してください。問題が発生した場合は systemd ジャーナル、Nginx のログ、PostgreSQL のログを順に確認すると原因特定が迅速になります。