LoginSignup
4
5

More than 5 years have passed since last update.

Docker GitLab(gitlab/gitlab-ce)のMattermostにGitLabアカウントでログインしたいのに上手くいかなかった話

Posted at

事始め

元々はVM(VirtualBox + CentOS7.1)でGitLabを公開していたのですが、
VMの置き場が自分の管理下のマシンではなく扱いづらいのが我慢できなくなったため、
思い切って自身が使っているLinuxマシン上でDockerを利用してGitLabを建て直そうと言うことになりました。

その際、Mattermost先生にも今まで通り活躍していただこうと設定していたのですが、
GitLabアカウントでのログインが出来るようになるまでエラい時間がかかってしまいました。

ちなみに私はGitLabのバックアップはMattermostのバックアップも併せてやっていると思っていたので、
この記事を書いている時点ではまだMattermostの完全な移行は完了していません。
手順をそのままなぞってもMattermostは新品を使う羽目になりますので、
その点では全く参考になりません。

あと、記事を書いたおかげで気付けましたが、
gitlab-runnerの登録が死にました。
多分Tokenの値が変わっちゃったんでしょうね。
この点も上手く移行出来ないと使い勝手悪いので、
やり方がわかり次第追記することとしてこの記事は書き逃げます!

前提条件

まずは手順

大まかに以下の内容で移行作業を行いました。

  1. VMでGitLabのバックアップを取る。
  2. Dockerホスト上でGitLabのDockerコンテナを建てる。
  3. GitLabのデータをレストアする。
  4. 設定ファイルを一部修正する。
  5. MattermostにGitLabアカウントでログイン出来るようにする。

VMでGitLabのバックアップを取る

GitLabが用意しているバックアップコマンドを使います。

詳細を知るために公式サイトを確認しましょう。
Backing up and restoring GitLab

Omnibusパッケージでのバックアップ作業はこれだけです。

sudo gitlab-rake gitlab:backup:create
tar czf backup_etc_gitlab.tar.gz /etc/gitlab

簡単すぎて感謝しかない。。
あとは生成されたバックアップファイルを吸い出してください。
ちなみに一行目で生成されたファイルは/var/opt/gitlab/backupsにあります。
私のときは1535992280_2018_09_04_11.2.1_gitlab_backup.tarというファイルが生成されました。

Dockerホスト上でGitLabのDockerコンテナを建てる

元々使用していたGitLabと同じバージョンのコンテナを建てましょう。
今回はgitlab-ce-11.2.1が該当します。

まずはDockerイメージをdocker pullします。
Dockerイメージのタグはここから探してください。

sudo docker pull gitlab/gitlab-ce:11.2.1-ce.0

あとはもうdocker runするだけとなりますが、
ここでまた公式サイトを確認しましょう。
GitLab Docker images(run-the-image)

hostnameだけ必ず変更が必要かと思います。
私はTCPポート22がsshdと衝突してダメだったので併せて変更しています。
また、後ほど使うMattermost先生のために追加で999を繋いでいます。
Dockerイメージのタグも適宜変更してください。

sudo docker run --detach \
    --hostname  ★任意のIP or ドメイン★\
    --publish 443:443 --publish 80:80 --publish 10022:22 --publish 999:999 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:11.2.1-ce.0

GitLabのデータをレストアする

バックアップ時に生成されたファイルを用意してください。
上記のdocker runを行っている場合はバックアップファイルを以下のディレクトリに置くとわかりやすいです。

1535992280_2018_09_04_11.2.1_gitlab_backup.tar
  => /srv/gitlab/data/backups

backup_etc_gitlab.tar.gz
  => /srv/gitlab/

ではレストアしていきます。
例によって公式サイトを確認しましょう。
バックアップファイルは上記の通り配置済みとします。
Backing up and restoring GitLab (Restore for Omnibus installations)

sudo /srv/gitlab/config /srv/gitlab/config_bak
sudo tar xzf /srv/gitlab/backup_etc_gitlab.tar.gz -C /srv/gitlab/
sudo mv /srv/gitlab/gitlab /srv/gitlab/config
sudo docker exec -it gitlab /bin/bash

以下、dockerコンテナ内

gitlab-rake gitlab:backup:restore BACKUP=1535992280_2018_09_04_11.2.1
gitlab-ctl reconfigure

ここは後から考えると若干公式を無視していますね。。
手順は公式に従ってやった方が良いのでこれでもいけるのか程度にとどめてください。

設定ファイルを一部修正する

/etc/gitlab/gitlab.rb(Dockerホスト上では/srv/gitlab/config/gitlab.rb)を修正します。
元々の環境と変わるようなところだけなのでIPアドレスくらいの変更で良いです。
# 本当は良くないですが後述します。

ここまででGitLabはアクセス出来るようになっているはずです。
なっていない場合はファイアウォールなどの設定を確認してください。

MattermostにGitLabアカウントでログイン出来るようにする

ようやく本題です。
先に答え(とりあえず動くようになった)の手順を書きます。

  1. GitLabにrootでログインしてAdmin Area > ApplicationsのMattermostのCallback URLを修正する。
  2. Dockerコンテナ内でchown -R mattermost:mattermost /opt/gitlab/emmbeded/service/mattermostを実行する。
  3. /etc/gitlab/gitlab.rbmattermost['gitlab_token_endpoint']mattermost['gitlab_user_api_endpoint']を修正する。

メモ上はこれで終わった形になっています。
再度試していないから本当に平気かはわからないので、
もしこのページを見て解決しようとして出来なかった場合は検証しますので是非コメントください。

手順1

ドメインではなくIPアドレスで運用していたのであれば、
VMからDockerホストに移住した関係で大体のケースでIPアドレスに変更があるはずです。
適宜変更してください。

手順2

/opt/gitlab/emmbeded/service/mattermostをmattermostユーザーが読み書き出来るようにします。
これを抜くと以下のようなエラーがログに残ります。

/var/log/gitlab/mattermost/mattermost.log
{"level":"error","ts":1536110204.4357848,"caller":"app/plugin.go:545","msg":"Failed to start up plugins","error":"mkdir ./plugins: permission denied"}

ちなみにDockerホスト上では/srv/gitlab/logs/mattermost/mattermost.logにあります。
これが本当に問題あるのかどうかという点は手順を変えて確認しないとわかりませんが、
まぁディレクトリ作成に失敗してerrorだと言っているんだから対応しておくべきでしょう。

手順3

結局のところ詰まっていたのはここです。
私の環境ではこの設定をやらないとtokenの取得が出来ませんでした。

こんな感じ
mattermost_token_error.png

sudo docker exec -it gitlab /bin/bash

以下、Dockerコンテナ内

apt-get update
apt-get install -y iproute2
ip address

これでDockerコンテナ内での自身のIPアドレスがわかります。
私の場合は172.18.0.2でした。
このIPアドレスは要はGitLabのIPアドレスとして使いたいのですが、
多分こんなことをしているのはプロキシ環境下だからなのだと思います。
通常はDockerホストのIPアドレスを入れればイコールGitLabのIPアドレスになるのではないかと思います。

そんなわけで変更した結果は以下の通りです。

mattermost['gitlab_token_endpoint'] = "http://172.18.0.2/oauth/token"
mattermost['gitlab_user_api_endpoint'] = "http://172.18.0.2/api/v4/user"

さいごに

あまりに苦戦したのでその時間を何かに昇華したくて本記事を書きました。
同じく苦戦している人が読んでその問題が解決出来たらそれはとても嬉しいなって、そう思います。
疲れた!

4
5
0

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
4
5