Slack代替 チャット会議ツール Mattermost をさくらVPSにCentOS7で構築する全手順

未分類

 

Slackって便利ですよね。でも高いですよね。

現在1人あたり$7.25かかるので全社員で導入することはかなりハードルが高いです。

そこでSlackの代替となるサービスであるMattermostとその構築方法をご紹介します。

 

Mattermostを使えばレンタルサーバ代とドメイン代しか要らないので費用を何十分の1以下に抑えることが可能です。

費用対効果、構築手順、運用方法、社内に浸透させるのに苦労した点、その方法など、私が構築した体験談を記事にしました。

動くことは確認しておりますが、未来永劫動き続けるかどうかはお約束できません。やる場合は自己責任でお願いします。

 

  1. Slackについて
    1. Slackとは?
    2. どうやって使うの?
    3. 費用は?
    4. フリーで使い続けるのはダメなの?
    5. 何がメリットなの?
    6. 有料を検討するにおいて
  2. Slackを会議そのものに使う
    1. 会議日程の折り合いがつかない
    2. チャットで会議できない古い組織
  3. Mattermostとは
    1. Mattermostの費用は?
  4. さくらVPSサーバ構築
    1. さくらインターネット会員登録
    2. さくらVPSサーバを契約する
    3. さくらVPSコンソールからサーバの設定をする
  5. サーバ設定1/2 – MySQLやMattermostなど
    1. SSHでサーバにアクセスする
    2. パッケージのアップデート
    3. MySQLのインストールと設定
    4. MySQLにrootでログインする
    5. データベースの作成
    6. 権限変更を反映する
    7. SQLを抜ける
    8. (任意です)パスワードポリシー変更
    9. MySQL設定ファイルを開く
    10. 以下2行を追記して保存
    11. MySQLを再起動
    12. Mattermostをダウンロード
  6. 一旦まとめ
  7. お名前.comでドメイン取得&DNS登録
    1. ドメイン選択と会員登録
    2. DNSサーバの設定
  8. サーバ設定2/2 – NginxとLet’sEncrypt
    1. Nginxのインストールと設定
    2. HTTPサーバにhttpでアクセス
    3. Let’s Encryptの導入
    4. リバースプロキシ設定
    5. 再度HTTPサーバにhttpsでアクセス
  9. Mattermostの設定
    1. アカウント作成
    2. チームを作成
    3. 自分のアカウントの言語設定
    4. システムコンソールから各種設定
    5. 文字検索ができるようにする
    6. メール設定
    7. メールの通知に関する設定
  10. 最終設定
    1. パケットフィルタの8065を閉じます
    2. サーバを再起動する
    3. そもそも基本的なサーバ設定は大丈夫か確認しておきました
  11. 運用について
    1. アカウント作成
    2. プロフィール設定
    3. ダイレクトメッセージ設定
  12. サーバのバージョンアップ
    1. ファイルアップロード上限を200MBにする
  13. やってみたこと
    1. セッションの破棄
  14. エラー報告
    1. 招待リンクを踏めば不正と赤く表示される 23/03/29
    2. ログに2分間隔でエラー

Slackについて

Slackとは?

スラックと呼びます。スラックは社員同士でコミュニケーションとるチャットツールです。どういったものかを説明するにはLINE(ライン)を思い浮かべていただくのが一番ですが、Slackはどちらかというと個人間よりもグループでの会話を主とします。

企業におけるグループ間の会話は、立場は違えど同じ共通目的があり、テーマやトピックを持ち寄る、つまり会議のようなものです。

そうです。このスラックは会議ツールとしても推奨されています。そしてメールに代わるコミュニケーションツールなのです。

 

どうやって使うの?

詳細は割愛させていただきますが、Slackで検索すればslack.comのページが出てきます。Slack社が提供しているサービスをインターネット経由で利用する感覚です。

 

費用は?

複数プランがあってフリープランなら無料で使えます。ただ投稿したメッセージは90日を超えると見れなくなります。

データが消えるのではなく見えなくなるだけで、有料プランに入れば見れるようになります。うーん、Slack姑息!

有料プランは安いプランで月額$7.25です。2023年5月現在は137円なので993円、およそ一人あたり月1,000円かかる計算になります。

社員分だとかなりの金額になるのでキツイですよね。

 

フリーで使い続けるのはダメなの?

ズバリ90日でメッセージが消えることが足枷です。フリープランでも人数の制限はないようなので、電話メモや突発的な質疑であるならこと足りると思います。

しかし上記で触れたように会議ツールとして使うならば、重要な投稿や画像や資料が90日で消えたら困ります。私の勤める会社でも重要プロジェクトで使おうという話になりましたが、やはり投稿した内容が消えるという理由で使わなくなりました。

 

何がメリットなの?

従来のコミュニケーションツールはメールだったと思います。メールはどうしてもメンバー全員への周知が難しく、その手間もかかります。

たとえ話で説明すると、全国に10の部署がありその長にAさん~Jさんがいます。10部署なので計10人です。

  1. Aさんが週報(1週間の報告)を書きました
  2. B~Jさんの9人+社長の計10人に週報をメールで送信しました
  3. 社長がAさんの週報を読み、Aさんにアドバイスを返信しました
  4. Aさんは社長の返信を受け取り、お礼のメールをしました
  5. Aさんは社長のアドバイスを今後に生かせそうです。

