LoginSignup
3

More than 3 years have passed since last update.

Mattermostでgitlabを利用してLDAP認証を行う。SSL通信にも対応してみる。

Posted at

はじめに

世間では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もコメントを解除する必要がありますが、忘れやすいです。

/etc/gitlab/gitlab.rb
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です。
キャプチャ.PNG

Mattermostで連携するとき用の設定

ブラウザから管理者ユーザでgitlabにログインします。
以下画面のConfigure GitLabをクリックします。

キャプチャ.PNG

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 IDSecretは後で使うので、控えておきます。

キャプチャ2.PNG

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の設定を有効化して、証明書を自動的に取得するように設定します。

/etc/gitlab/gitlab.rb
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を使ったことがないので何ともですが、けっこう気に入ってます。
ぜひ、使ってみてください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3