GitLab Mattermost

GitLab Mattermostサービスを GitLab サーバ上で実行することができます。MattermostはGitLabのような単一のアプリケーションの一部ではありません。MattermostとGitLabの間には良いインテグレーションがあり、私たちのLinuxパッケージでインストールすることができます。しかし、Mattermostは別会社の別アプリケーションです。GitLab サポートでは、GitLab とのインテグレーション以外の Mattermost 固有の質問にはお答えできません。Mattermost 自体についてのヘルプが必要な場合は、コミュニティサポートリソースをご覧ください。

前提条件

GitLab Mattermost の各リリースは、Linux 用 AMD 64 チップセット上でコンパイルされ、手動でテストされています。Raspberry Pi のような ARM チップセットとオペレーションシステムはサポートされていません。

利用を開始

GitLab Mattermost は独自のバーチャルホスト上で動作することを想定しています。DNS 設定では、同じマシンを指す2つのエントリーが必要です。例えば、gitlab.example.commattermost.example.com

GitLab Mattermost はデフォルトでは無効になっています。有効にするには

  1. /etc/gitlab/gitlab.rb を編集し、Mattermost の外部 URL を追加します:

    mattermost_external_url 'https://mattermost.example.com'
    
  2. GitLab を再設定します:

    sudo gitlab-ctl reconfigure
    
  3. GitLab Mattermost がhttps://mattermost.example.com に到達可能で、GitLab への接続が認証されていることを確認します。GitLab で Mattermost を認証することで、ユーザーは GitLab を SSO プロバイダとして使用できるようになります。

Linux パッケージは、アプリケーションが同じサーバー上で実行されている場合、GitLab Mattermost を GitLab で自動的に認証しようとします。

自動承認には GitLab データベースへのアクセスが必要です。GitLab データベースが利用できない場合は、Authorize GitLab Mattermost セクションで説明するプロセスを使って GitLab Mattermost を手動で認証して GitLab にアクセスする必要があります。

Mattermost の設定

GitLab 11.0 から、Mattermost は Mattermost システムコンソールを使って設定することができます。Mattermost の設定と設定場所の一覧は、Mattermost ドキュメントにあります。

システムコンソールの使用を推奨しますが、以下のオプションのいずれかを使用して Mattermost を設定することもできます:

  1. /var/opt/gitlab/mattermost/config.json を使用して Mattermost 設定を直接編集します。
  2. gitlab.rbmattermost['env'] 設定を変更することで、Mattermost の実行に使用される環境変数を指定します。この方法で設定された設定は、システムコンソールから無効になり、Mattermost を再起動しない限り変更できません。

HTTPS での GitLab Mattermost の実行

SSL 証明書と SSL 証明書キーを/etc/gitlab/ssl の内部に配置します。ディレクトリが存在しない場合は作成してください:

sudo mkdir -p /etc/gitlab/ssl
sudo chmod 755 /etc/gitlab/ssl
sudo cp mattermost.gitlab.example.key mattermost.gitlab.example.crt /etc/gitlab/ssl/

/etc/gitlab/gitlab.rb 、以下の設定を指定します:

mattermost_external_url 'https://mattermost.gitlab.example'
mattermost_nginx['redirect_http_to_https'] = true

証明書と鍵にmattermost.gitlab.example.crtmattermost.gitlab.example.key という名前を付けていない場合は、以下のようにフルパスも追加する必要があります。

mattermost_nginx['ssl_certificate'] = "/etc/gitlab/ssl/mattermost-nginx.crt"
mattermost_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/mattermost-nginx.key"

ここで、mattermost-nginx.crt はSSL証明書、mattermost-nginx.key はSSL鍵です。

設定が完了したら、sudo gitlab-ctl reconfigure を実行して変更を適用します。

GitLab Mattermost を自前のサーバーで動かす

GitLabとGitLab Mattermostを別々のサーバーで実行したい場合、GitLabサービスはGitLab Mattermostサーバー上でセットアップされたままですが、ユーザーリクエストを受け付けず、システムリソースを消費しません。GitLab Mattermost サーバー上で以下の設定と構成の詳細を使用することで、Linux パッケージにバンドルされている GitLab サービスを効果的に無効にすることができます。

mattermost_external_url 'http://mattermost.example.com'

# Shut down GitLab services on the Mattermost server
gitlab_rails['enable'] = false
redis['enable'] = false
postgres_exporter['enable'] = false
grafana['enable'] = false

その後、GitLab Mattermost の作成セクションの適切な手順に従ってください。最後に、GitLab とのインテグレーションを有効にするには、GitLab サーバーで以下を追加します:

gitlab_rails['mattermost_host'] = "https://mattermost.example.com"

