GitLabにバンドルされているMattermostを使用して、GitLabのユーザでMattermostにログインできるようにしてみます。公式のドキュメントはこちらです。

追記 2017/08/22

この記事はGitLabにバンドルされているMattermostを使用する前提で書いているのですが、GitLabにバンドルされているMattermostだとバージョンアップ時などに(GitLabかMattermost)一方に不具合等があった場合に、GitLab・Mattermostの両方をダウングレードせざる負えません。実際、私はMattermost4.0のバージョンアップ時にGitLab SSOを使用できなくなるという不具合に遭遇(Mattermost 4.0.3で修正済み)したため、GitLabとMattermostは分けて運用するように変更しました。ですので、よほどの理由がない限り、Mattermostは別に立てた方がよいと思います。ただ、分けた場合でも今回書いているGitLab SSOのやり方は同じです。

Mattermostとは


GitLab社が開発してるSlackっぽいチャットツールです。

前提


今回はMattermostはGitLabと同一マシン内の別ポート(8001)で動作させます。もちろん、ドメインも設定できます。

GitLabでの設定


まず、GitLabに管理者でログインします。ログイン後に右上の「スパナ」のマークを選択します。

「Applications」から「New Application」を設定します。

「Redirect URI」に下記を設定して「Scopes」のapiにチェックを入れます。

1
2
http://MattermostのドメインかIP+ポート/signup/gitlab/complete
http://MattermostのドメインかIP+ポート/login/gitlab/complete

下記のような感じになります。

「Submit」を選択するとApplication IDSecretが作成されるので、これをメモします。

gitlab.rbを編集する


gitlab.rbで次のように設定します。それぞれの値は環境に応じて設定してください。

1
2
3
4
5
6
7
8
mattermost_external_url 'http://192.168.10.20:8001'
mattermost['gitlab_enable'] = true
mattermost['gitlab_id'] = "4cbe8bd636cacd2fda600c6d990fa90f3b29c6d5ce42934fbbd3998c5f169c09"
mattermost['gitlab_secret'] = "bc5a7381cce9c4b0d0ec2e4a4939305ab486f81928607bd253b8f28ce7a1440b"
mattermost['gitlab_scope'] = ""
mattermost['gitlab_auth_endpoint'] = "http://external_urlの値/oauth/authorize"
mattermost['gitlab_token_endpoint'] = "http://external_urlの値/oauth/token"
mattermost['gitlab_user_api_endpoint'] = "http://external_urlの値/api/v3/user"
  • gitlab_id,gitlab_id
    • 先ほどGitLabのApplicationで作成したApplication IDSecretを指定します
  • gitlab_auth_endpoint,gitlab_token_endpoint,gitlab_user_api_endpoint
    • gitlab.rbexternal_urlの値を設定します

DockerでMattermostにドメインを割り当ててない場合


Mattermost(mattermost_external_url)で今回のようにIP+ポート指定している場合はmattermost_external_urlで指定したポートにあわせた変更が必要です。例えば、Docker composeでやってる場合はdocker-compose.ymlに次のような追記が必要です。

1
2
ports:
- '8001:8001'

再起動する


sudo gitlab-ctl reconfigureで再設定します。Dockerの場合はコンテナ再起動でもOK。

Mattermostにアクセスする


「GitLab Single-Sign-On」を押すと下記のような画面が表示されるので「Authorize」を選択します。

あとは、チームを作成したらチャットルームが作成されて、コメントできるようになります。

再起動時の注意点


私は以前の記事のようにDockerで作成してgitlab.rbをホストからマウントさせているのですが、この場合(?)Mattermostのシステムコンソールで設定を変更しても、Dockerのコンテナを再起動するたびにgitlab.rbの設定が優先されてしまいます。なので、設定はMattermostのシステムコンソールで行わずにgitlab.rbで行うようにしています。