現在でも我が社でやっている運用ですが、これは大きな問題があります。

そうです、Aさんと社長のやり取りはB~Jさんは知らないことです。

社長のアドバイスがB~Jさんに役に立つとは思えなくとも、情報共有という観点から知っておいて損はありません。しかし、この運用は完全な一方通なので共有は一切ありません。

ひと昔前はメーリングリストがありましたが、それだとメールが増殖しますし、正直ウザったいです。

 

これがグループLINEならどうでしょう。Aさんの投稿に対する返信が誰からあっても即座に全員が共有できます。また、メールのようにファイルが増殖することもありません。それがチャットという仕組みです。

ハッキリ言ってSlackのようなチャットツールの登場で、現代人は「メールの時代は終わった」と認識するべきだと思います。

 

有料を検討するにおいて

我が社のようにハナから有料を検討しない、ソシャゲにびた一文課金しないような会社でない限りは、普通は費用対効果を考えます。

メールの時代は終わったと申しました。あくまで社内だけの話ですが、全ての企業は「メールに代わる何らかの社内コミュニケーションツールを導入すべき」だと考えます。今どきメールを使うのは酷すぎます。もう昭和や平成ではありません、令和ですから。

つまりでは有料導入にいくらかかるのかというと、社員もしくは参加者の人数にもよりますが、月額1人あたり約1,000円なら300人だと30万円になります。これが毎月経費として飛んでいきます。なかなか厳しいですよね。20人程度の会社ならともかく人数が多い企業になると負担はかなり大きくなります。

そこを費用対効果で考えると、私の会社ではNGということでした。

だから私の会社ではいまだにメールでやっています。心底情けない会社です。

 

Slackを会議そのものに使う

ところどころで自分の会社をディスってますが、そんな我が社もZOOMは使うようになりました。まさかの有料課金です。我が社のようなドケチな会社でもZOOMだけは課金したので、ZOOMの株は買いだなと思いました。

ZOOMを使うことで距離の問題が解決し、出張費は大幅に軽減できましたが、依然として以下のような問題点があります。

 

会議日程の折り合いがつかない

私の会社で実際にあったやりとりです。ZOOMで定例会をやりましょうということで、都合がいい日を募ったのです。

上記は一部会話の抜粋ですが、こんな不毛なやり取りを数日かけてやっているのです。議論すべき議題があるはずなのに、いつまで経っても会議すら始まりません。

3月7日に案内をかけて結局会議をやったのが3月28日でした。「そんな1ヶ月近く放置していい会議ならやらなくていいのでは?」と本気で投稿してやろうと思いました。

 

チャットで会議できない古い組織

冒頭でも申しましたがSlackは会議ツールです。Slackは双方向のコミュニケーションツールなのですから、それをそのまま会議に使えばいいのです。

議題でも問題でも質問でもトピックでも何でもいいです。投稿すれば会議スタート、議論スタートです。要領はグループLINEと同じです。答えられる人が答えればいいだけです。

時間が合わずにSlackを見れない人は後で見ればいいだけです。誰も取り残されませんし取り残しません。後で招集されたメンバーも過去の打ち合わせを見ることができます。

明らかにメリットしかないSlackを使った会議ですが、やらないのですね。

  • 顔を合わせないと雰囲気が掴めない
  • 90日で消えても構わない(むしろ過去の投稿は消えてほしい)
  • 会話対象を絞りたいのでグループでなく1対1が望ましいこともある

など、言い出したら屁理屈ばっかりの変人奇人揃いの我が社。こういう連中を徹底論破してやってもいいのですが、結局使ってもらわなければ意味がない。そして、やはりコストがかかる話を通すには利用率が高くないといけないのです。

ということで、Mattermostという代替案を探る試行錯誤が始まりました。

 

Mattermostとは

マターモーストと呼びます。Slackと全く同じインターフェースでSlackとまったく同じ使い勝手のチャットツールです。

Mattermostの費用は?

オープンソースのためソフト自体の費用はかかりません。

レンタルサーバとドメインの費用はかかりますが、ゴミみたいな額です。

また、自社にLinuxサーバに構築するのであれば0円でいけるはずです。

今回はレンタルサーバとドメインを取得する手順でご説明します。

 

今後の変更により手順と異なる点があったとしても、内容をよく理解して進めてください。

尚、運用する上で弊社では問題ありませんでしたが、構築運用するにあたって本手順に従って発生した損失は当方一切責任を負えません。あくまで自己責任かつご自身で対応できる方のみご了承ください。

 

さくらVPSサーバ構築

さくらインターネット会員登録