デフォルトでは、GitLab Mattermost は全てのユーザーに GitLab でのサインアップを要求し、メールによるサインアップオプションは無効にしています。GitLab SSO に関する Mattermost のドキュメントを参照してください。

GitLab Mattermost を GitLab で手動 (再) 認証します。

GitLab Mattermostの再認証

GitLab Mattermost を再承認するには、まず既存の承認を取り消す必要があります。これは GitLab のSettings > Applicationsエリアで行えます。その後、以下の手順に従って作成者の認証を完了させてください。

GitLab Mattermost を認証します。

GitLab のSettings > Applicationsエリアに移動します。新しいアプリケーションを作成し、Redirect URIには以下を使用します(HTTPS を使用する場合はhttphttps に置き換えてください):

http://mattermost.example.com/signup/gitlab/complete
http://mattermost.example.com/login/gitlab/complete

必ずTrustedandConfidentialを選択してください。Scopesでread_user を選択します。そしてSaveapplication を選択します。

アプリケーションが作成されると、Application IDSecret が提供されます。もう一つ必要な情報は、GitLab インスタンスの URL です。GitLab Mattermost が稼働しているサーバーに戻り、/etc/gitlab/gitlab.rb の設定ファイルを、上記で受け取った値を使って以下のように編集します:

mattermost['gitlab_enable'] = true
mattermost['gitlab_id'] = "12345656"
mattermost['gitlab_secret'] = "123456789"
mattermost['gitlab_scope'] = "read_user"
mattermost['gitlab_auth_endpoint'] = "http://gitlab.example.com/oauth/authorize"
mattermost['gitlab_token_endpoint'] = "http://gitlab.example.com/oauth/token"
mattermost['gitlab_user_api_endpoint'] = "http://gitlab.example.com/api/v4/user"

変更を保存し、sudo gitlab-ctl reconfigure を実行します。エラーがなければ、GitLab と GitLab Mattermost は正しく設定されているはずです。

ユーザーとグループの識別子を数値で指定します。

Linux pacakage は、ユーザーとグループmattermost を作成します。これらのユーザーには、/etc/gitlab/gitlab.rb で以下のように数値識別子を指定できます:

mattermost['uid'] = 1234
mattermost['gid'] = 1234

sudo gitlab-ctl reconfigure を実行して変更を適用します。

カスタム環境変数の設定

必要に応じて、/etc/gitlab/gitlab.rb.N /etc/gitlab/gitlab.rbET を介して Mattermost が使用するカスタム環境変数を設定することができます。/etc/gitlab/gitlab.rbこれは、Mattermost サーバーが企業のインターネットプロキシの後ろでオペレーションされている場合に便利です。 /etc/gitlab/gitlab.rb mattermost['env'] /etc/gitlab/gitlab.rb/etc/gitlab/gitlab.rbハッシュ値を指定します。例えば

mattermost['env'] = {"HTTP_PROXY" => "my_proxy", "HTTPS_PROXY" => "my_proxy", "NO_PROXY" => "my_no_proxy"}

sudo gitlab-ctl reconfigure を実行して変更を適用します。

同梱の PostgreSQL データベースへの接続

同梱のPostgreSQLデータベースに接続する必要があり、デフォルトのLinuxパッケージのデータベース設定を使用している場合、PostgreSQLのスーパーユーザとして接続することができます:

sudo gitlab-psql -d mattermost_production

GitLab Mattermost のバックアップ

GitLab Mattermost は通常のLinux パッケージのバックアップRake タスクには含まれていません。

一般的な Mattermost のバックアップとディザスタリカバリのドキュメントは、バックアップが必要なもののガイドとして使用できます。

バンドルされている PostgreSQL データベースのバックアップ

バンドルされているPostgreSQLデータベースをバックアップする必要があり、デフォルトのLinuxパッケージのデータベース設定を使用している場合は、このコマンドを使用してバックアップできます:

sudo -i -u gitlab-psql -- /opt/gitlab/embedded/bin/pg_dump -h /var/opt/gitlab/postgresql mattermost_production | gzip > mattermost_dbdump_$(date --rfc-3339=date).sql.gz

data ディレクトリとconfig.json

Mattermost にはdata ディレクトリとconfig.json ファイルがあり、これらもバックアップする必要があります:

sudo tar -zcvf mattermost_data_$(date --rfc-3339=date).gz -C /var/opt/gitlab/mattermost data config.json

GitLab Mattermost のリストア

以前にGitLab Mattermost のバックアップを作成している場合は、以下のコマンドを実行して復元することができます:

# Stop Mattermost so we don't have any open database connections
sudo gitlab-ctl stop mattermost

