DockerForWindowsでGitLab・Mattermostを構築する


DockerForWindowsでGitLab・Mattermostを構築する

はじめに

 MattermostAPIを使って色々試してみたいと思い、サクッとGitLab環境を構築しようと思ったら思いの外ハマりまくったので、やったことを残しておきます。
やりたいこととしては、DockerForWindowsを用いてGitLab環境を構築する、です。

動くもの

GitHub上に置いています。(https://github.com/shimi58/CentOS8_GitLab)

ただし、Mattermost設定に関しては構築する毎に変わってくるので後述の手順が必要。

動作確認環境 バージョン
Windows10 Home Edition バージョン2004
Docker for Windows 2.4.0.0

※GitLabのDockerは、DockerForWindows公式サポート外なんですよねぇ。。ポートフォワーディングがうまく行かず(80→80はうまくいくけど、8080→80とかだと繋がらなくなる)、そういうことかなぁと。

環境構築

Docker上でCentOS8構築

Dockerfileに記述していきます。

出来上がりは以下のとおり。

FROM centos:8

# 日本語化
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial && \
    dnf -y upgrade && \
    dnf -y install glibc-locale-source && \
    dnf clean all && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 && \
    ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# Gitlabインストール用にLANGをC.UTF-8に変更しておく
ENV LANG="C.UTF-8" \
    LANGUAGE="ja_JP:ja" \
    LC_ALL="ja_JP.UTF-8"

# rootパスワード設定
RUN echo "root:root" | chpasswd

# =====
# BASE packages
# =====
RUN dnf install -y  openssl openssl-devel openssh openssh-server wget sudo unzip  which tree git firewalld

# =====
# GitLab CEをインストール
# =====
RUN curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

RUN dnf install -y gitlab-ce

docker-compose.yml
version: '3'
services:
  centos8:
    container_name: "centos8"
    build: ./
    tty: true
    privileged: true
    command: /sbin/init   
    ports:
      - "2222:22"
      - "9080:9080" #GitLab用
      - "9081:9081" #GitLabMattermost用
      - '10443:443'
    volumes:
      # 公式に則って永続化
      - './srv/gitlab/config:/etc/gitlab'   #GitLab定義ファイルを配置
      - './srv/gitlab/logs:/var/log/gitlab' #GItLabログファイル出力
      - './srv/gitlab/data:/var/opt/gitlab' #GItLabデータ格納

補足

  • 日本語環境設定

    # 日本語化
    RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial && \
        dnf -y upgrade && \
        dnf -y install glibc-locale-source && \
        dnf clean all && \
        localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 && \
        ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    
    # Gitlabインストール用にLANGをC.UTF-8に変更しておく
    ENV LANG="C.UTF-8" \
        LANGUAGE="ja_JP:ja" \
        LC_ALL="ja_JP.UTF-8"
    

    こちら(https://qiita.com/polarbear08/items/e5c00869c7566db5f7b8 )を参考にさせていただきました。
    LANGをC.UTF-8にしておかないと、「gitlab-ctl reconfigure」のDBマイグレーションあたりで止まるので要注意。

  • GitLab CEをインストール

    RUN curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
    
    RUN dnf install -y gitlab-ce
    

    こちらは公式にある手順の通りです。(公式だとサンプルはgitlab-eeになっているので注意)

  • データ永続化

    docker-compose.yml
        volumes:
          # 公式に則って永続化
          - './srv/gitlab/config:/etc/gitlab'   #GitLab定義ファイルを配置
          - './srv/gitlab/logs:/var/log/gitlab' #GItLabログファイル出力
          - './srv/gitlab/data:/var/opt/gitlab' #GItLabデータ格納
    

    こちらを設定しておくと、コンテナを落としてもデータが保持された状態になる

構築手順

  1. 前述のDockerfile、docker-compose.ymlを任意のディレクトリに配置する

  2. 配置したディレクトリに移動し、コンテナを起動する

    docker-compose up -d
    
  3. gitlab.rbを所定のフォルダに配置する

    srv
    └─gitlab
        ├─config
        │      gitlab.rb
        │
        ├─data
        └─logs
    

    このファイルはこちら(https://github.com/shimi58/CentOS8_GitLab )に。

    ※最初は後述のMattermostの設定をコメントアウトしたほうがいいかも。(Applicationsに出てこなくなったり、手順通りできなくなる可能性あり)

  4. GitLabのポートを設定する

    gitlab.rb
    external_url 'http://localhost:9080'
    
  5. GitLab Mattermostを有効化する

    gitlab.rb
    mattermost_external_url 'http://localhost:9081'
    mattermost['enable'] = true
    
  6. コンテナにログインする

    docker exec -it centos8 bash
    

    ※DockerForWindowsのCLIからログインすると、LANG設定まわりが反映されないので、powershellからログインしている

    ※LANG設定が期待通り

  7. GitLab設定を反映する

    sudo /opt/gitlab/embedded/bin/runsvdir-start &
    gitlab-ctl reconfigure
    

    ※「gitlab-ctl reconfigure」単独だと途中で止まるので、こちら(https://teratail.com/questions/229107 )を参考に、runsvdir-start をバックグラウンド実行してから reconfigure。

    初回は5分弱はかかります。

  8. 反映が終わったら、GitLabにアクセス

    http://localhost:9080
    

    ※ログインできることを確認する

- このタイミングでMattermostも表示できる

    ```url
    http://localhost:9081
    ```

補足

  • 以降はMattermostのSSO連携の手順となる
  1. パスワード初期設定を終え、ログイン


    ※初期IDは「root」

  2. Mattermostの設定を確認する

    • 「Admin Area」→「Applications」に移動
    • すでにMattermost用の定義があればそれを使用し、なければ新規に作成する(※gitlab.rbのmattermost設定周りを有効にしていたら表示されないです。)

    ※こちら(https://qiita.com/TomoyukiSugiyama/items/0d828ee2325095a7f247 )を参考にさせていただきました。

  3. 上述で確認した、「Application ID」、「Secret」をgitlab.rbに反映する
    あわせて、必要な設定を追加する

    gitlab.rb
    mattermost['gitlab_enable'] = true #SSO有効化
    mattermost['gitlab_id'] = "5e7f43cdf588e92c8b0ca589832c64dd5094969c5848667a09e50ffe4834c065"      #Application ID
    mattermost['gitlab_secret'] = "23791f7219f6782f38c9c1f462c5e715e88216ee13d3513a122dc9c302ba130b"  #secret
    mattermost['gitlab_auth_endpoint'] = "http://localhost:9080/oauth/authorize" #GitLabのURLを記載する
    mattermost['gitlab_token_endpoint'] = "http://localhost:9080/oauth/token"    #GitLabのURLを記載する
    mattermost['gitlab_user_api_endpoint'] = "http://localhost:9080/api/v4/user" #GitLabのURLを記載する
    
  4. GitLab設定を反映する

    gitlab-ctl reconfigure
    
  5. Mattermostから、「Sign in with GitLab」を選択し、ログインする


    ※うまく疎通が通ったらこの画面に移行するので、「Anthorize」を選択。

  6. Mattermost画面に遷移することを確認する

さいごに

 今回構築したGitLabですが、COREi7、メモリ16Gでもめちゃんこ重たいです。

※CPUメモリともにめっちゃ頑張ってます。。
ということで、ようやくMattermostAPIが触れる下地ができたので、次はAPI触っていきたいと思います。

2020/10/18追記

コンテナ再構築後、永続化データを復元する反映する際は、gitlab-ctl reconfigureが必要です。