まずは会員登録から行います。すでに利用されている方や登録済の方は軽く読む程度にして飛ばしてください。

  1. さくらインターネットのホームページを開く
  2. 上のメニューにある「会員ログイン」をクリックする
  3. 「新規会員登録」をクリックする
  4. 自分のメールアドレスを入力し、個人情報・・にチェックを入れる
  5. 「会員登録のご案内メールを送信」をクリック
  6. メールが届くので自分のメールを確認する
  7. URLと書かれたところのリンクをクリックする(エラーになる場合はアドレスをコピペする)
  8. さくらインターネット会員登録の画面が表示されるので入力していく
    1. 契約者種別、氏名、生年月日、郵便番号、住所、電話番号を入力する
    2. パスワードはこちらが決めたものを入力する(なるべく厳重に)
  9. 「確認画面へ進む」をクリック
  10. 会員登録を完了させる。

以上です。後は必要な事項が書かれたメールが複数飛んでくると思います。それをもとに進めます。設定するパスワードは超重要なので使いまわしや推測されやすいものは避けることをお勧めします。

 

さくらVPSサーバを契約する

会員登録が済んだのでサーバの契約です。VPSサーバを契約します。

  1. 「さくらVPS」で検索しさくらVPSのページを開く
  2. 「お申し込み」をクリックする
  3. サーバー作成、サーバの設定から選択していく
    1. OSは、CentOS 7 x86_64を選択
    2. サーバのプランは、2GB以上を選択
    3. ストレージを大容量SSDにアップグレードするにチェック(任意)
    4. リージョンは好きなところを選択
    5. 管理ユーザのパスワードをメモに控えておく(必須!)
    6. サーバの名前は用途を明記しておくほうがベター(例 Mattermost用CentOS7)
    7. 「お支払い方法選択へ」をクリック
  4. さくらインターネット会員認証が表示されるのでIDとパスワードでログインする
  5. お支払い方法を入力する、2週間お試しも念のため「利用する」にチェック
  6. 「お支払いを確認する」をクリックして契約完了させる

★ OSはCentOS7を選んでください。CentOS7以外では本手順書は動作しませんのでご注意下さい。

★ サーバのプランは2GB以上をお勧めします。ウェブアプリケーションの部類に入りますし、データを貯めるアプリなので予算が許す限りストレージ容量が大きいプランがいいと思います。後からストレージを追加するのは高い上、設定が難しいです。

★ 大容量SSDのオプションは任意ですが、初期費用だけで容量倍ならチェックするべきと考えます。

★ リージョンはサーバの場所です。違いはプロトコル、帯域幅、VPNゲートウェイ、料金など色々ありますが一番安い石狩でも問題ないと思います。

 

さくらVPSコンソールからサーバの設定をする

少しだけですが設定をします。

  1. さくらVPSコンソールにログインする
  2. 契約したサーバをクリックする
  3. 基本情報タブにあるIPアドレス(IPv4)をメモに控えておく
  4. タブの「パケットフィルター設定」をクリックする
  5. 「パケットフィルタを設定」をボタンをクリックする
  6. 「パケットフィルタ設定を追加する」をクリックする
    1. Web(80/443)を追加する
    2. カスタムからMattermost用ポートTCP8065を追加する
  7. 「設定を保存する」をクリックして完了

TCP8065へはTCP80/443からリバースプロキシ経由でアクセスするので開けなくてもOKですが、一旦接続テストをしたいので今だけ開けておきます。

 

サーバ設定1/2 – MySQLやMattermostなど

SSHでサーバにアクセスし、パッケージのアップデート、MySQLやMattermostのインストールと設定、接続テストを行います。

SSHでサーバにアクセスする

  1. WindowsならTeraterm、MacならTerminalを開く
  2. IDはroot、IPアドレスは控えたものを入力する(Macならssh root@IPアドレス)
  3. パスワードはメモしたパスワードを入力してログイン

SHAだとか鍵だとか言われたら続行かYesで進んでください。

 

パッケージのアップデート

インストールされたパッケージを最新のものにアップデートします。

yum -y update

Complete確認!が表示されたらOKです。

 

MySQLのインストールと設定

リポジトリのインストール

yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

GPGキーインストール

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

mySQLインストール

yum -y install mysql-community-server

Complete!確認

MySQLを起動する

systemctl start mysqld

MySQLを自動起動するように設定しておく

systemctl enable mysqld

下記コマンドでMySQLのrootパスワードを確認します

grep password /var/log/mysqld.log

MySQL8は初期のrootパスワードがランダムで決められ、それを見るためには上記で確認する必要があります。確認したパスワードはすぐ使うのでメモしておいてください。

MySQLのrootパスワードを変更する

mysql_secure_installation --use-default

MySQL8は初期パスワードを変更しなければ使えない掟があるみたいなので、上記コマンドで初期設定します。上記で調べた初期パスワードを入力し新パスワードを設定します。簡単なパスワードは弾かれるので、初期パスワードに何か1文字追加して作ればいいと思います。うまくいけばAll done!と表示されます。

 

MySQLにrootでログインする

mysql -u root -p

 

データベースの作成

CREATE DATABASE mattermost;

データベース名は任意ですがMattermostにしておいてください。成功すれば、Query OK, 1 row affectedと表示される

 

権限変更を反映する

FLUSH PRIVILEGES;

成功すれば、Query OK, 0 row affectedと表示されます。

 

SQLを抜ける

quit

Byeと表示されてLinuxのrootに戻る。

 

(任意です)パスワードポリシー変更