# Drop the Mattermost database
sudo -u gitlab-psql /opt/gitlab/embedded/bin/dropdb -U gitlab-psql -h /var/opt/gitlab/postgresql -p 5432 mattermost_production

# Create the Mattermost database
sudo -u gitlab-psql /opt/gitlab/embedded/bin/createdb -U gitlab-psql -h /var/opt/gitlab/postgresql -p 5432 mattermost_production

# Perform the database restore
# Replace /tmp/mattermost_dbdump_2021-08-05.sql.gz with your backup
sudo -u mattermost sh -c "zcat /tmp/mattermost_dbdump_2021-08-05.sql.gz | /opt/gitlab/embedded/bin/psql -U gitlab_mattermost -h /var/opt/gitlab/postgresql -p 5432 mattermost_production"

# Restore the data directory and config.json
# Replace /tmp/mattermost_data_2021-08-09.gz with your backup
sudo tar -xzvf /tmp/mattermost_data_2021-08-09.gz -C /var/opt/gitlab/mattermost

# Fix permissions if required
sudo chown -R mattermost:mattermost /var/opt/gitlab/mattermost/data
sudo chown mattermost:mattermost /var/opt/gitlab/mattermost/config.json

# Start Mattermost
sudo gitlab-ctl start mattermost

Mattermost コマンドラインツール(CLI)

mmctl は、ローカルにインストールして Mattermost API を使用する Mattermost サーバー用の CLI ツールですが、リモートで使用することもできます。Mattermost をローカル接続用に設定するか、ローカルのログイン認証情報で管理者として認証する必要があります(GitLab SSO ではありません)。実行ファイルは/opt/gitlab/embedded/bin/mmctl にあります。

mmctl をローカル接続で使用します。

ローカル接続では、mmctl バイナリと Mattermost を同じサーバから実行する必要があります。ローカルソケットを有効にするには

  1. /var/opt/gitlab/mattermost/config.json を編集し、以下の行を追加します:

    {
        "ServiceSettings": {
           ...
            "EnableLocalMode": true,
            "LocalModeSocketLocation": "/var/tmp/mattermost_local.socket",
            ...
        }
    }
    
  2. Mattermost を再起動します:

    sudo gitlab-ctl restart mattermost
    

その後、sudo /opt/gitlab/embedded/bin/mmctl --local を使用して、Mattermost インスタンスでmmctl コマンドを実行できます。

例えば、ユーザーのリストを表示するには、次のようにします:

$ sudo /opt/gitlab/embedded/bin/mmctl --local user list

13dzo5bmg7fu8rdox347hbfxde: appsbot (appsbot@localhost)
tbnkwjdug3dejcoddboo4yuomr: boards (boards@localhost)
wd3g5zpepjgbfjgpdjaas7yj6a: feedbackbot (feedbackbot@localhost)
8d3zzgpurp85zgf1q88pef73eo: playbooks (playbooks@localhost)
There are 4 users on local instance

リモート接続でmmctl

リモート接続やローカル接続でソケットを使用できない場合は、非SSOユーザーを作成し、そのユーザーに管理者権限を与えてください。その認証情報を使ってmmctl を認証することができます:

$ /opt/gitlab/embedded/bin/mmctl auth login http://mattermost.example.com

Connection name: test
Username: local-user
Password:
 credentials for "test": "local-user@http://mattermost.example.com" stored

GitLab と Mattermost インテグレーションの設定

プラグインを使って Mattermost を購読すると、イシュー、マージリクエスト、プルリクエストに関する通知や、マージリクエストレビュー、未読メッセージ、タスク割り当てに関する個人通知を受け取ることができます。スラッシュコマンドを使用して、イシューの作成や閲覧、デプロイのトリガーなどのアクションを実行したい場合は、GitLabMattermost のスラッシュコマンドを使用します。

プラグインとスラッシュコマンドは一緒に使うことも、個別に使うこともできます。

メール通知

GitLab MattermostのSMTP設定

これらの設定は、システム管理者が Mattermost システムコンソールから行います。システムコンソールの 環境 > SMTPタブで、SMTP プロバイダから与えられた SMTP 認証情報を入力するか、sendmailを使用する場合は127.0.0.1 とポート25 を入力します。必要な特定の設定の詳細については、Mattermost ドキュメントを参照してください。

これらの設定は/var/opt/gitlab/mattermost/config.json でも設定できます。

電子メールのバッチ処理

この機能を有効にすると、ユーザーは電子メール通知を受け取る頻度を制御できます。

メールバッチは、Mattermostシステムコンソールで 環境 > SMTPタブに移動し、メールバッチの有効化設定をTrueに設定することで有効にできます。

