Mattermost導入とGitlabの細かな設定

## はじめに

近年はどこもかしこもGithubブームです。
｢でもお金が…｣
｢でもセキュリティが…｣
そういう会社さんも少なくないと思います。
(僕もこの経験あります。)
そんな方におすすめはGitlab。
Gitlab自体の導入はこのアドベントカレンダーで他の方が書かれてるので、
僕はGitlabの付属品のMattermostのご紹介です。

## Mattermostってなに

MattermostはSlackのクローンみたいなものです。
ほぼSlackと言っても過言ではないレベル。
Slackもセキュリティの面で反発されやすいです。
そんなツールもGitlabに内蔵されているのでぜひ使ってみましょう。

## 環境


- CentOS 7.2.1511

- Gitlab CE Omnibus 8.14.1

## 【下準備】Gitlabのリンクを変更する。

Gitlabのデフォルトのリンクは http://localhost に設定されています。
もし組織内でサーバーを立ててる場合は変更する必要があります。
例えばサーバーのホスト名が｢hogelab.intra｣だったとします。

```ruby:/etc/gitlab/gitlab.rb
# external_url 'http://localhost'
external_url 'http://hogelab.intra'
```

このようになります。
このURLは後々使います。

補足
基本的にgitlab.rbを編集したあとは
`gitlab-ctl reconfigure`
を実行して設定を反映させて下さい。

## Mattermostを有効化する

MattermostはGitlab-CEのパッケージに含まれています。
設定は以下の通り。

```ruby:/etc/gitlab/gitlab.rb
# mattermost_external_url 'http://mattermost.example.com'
mattermost_external_url 'http://mattermost.example.com' 

# mattermost['enable'] = false
mattermost['enable'] = true

# mattermost['service_address'] = "127.0.0.1"
mattermost['service_address'] = "0.0.0.0"
```

ただ動かすだけならこれだけ。
mattermost_external_urlは適宜変更。
mattermost['enable']はもちろんtrue。

注意点はservice_address。他のところはlisten_addressとかになっていましたが、
これも実はlisten_addressと同意義らしくログファイルを見ると

```log:/var/log/gitlab/mattermost/current
[INFO] Server is listening on 127.0.0.1:8065
```

こんな感じでservice_addressの設定値でlistenし始めます。
ここが何の気無しで設定した際にエラーになったので注意です。
(127.0.0.1をlistenしても意味ないような･･･)

## Gitlabのアプリケーションキーを発行する

ここまで来たら一回Gitlabにアクセスします。
rootアカウントでログインしたら右上のProfile Settingを開いて下さい。
Applicationsのタブを開いて画像のように設定します。![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/100796/f7fb94db-5a79-023c-74fd-9d5bf5aed11b.png)
NameのMattermostとか識別し易い名前にしておいて下さい。
Redirect URIの欄は
**[mattermost_external_url]/login/gitlab/complete
[mattermost_external_url]/signup/gitlab/complete**

この2つを登録してください。
そうするとこんな感じでキーが発行されます。
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/100796/26ba7863-b4a9-b7fa-9160-2c7f61d3e532.png)
そしたらまたサーバー側に戻ります。

```ruby:/etc/gitlab/gitlab.rb
# mattermost['gitlab_id'] = "12345656"
mattermost['gitlab_id'] = [Application Id]
# mattermost['gitlab_secret'] = "123456789"
mattermost['gitlab_secret'] = [Secret]

# mattermost['gitlab_auth_endpoint'] = "http://gitlab.example.com/oauth/authorize"
mattermost['gitlab_auth_endpoint'] = "[GitlabのURL]/oauth/authorize"
# mattermost['gitlab_token_endpoint'] = "http://gitlab.example.com/oauth/token"
mattermost['gitlab_token_endpoint'] = "[GitlabのURL]/oauth/token"
# mattermost['gitlab_user_api_endpoint'] = "http://gitlab.example.com/api/v3/user"
mattermost['gitlab_user_api_endpoint'] = "[GitlabのURL]/api/v3/user"
```

このように設定します。
gitlab_idはApplication Id、gitlab_secretはSecretを設定します。
ついでに

- gitlab_auth_endpoint
- gitlab_token_endpoint
- gitlab_user_api_endpoint

この3つをコメントアウトを解除、Gitlabのexternal_urlと組み合わせる感じで設定します。

## Mattermostにログインする

そうしたらmattermostにアクセスします。
![キャプチャ4.PNG](https://qiita-image-store.s3.amazonaws.com/0/100796/303d3ade-488f-0982-75b6-4c8b68ceca7d.png)
次に
![キャプチャ5.PNG](https://qiita-image-store.s3.amazonaws.com/0/100796/82e4e674-dd19-9622-a355-321219a9adc2.png)
MattermostがGitlabへのアクセスするのを許可してやります。次へ。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/100796/ec6fe2c3-c3d1-633d-a0e5-69edbc49a9f4.png)
適当にチーム名決めます。
![キャプチャ1.PNG](https://qiita-image-store.s3.amazonaws.com/0/100796/9d5594be-0331-2582-1a3f-0c780190093d.png)
次はチームのURL決めます。わかりやすい方がいいです。
ここまで来たら晴れてMattermostが使えるようになります。
この方だとSSOでログイン出来るように設定されているので、
GitlabアカウントでMattermostもログインできちゃいます。
便利。


## 【Gitlab】ユーザーを管理者のみ作れるようにする

ユーザー管理は重要です。勝手に作らせたくない場合もあります。
管理者でログインして
Admin Areas→Settings→Sign-up Restrictions→Sign-up enabled
のチェックボックスを外しましょう。
ログイン画面のユーザー登録がなくなります。
管理者が管理画面からしかユーザーを作成できません。

## 【Mattermost】Mattermostも勝手にユーザーを作らせない

```ruby:/etc/gitlab/gitlab.rb
# mattermost['email_enable_sign_up_with_email'] = true
mattermost['email_enable_sign_up_with_email'] = false
# mattermost['email_enable_sign_in_with_email'] = true
mattermost['email_enable_sign_in_with_email'] = false
# mattermost['email_enable_sign_in_with_username'] = false
mattermost['email_enable_sign_in_with_username'] = false
```

Mattermostは設定ファイルを書き換えないといけないようです。
ここまでやるとGitlabのユーザーを管理者が作ってそのアカウントでMattermostにSSOでログインする形になります。

## 【おまけ】Gitlabのアップデート

Gitlabはアップデートが多いプロダクトです。
ちょっとした注意点としてGitlabのアップデートを行う際にGitlabを停止してしまうと、
データベースのバックアップを取れなくて失敗します。
アップデートする際はGitlabを立ち上げっぱなしで行って下さい。