デフォルトのパスワードポリシーは「大文字・小文字・数字・記号の全てを含み、8文字以上」と非常に厳格です。任意ですがパスワードポリシーを変更することで緩くできますが、基本的にやらないほうがいいです。

 

MySQL設定ファイルを開く

vi /etc/my.cnf

 

以下2行を追記して保存

validate_password.policy=LOW
validate_password.length=4

保存は「:wq」で。

policy=LOWは自由な文字が入力可能なります。length=4は4文字以上という意味です。

 

MySQLを再起動

systemctl restart mysql

ちなみに設定値は下記コマンドで見ることができます。

show variables like 'validate_password%'

 

Mattermostをダウンロード

カレントディレクトリにMatterMostをダウンロードします。

wget https://releases.mattermost.com/7.9.1/mattermost-team-7.9.1-linux-amd64.tar.gz

MattermostのバージョンはHPを確認して最新の数字を入れてください。私のときは7.9.1でした。teamという文字はTeamEditionという無償版を示します。teamという文字を入れなければEnterpriseEditionという有償版が入るそうですが、課金部分は使えないだけなので普通に使えるらしいです。ここは素直にTeamEditionを入れておきましょう。

ダウンロードした圧縮されたmattermostを同じディレクトリに解凍展開

tar -xvzf mattermost-team-7.9.1-linux-amd64.tar.gz

7.9.1は私がダウンロードしたバージョンです。カレントディレクトリにダウンロードされたファイル名を指定してください。

mattermostディレクトリ一式を/optに移動

mv mattermost /opt

dataディレクトリを作成

mkdir /opt/mattermost/data

bleveindexesディレクトリを作成

mkdir /opt/mattermost/bleveindexes

dataディレクトリは画像などのファイルが貯まる場所、bleveindexesディレクトリは検索に使うインデックスが貯まる場所になります。

ユーザを追加する、ユーザ名はmattermost

useradd --system --user-group mattermost

ファイルの所有者をmattermostユーザへ変更する

chown -R mattermost:mattermost /opt/mattermost

ファイルへのアクセス権を変更する

chmod -R g+w /opt/mattermost

ユーザの作成

CREATE USER 'mmuser'@'localhost' IDENTIFIED BY 'パスワード';

ユーザ名はmmuserにしておきます。パスワードは各自決めて下さい。
— 成功すれば、Query OK, 0 row affectedと表示されます。

繰り返しますがMySQL8はパスワードポリシーが非常に厳格です。自分で決めるのが面倒ならばrootパスワードの文字を組み替えたり追加したりして決めるのもいいと思います。

権限付与

GRANT ALL PRIVILEGES ON mattermost.* TO 'mmuser'@'localhost';

GRANT ALL PRIVILEGESは、mattermostデータベースに対して全ての権限を付与するという意味です。

Mattermostの設定(データベース関連)を開く

vi /opt/mattermost/config/config.json

/etc/mattermost/config/config.jsonの変更点

"ServiceSettings" : {
    "SiteURL": "URLですよ",
}

"SqlSettings": {
    "DriverName": "mysql",
    "DataSource": "mmuser:PASSWORD@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8\\u0026writeTimeout30s",
}

★ SiteURLディレクティブに登録したURLがMattermostサーバから生成されるリンクなどのベースURLとして利用されることになります。URLはさくらVPS契約時に控えたIPアドレスを入力しておきます(httpsやドメインは後でやります)

★ DriverNameはpostgresになっているのをmysqlに変更

★ DataSourceはPASSWORD以外は上記に置き換え。PASSWORDはSQLでmmuserの設定をしたパスワードを入力すること。

★ 書き換えたら「:wq」で保存してvimを終了してください。

Mattermostをサービスとして登録

vi /lib/systemd/system/mattermost.service

以下をそのままコピペし保存(公式から抜粋し公式手順に沿って2行削除しています)

[Unit]
Description=Mattermost
After=network.target
[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 daemon-reload

Mattermostを起動する(起動まで30秒近くかかります)

systemctl start mattermost

Mattermostを自動で起動するようにする

systemctl enable mattermost.service

Created symlink from・・と出たらOKです。

一旦アクセスできるか試してみる

ブラウザのアドレス欄にさくらVPN契約時のIPアドレス:8065でアクセスしてMattermostの画面が表示されたらOK。されなければ何かが間違ってるので見直してください。

確認できたらOKなので、ブラウザは閉じてください。

 

一旦まとめ

Mattermostの画面が出ればもう使えることになりますが、IPアドレスとポート番号で運用するのは難があります。外部からアクセスできないクローズな環境(LANやWAN)に構築するならともかく、さくらVPSのようにインターネットに晒す場合は「通信の暗号化」が絶対に必要になります。人に見られて困るものは投稿しないと思う人がいるかもしれませんが、そもそもログインのIDとパスワードが盗まれたら終わりますので、必須ということです。

暗号化にはSSL/TLS電子証明書が必要です。今回はLet’sEncryptという無料の仕組みを利用するつもりですが、それはドメイン名がないと利用できないのでドメイン取得も必要になります。

よって続けてドメイン取得手順についてご説明します。

 

お名前.comでドメイン取得&DNS登録

ドメイン選択と会員登録

HPの登録の仕組みが変わるかもしれないので参考まで。ドメイン取得が完了すればOKです。

  1. お名前.comにアクセス
  2. 取得したいドメインの文字列を入力して「検索」ボタンをクリック
  3. 希望のドメインを選択、レンタルサーバは「利用しない」を選択
  4. 「お申込みへ進む」をクリック
  5. お申し込み内容を確認して、右上「初めてご利用の方」を選択
  6. メールアドレスとパスワードを入力する
  7. メールアドレスとパスワードをメモに控えておき、「次へ」をクリック
  8. お支払方法を登録し、金額を確認して「申込む」をクリック
  9. 後は登録完了メールか何かが届くと思いますが、割愛。

すでに会員の人は手順の説明は不要だと思いますが、5からログインに進んでください。

DNSサーバの設定

取得したドメインからさくらVPSのサーバに通信が飛ぶようにします。

  1. お名前.comのトップページにアクセスする
  2. 右上にある「契約管理画面お名前.comNaviログイン」をクリックする
  3. 控えておいたIDとパスワードを入力してログインする
  4. 上部メニューの「ネームサーバの設定」から「ドメインのDNS設定」をクリックする
  5. 取得したドメインを選択して「次へ」をクリック
  6. DNSレコード設定を利用するの右にある「設定する」ボタンをクリックする
  7. ページ中腹にある枠に入力する
    1. ホスト名はブランクのまま
    2. TYPEはAのまま
    3. TTLは3600のまま
    4. VALUEはさくらVPS契約で控えたIPアドレスを入力する
  8. 右にある「追加」をクリックする
  9. 一番下にある「確認画面へ進む」をクリックする

これでドメインを取得し、このドメインにアクセスした通信はさくらサーバの「URL」に届くように設定できました。

しかしドメインはドメイン名とIPアドレスの紐づけなのでポートを含めて紐づけることはできません。つまり「URL:8065」にアクセスしようと思ったら「ドメイン名:8065」にアクセスするか、リバースプロキシを利用しないといけません。前者は変なのでリバースプロキシを利用する方法を取ります。

つまりこうなります。

それゆえ、引き続きリバースプロキシの導入と設定に続きます。

 

サーバ設定2/2 – NginxとLet’sEncrypt

HTTPサーバNginxをリバースプロキシとして利用する設定と通信暗号化のためのLet’sEncryptを導入する設定を行います。

Nginxのインストールと設定

Nginxリポジトリを追加する

vi /etc/yum.repos.d/nginx.repo

中身に以下を貼り付けます

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/7/$basearch/
gpgcheck=0
enabled=1

Nginxをインストールする

yum -y install nginx

Complete!確認と表示されればOKです。

Nginxの自動起動を設定する

systemctl enable nginx

Created symlink・・と表示されればOKです。

Nginxを起動する

# systemctl start nginx

HTTPサーバにhttpでアクセス

Nginxサーバが起動しているのでアクセスできるか確認します。ブラウザで取得したドメインにhttpでアクセスして下さい。

Welcome to nginx!と表示されれば成功です。サーバは立ち上がりました。もし表示されない場合は、httpsにリダイレクトされていないかアドレスを確認してください。もしリダイレクトされていればキャッシュが関係しているかもしれないのでキャッシュをクリアするか別のブラウザでお試しください。

Let’s Encryptの導入

無料のSSL/TLSサーバ証明書、Let’sEncryptを導入します。

certbotをインストールする

yum -y install certbot

Complete!確認と表示されればOKです。

証明書をインストールする

以下は例文です。下の説明文を参考にところどころ置き換えてください。

certbot certonly --webroot -w /usr/share/nginx/html -d hogehoge.com -m hoge@hoge.com --agree-tos -n

-wのドキュメントルートは変更なければ/usr/share/nginx/htmlのまま
-dのhogehoge.comは取得したドメインに置き換えてください
-mは自分の連絡先メールアドレスに置き換えてください。
コマンド実行後に表示されるメッセージの中腹にCongratulations!と表示されていれば成功です。下記はcertbotコマンドの構文です。ご参考までに。

#構文
certbot certonly --webroot -w ドキュメントルート -d ドメイン名 -m メールアドレス --agree-tos -n

リバースプロキシ設定

上記で取得したドメインにアクセスしたときにNginxの画面が表示されましたが、ここにアクセスしたらMattermostの:8065が表示されるようにリバースプロキシ設定を施していきます。

Nginxの設定ファイルがあるディレクトリに移動

cd /etc/nginx/conf.d

デフォルトの設定ファイルを名前を変更して保管しておく

mv default.conf default_old.conf

ファイルの名前を変更するだけです。オリジナルのconfigファイルdefault.confをdefault_old.confに変更します

リバースプロキシ用のNginx設定ファイルを作る

vi mattermost

下記をコピペし、カタカナでドメイン名と書かれた4箇所を置き換えてください。

upstream backend {
   server 127.0.0.1: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 default_server;
   server_name    ドメイン名;
   return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name    ドメイン名;

   ssl on;
  ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
   ssl_session_timeout 1d;
   ssl_protocols TLSv1.2;
   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 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;
  
   location ~ /api/v[0-9]+/(users/)?websocket$ {
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       client_max_body_size 100M;
       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 100M;
       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>;
   }
}

4箇所ともhttp無しトップドメイン含むドメインを入力します

シンボリックリンクを設置する

ln -s /etc/nginx/conf.d/mattermost /etc/nginx/conf.d/default.conf

もともとMattermostは先ほど名前を変更したdefault.confを読むようになっています。シンボリックリンクを設置して、default.confを指定した場合、Mattermost用ファイルを読み込むように変換します。

Nginxを再起動する

systemctl restart nginx

再度HTTPサーバにhttpsでアクセス

今度はhttpsでドメインにアクセスしてください。リバースプロキシの設定がうまくいっていれば今度はMattermostの画面が表示されるはずです。

Mattermostのページが表示されれば電子証明書も効き、リバースプロキシが効いているということで成功です。もし表示されていないのであれば/etc/nginx/conf.d/mattermostの内容が間違っていないか、シンボリックリンクが正しく設定されているか直近の操作を見直して下さい。

 

Mattermostの設定

サーバの設定は終えました。次にブラウザからMattermostにアクセスしてアカウント作成、ログイン、初期設定を行っていきます。

アカウント作成

ブラウザでMattermostを開きます。初回はアプリはNGです。

現行バージョン7.9.1だと、スマホの場合はWhere would you like to view this?の画面が差し込まれますので、View in Browserを選んでください。
入力する項目は

  • Email address 自分のメールアドレスを入力
  • Choose a Username アプリ内の名前を入力
  • Choose a Password 8~64文字でパスワードを決めて下さい。

Usernameは@や日本語やスペースは使えません。なので URLや、ホゲ山ホゲ太郎、taro hogeyamaはどれもNGです。 taro_hogeyamaあたりがいいかと思います。

チームを作成

  1. 「Create team」をクリックします
  2. チーム名を入力し「Next」をクリックします
  3. TeamURLを確認します
  4. 「Finish」をクリックします
  5. チームの画面が表示されたらOKです。

チーム名はTeamURLにもなるので、会社の名前をアルファベット小文字で表現して、チーム名とTeamURLを同じにするのがわかりやすいと思います。チームとはSlackでいうワークスペースのことです。1会社=1チームで運用してもいいですし、プロジェクトにわけるのもいいと思います。そこから派生させる必要が出てきた場合はhogehoge_devやhogehoge_globalなどにすればよろしいかと思います。

自分のアカウントの言語設定

  1. 右上の歯車のアイコンをクリックする
  2. Displayをクリック
  3. Languageをクリック
  4. Change interface languageを日本語にする
  5. 「Save」ボタンをクリックする
  6. これで全て日本語で表示されます

システムコンソールから各種設定

システムコンソールを開きます。

  1. Channelsをクリック
  2. システムコンソールをクリック

全体の言語設定

  1. サイト設定にある言語をクリック
  2. デフォルトのサーバ言語を日本語へ変更
  3. デフォルトのクライアント言語を日本語へ変更
  4. 利用可能な言語を日本語とEnglish(US)の2つを選択する
  5. 下にある「保存する」ボタンをクリック

サイト設定

  1. サイト設定にあるカスタマイズをクリック
  2. サイト名を適当な名前をつける
  3. サイトの説明を適当な名前をつける
  4. 独自ブランド機能を有効にする、有効にする
  5. 「画像を選択する」をクリックし、画像をアップする
  6. 下にある「保存する」ボタンをクリック

我が社はSlackをそもそもチャット会議システムと認識していない人が多いので「hogetalk – chat meeging -」というサイト名にしています。
サイトの説明は投稿が会議であることを示すために、「投稿しましょう、それが会議になります」にしました。
ブランド画像は会社のロゴを透過で載せるとよいでしょう。ログイン画面にいい感じに表示してくれます。

ユーザ数とフルネームを使えるようにする

  1. サイト設定にあるユーザーとチームをクリック
  2. チーム毎の最大のユーザー数を、10では少ないので400にしておく
  3. チームメイトの名前の表示を、ニックネームがあれば・・に変更
  4. 下にある「保存する」ボタンをクリック

パスワードポリシーを確認する

  1. 認証にあるパスワードをクリック
  2. 最小パスワード長さは、10
  3. 要件は全てにチェックが入れる
  4. 下にある「保存する」ボタンをクリック

外部に晒すサーバなのでパスワードは厳格にしたほうがいい。電子証明書の導入はお互いに面倒なのでやらない。

 

文字検索ができるようにする

  1. 実験的機能にあるBleveをクリック
  2. Bleveのインデックス付与を有効にする、有効をチェック
  3. IndexDirに、/opt/mattermost/bleveindexesと入力する
  4. Bleveの検索クエリを有効にする、有効にチェック
  5. Bleveの自動補完クエリを有効にする、有効にチェック
  6. 下にある「保存する」ボタンをクリック
  7. 「インデックス付与を今すぐ開始する」をクリック

状態に成功という緑色の文字が出ればOKです。

 これをやっておかないと文字検索がほとんどヒットしなくなります。bleveindexesはMattermostをインストールするときに一緒に作っておいたディレクトリです。

 

メール設定

今回はさくらVPS内にメールサーバを立てずに、会社が利用しているホスティングサービスのメールサーバを利用します。会社ならメールサーバくらいあるしょうということで。

  1. 環境にあるSMTPをクリック
  2. SMTPサーバ、SMTPサーバのアドレスを入力する
  3. SMTPサーバポート、入力する
  4. SMTP認証を有効にする、有効(サーバによるかも)
  5. SMTPサーバのユーザ名、入力する
  6. SMTPサーバのパスワード、入力する
  7. 接続のセキュリティ、TLS(推奨)を選択する
  8. 「保存する」ボタンをクリックする
  9. 「接続テストをする」をクリック

自分のメールアドレスにdからのメールが届けばOKです。

 今どき認証無しのSMTPはないと思うので何か送信用のカウントを作っておけばよろしいかと。たとえばno-reply@など。

 

メールの通知に関する設定

  1. サイト設定にある通知をクリック
  2. 電子メール通知を有効にする、有効にチェック
  3. 通知の表示名、メールの送信元に表示したい名前を入力する
  4. 通知の送信元電子メールアドレス、no-replyのアドレスを作って入れておく
  5. サポートメールアドレス、管理者のメールアドレスでも入れておけば
  6. 「保存する」をクリック

通知の表示名はメールの送信元表示になります。サイト名と同じでよろしいかと。通知のReply-ToはブランクでOKです。その場合はサーバが送るメールは返信できなくなります。no-replyなので大丈夫。

メールで招待できるようにする設定をします

  1. 認証にある利用登録をクリック
  2. 招待メールを有効にする、有効を選ぶ
  3. 下にある「保存する」ボタンをクリック

この設定をしなければユーザーを増やすための招待ができないので、ご注意ください。

サイトURLを変更する

  1. 環境にあるウェブサーバーをクリック
  2. サイトURLの値を取得したドメインにする(もちろんhttpsです)
  3. 下にある「保存する」ボタンをクリック

この値は/opt/mattermost/config/config.jsonのSiteURLの値と同じです。上記で変えたらconfig.jsonの値も変わります。どちらを替えてもいいですですが、今回はこの流れで替えておきます。
サイトURL設定の変更はサーバの再起動が必要ですが、再起動はもう少し下で行います。

(任意)BoardsとPlaybooksを停止しておく

  1. プラグインにあるMattermost Boardsをクリック
  2. プラグインを有効にする、を無効にする。
  3. プラグインにあるPlaybooksをクリック
  4. プラグインを有効にする、を無効にする。
  5. プラグインにあるAppsをクリック
  6. プラグインを有効にする、を無効にする。
  7. プラグインにあるCallsをクリック
  8. プラグインを有効にする、を無効にする。
  9. プラグインにあるPlaybooksをクリック
  10. プラグインを有効にする、を無効にする。

Mattermostは多機能ですが自分がわからない機能はユーザーに使わせたくないので閉じておきます。質問されても答えられませんし、ぶっ壊されても困ります。

 

最終設定

おつかれさまでした。最後に少しだけ設定をします。

パケットフィルタの8065を閉じます

テスト用に設定したTCP8065を閉じます。リバースプロキシを使ってTCP80/443経由でアクセスするのでもうTCP8065は必要ありません。

  1. さくらVPSコンソールにログインする
  2. 契約したサーバをクリックする
  3. 「パケットフィルタ設定」をクリックする
  4. 「パケットフィルタを設定」をクリックする
  5. 「パケットフィルタ設定を追加する」をクリックする
  6. カスタムTCP 8065の右にある「×」をクリックする
  7. 「設定を保存する」をクリックする

サーバを再起動する

再起動してもMattermost、Nginx、MySQLなどがちゃんと自動起動するか、念のためサーバを再起動してみます。

  1. SSHでログインする
  2. サーバを再起動する
# shutdown -r now

ちゃんと上記手順でやっていればサーバ再起動すればちゃんとMattermostにアクセスできるはずです。Mattermostが表示される、すなわちNginxもMySQLも起動しているということです。

SSHでログインするときはIPアドレスでも大丈夫ですしドメインでも大丈夫です。ドメインならssh://取得したドメインですね。

 

そもそも基本的なサーバ設定は大丈夫か確認しておきました

SELinuxの状態は

getenforce

Disabledになっていました。無効になっています。SELinuxはややこしいので無効にする場合がほとんどです。誰も使いこなせないそうです。

ファイアーウォールの状態は

firewall-cmd --status
systemctl status firewalld

firewall-cmdならnot running、systemctlならinactive(dead)を確認できました。こちらも無効になっていました。さくらVPSコンソールでパケットフィルタリングしているのでサーバ側のfirewallは無効でいいと思います。

OSのバージョンは

# cat /etc/reahat-release

執筆当時はCentOS Linux release 7.9.2009 (Core)でした。正常です。

設定日時は

# date

言語設定は

# localectl

日本語でした(VC Keymap: jp106 X11 Layout: jp)正常です。

最後にyum update

# yum -y update

よくわからないですが、mysql80-community-release.noarch 0:el7-7がupdateされました。

 

運用について

招待リンクから管理者がアカウントを作ってあげて、それを通知する方法が一番簡単。APIを使うやり方があるみたいだけどよく分からないので手動でやる。手順書はアプリのダウンロードからスタートする。
ただ、アカウントを作ったら、ようこそメールがそのメールアドレスに飛ぶ。

アカウント作成

  • メールアドレス その人のメールアドレス(必須)
  • 名前 苗字と名前をスネークケースで(例 name_myouji)

 

プロフィール設定

  • フルネーム ファーストネームに苗字、ラストネームに名前を入れて下さい
  • ニックネーム 基本ブランクでOK。同姓同名の場合くらいしか使わないかも
  • 役職 拠点や部署を入れればよいでしょう。

 

ダイレクトメッセージ設定

  1. ダイレクトメッセージの縦の3ポツをクリック
  2. ソートをアルファベット順に
  3. 表示を全てに

 

サーバのバージョンアップ

Mattermostは頻繁にバージョンアップが行われ機能も追加されるのでバージョンアップがうまくいくかも試しておきます。少し前の6.7.2を入れて少し運用してから今の7.9.1にバージョンアップします。投稿や画像に問題がなければOKです。

Webサーバを停止します

systemctl stop nginx
systemctl stop mysqld
systemctl stop mattermost

mattermostのデータをバックアップします(名前変えるだけ)

mv /opt/mattermost /opt/mattermost.old

最新版mattermostをダウンロードします

wget https://releases.mattermost.com/x.x.x/mattermost-team-x.x.x-linux-amd64.tar.gz

ダウンロードした圧縮ファイルを/optに解凍展開する

tar -xvxf mattermost-team-x.x.x-linux-amd64.tar.gz -C /opt

新のconfigとlogsディレクトリを名前を変えて退避させる

mv /opt/mattermost/config /opt/mattermost/config_bak
mv /opt/mattermost/logs /opt/mattermost/logs_bak

ダウンロードしたてのmattermostにはdataファイルはないのでその命令はありません。

旧のconfigとlogsとdataディレクトリを新に置き換える

mv /opt/mattermost.old/data /opt/mattermost/data
mv /opt/mattermost.old/config /opt/mattermost/
mv /opt/mattermost.old/logs /opt/mattermost/

新mattermostの所有権をmattermostに変更する

chown -R mattermost:mattermost /opt/mattermost

アクセス権を設定する

chmod -R g+w /opt/mattermost

g+wはグループに書き込み権限を追加する命令ですが、なぜか反映しないことがあったので困った。再起動して再度実行したら正しくアクセス権が変更されました。ファイルが多いと遅延があるそうですが、本当にそうなのかは不明です。

各サービスを起動する

systemctl start mysqld
systemctl start nginx
systemctl start mattermost

以上で新しい7.9.1の画面が出てきました。投稿も画像もちゃんと表示されており、追加で投稿や画像のアップも問題なく行えました。通知もちゃんと飛びます。これにて一件落着。

 

ファイルアップロード上限を200MBにする

デフォルト設定ではファイルアップロードは100MBまで。少々大き目の動画なら100MBは超えるので200MBにする手順を書いておきます。直す箇所は2つ。コンソール設定とNginx設定の2つ。
コンソール設定(Mattermostの設定)

  1. システムコンソールを開く
  2. Channelsをクリック
  3. システムコンソールをクリック
  4. 環境にあるファイルストレージをクリック
  5. 最大ファイルサイズを200MBにする
  6. 下にある「保存する」ボタンをクリック

Nginx設定

# vi /etc/nginx/conf.d/mattermost

中にあるclient_max_body_sizeが2個所あるので、2個所とも100Mから200Mに変更する

NginxとMattermostの再起動

# systemctl restart nginx
# systemctl restart mattermost

ちなみに、アップできる最大ファイル数は10ファイルが上限。

 

やってみたこと

セッションの破棄

システムコンソールのユーザー管理のユーザにある「セッションを破棄する」は、ユーザーを強制的にログアウトさせる。
下にある「全てのセッションを破棄する」をクリックすれば自分も含め強制ログアウトする。使っても問題ありません。正常に動作します。

エラー報告

招待リンクを踏めば不正と赤く表示される 23/03/29

もともとブラウザでAでログインしている場合に、Bへの招待リンクを踏んでブラウザを開いた場合、Aの画面が表示されるが、ログアウトして再度Bへの招待リンクを踏めば不正なリンク先と表示される。この場合はログアウトした状態で再度招待すればOKでした。

ログに2分間隔でエラー

エラー内容は下記。

{“timestamp”:”2023-03-29 13:40:28.817 +09:00″,”level”:”error”,”msg”:”SimpleWorker: job execution error”,”caller”:”jobs/base_workers.go:91″,”worker”:”InstallNotifyAdmin”,”job_id”:”3ymx1g63r3rsjrq4zbgx5mid6w”,”error”:”DoCheckForAdminNotifications: Unable to send notification post., No license found”}

コメント

タイトルとURLをコピーしました