この設定は/var/opt/gitlab/mattermost/config.json でも設定できます。

GitLab Mattermost のアップグレード

note
Mattermost のバージョンをアップグレードする際には、Mattermost の重要なアップグレードノートを確認し、実行が必要な変更やマイグレーションにアドレスすることが不可欠です。

GitLab Mattermost は、通常の Linux パッケージアップデートプロセスでアップグレードできます。以前のバージョンの GitLab をアップグレードする場合、GitLab の外部で Mattermost の設定が変更されていない場合にのみ、アップデートプロセスを使用できます。つまり、Mattermostconfig.json ファイルに config.json変更が加えられていないことconfig.json - 直接、または .Mattermostシステムコンソール経由で config.json

gitlab.rbを使って Mattermost の設定のみを行った場合は、Linux パッケージを使って GitLab をアップグレードし、gitlab-ctl reconfigure を実行して GitLab Mattermost を最新バージョンにアップグレードすることができます。

そうでない場合は、2つの選択肢があります:

  1. に加えられた変更でgitlab.rb を更新します。gitlab.rbconfig.jsonのすべての設定が config.json利用できるconfig.jsonわけではないので、いくつかのパラメータを追加する必要があるかも config.jsonしれません。完了したら、Linux パッケージは GitLab Mattermost をあるバージョンから次のバージョンにアップグレードできるはずです。
  2. Mattermost を Linux パッケージが管理するディレクトリの外にマイグレーションし、独立して管理・アップグレードできるようにしましょう。Mattermost マイグレーションガイドに従って、Mattermost の設定やデータを Linux パッケージから独立した別のディレクトリやサーバーに移行してください。

アップグレードに関する注意事項の完全なリストと、古いバージョンに対する特別な考慮事項については、Mattermost ドキュメントを参照してください。

GitLab Mattermost は Linux パッケージに同梱されています。

以下は GitLab 14.0 以降の Mattermost のバージョン変更のリストです:

GitLabバージョンMattermost バージョン備考
16.38.0 
16.07.10 
15.117.9 
15.107.8 
15.97.7 
15.77.5 
15.67.4 
15.57.3 
15.47.2 
15.37.1 
15.27.0 
15.16.7 
15.06.6 
14.106.5 
14.96.4 
14.86.3 
14.76.2 
14.66.16.0の代わりに6.1にアップデートしました。アップグレードノートを参照してください
14.45.39 
14.35.38 
14.25.37 
14.15.36 
14.05.35 

GitLab Mattermostを14.6にアップグレードする場合

GitLab 14.6 には Mattermost 6.1 が同梱されており、Mattermost 6.0 のデータベースマイグレーションが長く続く可能性があります。アップグレードに関する情報や、マイグレーションによるダウンタイムを減らす方法については、両バージョンの重要なアップグレードノートをお読みください。手動でのマイグレーションが必要な場合は、同梱の PostgreSQL データベースに接続してください。

note
Mattermost のアップグレードノートでは、PostgreSQL と MySQL データベースで使用した場合の異なる影響について言及しています。Linux パッケージに含まれる GitLab Mattermost は PostgreSQL データベースを使用します。

OAuth 2.0 シーケンス図

次の図は、GitLab が Mattermost の OAuth 2.0 プロバイダとしてどのように動作するかのシーケンス図です。インテグレーションを動作させる際のエラーのトラブルシューティングに利用できます:

sequenceDiagram User->>Mattermost: GET https://mm.domain.com Note over Mattermost, GitLab: Obtain access code Mattermost->>GitLab: GET https://gitlab.domain.com/oauth/authorize Note over User, GitLab: GitLab user signs in (if necessary) Note over GitLab: GitLab verifies client_id matches an OAuth application GitLab->>User: GitLab asks user to authorize Mattermost OAuth app User->>GitLab: User selects 'Allow' Note over GitLab: GitLab verifies redirect_uri matches list of valid URLs GitLab->>User: 302 redirect: https://mm.domain.com/signup/gitlab/complete User->>Mattermost: GET https://mm.domain.com/signup/gitlab/complete Note over Mattermost, GitLab: Exchange access code for access token Mattermost->>GitLab: POST http://gitlab.domain.com/oauth/token GitLab->>GitLab: Doorkeeper::TokensController#35;create GitLab->>Mattermost: Access token Note over Mattermost, GitLab: Mattermost looks up GitLab user Mattermost->>GitLab: GET https://gitlab.domain.com/api/v4/user GitLab->>Mattermost: User details Mattermost->>User: Mattermost/GitLab user ready

コミュニティサポートリソース

GitLab Mattermostデプロイに関するヘルプやサポートについては、こちらをご覧ください: