はじめに
世間ではSlackが流行しているらしいですが、弊社のようにクラウドツールの使用許可が下りず、
使えていないという人も多いのではないでしょうか。
今回はSlackクローンを自称するMattermostを構築していきます。
Mattermostとは
公式:https://www.mattermost.org/
Wikipediaより
Mattermost(マターモースト)は、オープンソースのセルフホスティング式のチャットサービスである。組織や企業の内部チャットとして設計されており、Slackの代替として売り出されている[3]。
元々はゲーム開発スタジオのSpinPunchの内部チャットとして使用されており、その当時はプロプライエタリであったが、後にオープンソース化された[3]。バージョン1.0は2015年2月10日にリリースされた[4]。
MattermostはMattermost, Inc.によって開発と保守が行われている[5]。同社はオープンソース版にはないサポートサービスと追加機能がある商用版を販売することによって利益を得ている。
iOS・Android・Windows・macOS・Linux向けのクライアントが提供されている。
マスメディアはMattermostを人気の高いSlackの代替であると見做している[6][7][8][9]。GitLabはもう一つの人気のあるチャットツールであるGitter(英語版)を買収したが[10]、Mattermostを"GitLab Mattermost"としてGitLabに統合した[11]。
要は、
- Slackライクなチャットツール
- 自分でサーバを構築してオンプレミスで利用可能
- gitlabが開発していて、gitlabをインストールすると一緒についてくる
- Jenkins、RedmineなどとWebhookを使用した連携が可能
前提
ActiveDirectoryや、ドメインコントローラはすでに構築済みであることを前提にしています。
gitlabはあくまでLDAP認証を使用するためだけに使用するので、ドメインは1つしか割り当てません。
こっちもリポジトリとして使っていきたい場合は、公式の手順通りにドメインを2つ用意した方が良いです。
基本的に作業はrootユーザで行っている前提です。
設定項目 | 設定値 |
---|---|
OS | CentOS 7.5 |
割り当てるドメイン | sample.local.com |
gitlabの起動ポート | 9999 |
mattermostの起動ポート | 8065 |
ドメインコントローラのドメイン | dc.local.com |
gitlabの構築
インストール
rpmからインストールします。EXTERNAL_URL
には用意したドメインを設定してください。
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
EXTERNAL_URL="http://sample.local.com:9999" yum install -y gitlab-ee
ポートの開放
最終的に必要になるポートを開けていきます。
Mattermostはhttpsで接続させるので、2つだけ解放します。
firewall-cmd --add-port=443/tcp --zone=public --permanent
firewall-cmd --add-port=9999/tcp --zone=public --permanent
firewall-cmd --reload
管理者パスワード設定
ブラウザでhttp://sample.local.com:9999
にアクセスします。
管理者ユーザのパスワード入力を求められるので入力します。
その後、ログインできれば成功です。
ユーザ名 | パスワード |
---|---|
root | 入力したパスワード |
LDAP設定
GUIからは設定できないようなので、設定ファイルを修正してLDAPの設定を行います。
最後のEOSもコメントを解除する必要がありますが、忘れやすいです。
gitlab_rails['ldap_enabled'] = true
### ! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'LDAP'
host: 'dc.local.com'
port: 389
uid: 'sAMAccountName'
bind_dn: 'CN=Administrator,CN=Users,DC=local,DC=com'
password: '{ドメイン管理者のパスワード}'
encryption: 'start_tls' # "start_tls" or "simple_tls" or "plain"
verify_certificates: false
smartcard_auth: false
active_directory: true
allow_username_or_email_login: false
lowercase_usernames: false
block_auto_created_users: false
base: 'DC=local,DC=com'
user_filter: ''
EOS
gitlabを再構築します。
gitlab-ctl stop
gitlab-ctl reconfigure
gitlab-ctl restart
再度ブラウザでアクセスしてみます。
LDAPのタブが表示され、自身のユーザでログインできればOKです。
Mattermostで連携するとき用の設定
ブラウザから管理者ユーザでgitlabにログインします。
以下画面のConfigure GitLab
をクリックします。
Application
を選択して、New Application
ボタンをクリックします。
連携用の情報を設定していきます。
設定項目 | 値 |
---|---|
Name | Mattermost |
Callback URL |
https://sample.local.com/login/gitlab/complete https://sample.local.com/signup/gitlab/complete |
Trusted | 未チェック ※連携許可の確認が不要の場合はチェック |
Scopes | API |
設定完了後に表示されるApplication ID
とSecret
は後で使うので、控えておきます。
MySQLの構築
gitlabインストール時にPostgreSQLがインストールされるのですが、
今回はMattermost用にMySQLをインストールします。(付属ぽすぐれに設定する方法がわからなかったのは内緒。。。)
インストール
rpmを取得してインストールします。
cd /usr/local/src
wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
yum localinstall mysql57-community-release-el7-9.noarch.rpm
yum install mysql-community-server
DBを起動しつつ、サーバを再起動したときにMySQLが自動起動されるように設定しておきます。
systemctl start mysqld
systemctl enable mysqld
Mattermost用のユーザ、DBを作成
以下を作成します。
ユーザ名 | mmuser |
パスワード | p@assWord123 |
DB名 | mattermost_production |
rootユーザでログインするための一時パスワードを取得。
grep 'temporary password' /var/log/mysqld.log
表示されたパスワードでログインし、rootユーザのパスワード含め設定。
mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '{任意のパスワード}';
mysql> create user 'mmuser'@'%' identified by 'p@assWord123';
mysql> create database mattermost_production;
mysql> grant all privileges on mattermost_production.* to 'mmuser'@'%';
Mattermostの構築
Mattermostを有効化
gitlab付属のMattermostを有効化します。
同時にLet's Encryptの設定を有効化して、証明書を自動的に取得するように設定します。
gitlab_rails['mattermost_host'] = "https://sample.local.com"
mattermost['enable'] = true
mattermost['service_address'] = "0.0.0.0"
mattermost['service_port'] = "8065"
mattermost['sql_driver_name'] = 'mysql'
mattermost['sql_data_source'] = "mmuser:p@assWord123@tcp(localhost:3306)/mattermost_production?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"
mattermost['gitlab_id'] = "{GitLabのID}"
mattermost['gitlab_secret'] = "{GitLabのシークレットキー}"
mattermost['gitlab_auth_endpoint'] = "http://sample.local.com:9999/oauth/authorize"
mattermost['gitlab_token_endpoint'] = "http://sample.local.com:9999/oauth/token"
mattermost['gitlab_user_api_endpoint'] = "http://sample.local.com:9999/api/v4/user"
mattermost_nginx['enable'] = true
+mattermost_nginx['redirect_http_to_https'] = true
+mattermost_nginx['ssl_certificate'] = "/etc/gitlab/ssl/sample.local.com.crt"
+mattermost_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/sample.local.com.key"
+mattermost['service_use_ssl'] = true
letsencrypt['enable'] = true
letsencrypt['auto_renew'] = true
gitlabを再構築します。
Validation failed for domain ~
と言ったエラーが出るかもしれませんが、
証明書はちゃんと作成されているようなので置いておきます。
gitlab-ctl stop
gitlab-ctl reconfigure
gitlab-ctl restart
Mattermostの設定
ブラウザでhttps://sample.local.com
にアクセスします。
GitLabでログインする
を選択して、認証情報を入力します。
Mattermostへのログインが成功すればOKです。
最初にログインしたユーザが管理者ユーザとなるようなので、
システムコンソールから好きなように設定を変更してください。
おわりに
以上で、Mattermostの構築は完了です。
これまではChat&Messangerを利用してきましたが、以下の点で優れていると感じてます。
- 返信が別スレッドで表示されるため後からやり取りを確認しやすい
- 後から参加した人も過去のやり取りを閲覧できる
- Markdown記法が使える
Slackを使ったことがないので何ともですが、けっこう気に入ってます。
ぜひ、使ってみてください。